查看原文
其他

Spring Boot - Profile不同环境配置

2017-09-15 javastack Java技术栈


Profile是什么

Profile我也找不出合适的中文来定义,简单来说,Profile就是Spring Boot可以对不同环境或者指令来读取不同的配置文件。

Profile使用

假如有开发、测试、生产三个不同的环境,需要定义三个不同环境下的配置。

基于properties文件类型

你可以另外建立3个环境下的配置文件:

applcation.properties

application-dev.properties

application-test.properties

application-prod.properties

然后在applcation.properties文件中指定当前的环境spring.profiles.active=test,这时候读取的就是application-test.properties文件。

基于yml文件类型

只需要一个applcation.yml文件就能搞定,推荐此方式。

  1. spring:

  2.  profiles:

  3.    active: prod

  4. ---

  5. spring:

  6.  profiles: dev  

  7. server:

  8.  port: 8080  

  9. ---

  10. spring:

  11.  profiles: test  

  12. server:

  13.  port: 8081    

  14. ---

  15. spring.profiles: prod

  16. spring.profiles.include:

  17.  - proddb

  18.  - prodmq

  19. server:

  20.  port: 8082      

  21. ---

  22. spring:

  23.  profiles: proddb  

  24. db:

  25.  name: mysql  

  26. ---

  27. spring:

  28.  profiles: prodmq  

  29. mq:

  30.  address: localhost

此时读取的就是prod的配置,prod包含proddb,prodmq,此时可以读取proddb,prodmq下的配置。

也可以同时激活三个配置。

  1. spring.profiles.active: prod,proddb,prodmq

基于Java代码

在JAVA配置代码中也可以加不同Profile下定义不同的配置文件,@Profile注解只能组合使用@Configuration和@Component注解。

  1. @Configuration

  2. @Profile("prod")

  3. public class ProductionConfiguration {

  4.    // ...

  5. }

指定Profile

main方法启动方式:

  1. // 在Eclipse Arguments里面添加

  2. --spring.profiles.active=prod

插件启动方式:

  1. spring-boot:run -Drun.profiles=prod

jar运行方式:

  1. java -jar xx.jar --spring.profiles.active=prod

除了在配置文件和命令行中指定Profile,还可以在启动类中写死指定,通过SpringApplication.setAdditionalProfiles方法。

SpringApplication.class

  1. public void setAdditionalProfiles(String... profiles) {

  2.    this.additionalProfiles = new LinkedHashSet<String>(Arrays.asList(profiles));

  3. }


看完是否收获良多?

分享到朋友圈给更多的人吧。





您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存