SpringBoot Profiles实现多环境下配置切换

版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/yh_zeng2 https://blog.csdn.net/yh_zeng2/article/details/82351011

      什么是Profile呢?用户配置文件,即开发人员可以针对项目的各种环境(场景)制定特有的配置文件,然后要切换场景的时候,切换下配置文件就可以了。

     SpringBoot项目,可以使用yml文件作为配置文件,当然也可以使用properties文件。

下面以添加开发(dev)、测试(test)和生产(prod)环境的配置为例子,讲解如何实现

   实现方式有两种,写yml文件或者properties文件这两种文件。

1. 通过properties配置文件实现

      如果使用application.properties进行多个环境的配置,原理跟使用多个yml配置文件一致,创建application-{profile}.properties文件 存放不同环境特有的配置,将于环境无关的属性放置到application.properties文件里面,并在application.properties文件中通过spring.profiles.active=xxx 指定加载不同环境的配置。如果不指定,则默认加载application.properties的配置,不会加载带有profile的配置。

      application-dev.properties

#开发环境dev加载的配置文件
spring.profiles=dev
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.datasource.username=test
spring.datasource.password=test
spring.jpa.database=ORACLE
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
logging.config=classpath:log4j2-dev.xml

      application-prod.properties

#生产环境prod加载的配置文件
spring.profiles=prod
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.datasource.username=test
spring.datasource.password=test
spring.jpa.database=ORACLE
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
logging.config=classpath:log4j2-prod.xml

        application-test.properties

#测试环境test加载的配置文件
spring.profiles=test
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.datasource.username=test
spring.datasource.password=test
spring.jpa.database=ORACLE
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
logging.config=classpath:log4j2-test.xml

      application.properties

#-------------------------通用配置,程序启动默认加载,并根据不同的环境(开发、测试、生产)还会加载特定环境下的配置文件--------------
server.port=8081
#配置项目启动的时候,决定使用哪个环境,开发(dev)、测试(test)还是产品(prod)环境
spring.profiles.active=dev

当然,spring.profiles指定的值是自定义的,可以随意添加场景(环境)。

      注意:在该例子中,必须指定spring.profiles.active=XXX,否则项目只会加载通用配置,其它的环境特定的配置不会生效!你也可以在项目启动的时候,添加参数指定启动哪个profile,命令如下:

java -jar xxx.jar --spring.profiles.active=test 表示使用测试环境的配置

   上述demo,不能够通过Maven Profiles来切换加载的配置文件!如果要配合Maven Profiles来切换配置,见文章《SpringBoot Profiles配合Maven Profiles以及Filtering实现多环境下配置切换》

2. 通过yml配置文件实现

         yml文件和properties不同,只需要把各个环境的配置写到一个yml文件中,当然也可以每个环境写一个yml文件,创建application-{profile}.yml文件 存放不同环境特有的配置,例如 application-test.yml 存放测试环境特有的配置属性,application-prod.yml 存放生产环境特有的配置属性。通过这种形式来配置多个环境的属性文件,在application.yml文件里面spring.profiles.active=xxx来指定加载不同环境的配置,如果不指定,则默认只使用application.yml属性文件,不会加载其他的profiles的配置。

application.yml

server:
  port: 8081
   
#配置项目启动的时候,使用哪个环境,开发、测试还是产品环境
spring:
  profiles:
    active: dev

---
#开发环境dev加载的配置
spring:
  profiles: dev
  datasource:
    url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
    driverClassName: oracle.jdbc.driver.OracleDriver
    username: test
    password: test
  jpa:
    database: ORACLE
    show-sql: true
    hibernate:
      ddl-auto: update
      naming:
        strategy: org.hibernate.cfg.ImprovedNamingStrategy

logging:
   config: classpath:log4j2-dev.xml

---
#测试环境test加载的配置
spring:
  profiles: test
  datasource:
    url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
    driverClassName: oracle.jdbc.driver.OracleDriver
    username: test
    password: test
  jpa:
    database: ORACLE
    show-sql: true
    hibernate:
      ddl-auto: update
      naming:
        strategy: org.hibernate.cfg.ImprovedNamingStrategy

logging:
   config: classpath:log4j2-test.xml

---
#生产环境prod加载的配置
spring:
  profiles: prod
  datasource:
    url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
    driverClassName: oracle.jdbc.driver.OracleDriver
    username: test
    password: test
  jpa:
    database: ORACLE
    show-sql: true
    hibernate:
      ddl-auto: update
      naming:
        strategy: org.hibernate.cfg.ImprovedNamingStrategy

logging:
   config: classpath:log4j2-prod.xml

      在该例子中,使用 --- 来作为分隔符,第一部分通用配置部分,表示三个环境都通用的属性, 后面三段分别为:开发,测试,生产,用spring.profiles指定了一个值(开发为dev,测试为test,生产为prod),这个值表示该段配置应该用在哪个profile里面。当然,spring.profiles指定的值是自定义的,可以随意添加场景(环境)。

      注意:在该例子中,必须指定spring.profiles.active=XXX,否则项目只会加载通用配置,其它的环境特定的配置不会生效!你也可以在项目启动的时候,添加参数指定启动哪个profile,命令如下:

java -jar xxx.jar --spring.profiles.active=test 表示使用测试环境的配置

   上述demo,不能够通过Maven Profiles来切换加载的配置文件!如果要配合Maven Profiles来切换配置,见文章《SpringBoot Profiles配合Maven Profiles以及Filtering实现多环境下配置切换》

猜你喜欢

转载自blog.csdn.net/yh_zeng2/article/details/82351011
今日推荐