什么是Profile呢?用户配置文件,即开发人员可以针对项目的各种环境(场景)制定特有的配置文件,然后要切换场景的时候,切换下配置文件就可以了。
SpringBoot项目,可以使用yml文件作为配置文件,当然也可以使用properties文件。
下面以添加开发(dev)、测试(test)和生产(prod)环境的配置为例子,讲解如何实现
实现方式有两种,写yml文件或者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 表示使用测试环境的配置
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 表示使用测试环境的配置