前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot多文件配置根据环境加载不同配置

SpringBoot多文件配置根据环境加载不同配置

作者头像
青衫染红尘
发布2021-01-19 11:27:26
1.9K0
发布2021-01-19 11:27:26
举报
文章被收录于专栏:Surpass' BlogSurpass' Blog

在平时开发时,会发现公司的项目会不同的环境使用到不同的配置。如本地,测试,预发布,发布等环境,像数据库这些都要使用到不同的配置。如果只有一个配置文件,发布到不同环境的时候都要去修改一遍那简直就是遭罪,那么,如何实现SpringBoot根据需要去加载不同的配置文件?

项目构建

SpringBoot提供简单配置能够让我们进行不同配置文件的加载。

创建Maven项目

这里简单的常见一个用户类和控制器模仿一般的逻辑,获取用户的信息。

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.68</version>
    </dependency>
</dependencies>

用户类

代码语言:javascript
复制
public class User {
    private String username;
    private String address;
    private String email;
    private String id;
    private String message;

    public User(String id) {
        this.username = "张三";
        this.address = "亚历山大";
        this.email = "sing@example.com";
        this.id = id;
    }
}

控制器

代码语言:javascript
复制
@RestController
public class Controller {
    @Value("${custom.value}")
    private String customValue;

    @RequestMapping(value = "/userInfo/{id}",method = RequestMethod.GET)
    public JSON getUserInfo(@PathVariable("id")String id){
        User user = new User(id);
        user.setMessage(customValue);
        return JSONObject.parseObject(JSON.toJSONString(user));
    }
}

启动器

代码语言:javascript
复制
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

说明:这里利用Restful风格的请求方式,获取用户的个人信息,从配置文件中获取message复制给用户,然后以JSON的形式返回给页面。

这里来看配置配置文件

application.yml

代码语言:javascript
复制
server:
  port: 8000  #指定端口号
  
custom:
  value: This Is Application   #自定义的value值(message)

利用postman请求发现没有问题,注意看属性message的值。

进行多文件配置

application-dev.yml

代码语言:javascript
复制
server:
  port: 8001 #指定端口号
  
custom:
  value: This Is Application-dev  ##自定义的value值(message)

application-uat.yml

代码语言:javascript
复制
server:
  port: 8002  #指定端口号

custom:
  value: This Is Application-uat  #自定义的value值(message)

application-pro.yml

代码语言:javascript
复制
server:
  port: 8003 #指定端口号

custom:
  value: This Is Application-pro  #自定义的value值(message)

如果要启动使用不同的配置配置文件name就需要在application.yml中添加额外的配置

代码语言:javascript
复制
spring:
 profiles:
    active: uat

这样在启动的时候就使用的是uat的配置了,启动查看message信息。

我们可以看到message的信息就是application-uat.yml里面配置的,同时还能注意到当我们application.ymlapplication-uat.yml进行相同的配置是,SpringBoot会优先使用指定配置profiles的值。如果没有才会去application.yml里面找。

补充

Maven打包

那么说到了SpringBoot加载不同的配置文件启动,那么不妨说一下Maven根据不同环境用不同的配置文件打包。

在pom.xml中添加配置:

代码语言:javascript
复制
<profiles>
       <profile>
           <id>dev</id>    <!--为env起一个名字-->
           <properties>
               <env>dev</env>
           </properties>
       </profile>
       <profile>
           <id>uat</id>
           <properties>
               <env>uat</env>
           </properties>
           <activation>
               <activeByDefault>true</activeByDefault>  <!--默认加载uat,实际根据环境需求-->
           </activation>
       </profile>
       <profile>
           <id>pro</id>
           <properties>
               <env>pro</env>
           </properties>
       </profile>
   </profiles>

<!--build标签中添加如下的配置>
<resources>
       <resource>
           <directory>src/main/resources</directory>   <!--指定文件下-->
           <filtering>true</filtering>      <!--动态配置-->
           <excludes>       <!--去除多余的文件-->
               <exclude>application.yml</exclude>
               <exclude>application-dev.yml</exclude>
               <exclude>application-pro.yml</exclude>
               <exclude>application-uat.yml</exclude>
           </excludes>
       </resource>
       <resource>
           <directory>src/main/resources</directory>
           <filtering>true</filtering>    <!--动态配置  ${env}-->
           <includes>     <!--包含加载的文件(env  默认加载uat 具体看配置)-->
               <include>application-${env}.yml</include>
               <include>application.yml</include>
           </includes>
       </resource>
   </resources>

配置完成后依次执行命令mvn clean ; mvn package进行打包,maven会根据你的配置去打包相应的文件,打包完成后如图包含的配置文件。

使用postman去请求得到的结果,如图:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目构建
    • 创建Maven项目
      • 进行多文件配置
      • 补充
        • Maven打包
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档