SpringBoot ———— 运行环境切换(多 profiles 文档)
SpringBoot 的一个应用为了在不同的环境下工作,常常会有不同的配置,代码逻辑处理。Spring Boot 对此提供了简便的支持: @Profile、spring.profiles.active
我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这时候,我们可以利用profile在不同的环境下配置用不同的配置文件或者不同的配置
spring boot允许你通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件,然后通过在application.properyies通过spring.profiles.active来具体激活一个或者多个配置文件,如果没有没有指定任何profile的配置文件的话,spring boot默认会启动application-default.properties。
一、区分环境的配置
我们在主配置文件编写的时候,
文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置;
假设,一个应用的工作环境有:dev(开发)、test(测试)、prod(上线)
- applcation.properties – 公共配置
- application-dev.properties – 开发环境配置
- application-test.properties – 测试环境配置
- application-prod.properties – 生产环境配置
激活指定 profile
1、在配置文件中指定 spring.profiles.active=dev
2、命令行:
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
可以直接在测试的时候,配置传入命令行参数
3、虚拟机参数;
-Dspring.profiles.active=dev
profiles 如下:
1. properties 配置
在 applcation.properties 文件中可以通过以下配置来激活 profile
# 服务器端口号
server.port = 8080
# #指定激活哪个环境——测试环境
spring.profiles.active = test
2. yml 配置
- yml 单文档方式 – 在 applcation.yml 文件中可以通过以下配置来激活 profile
spring:
profiles:
active: prod
- yml支持多文档块方式 – 可以在一个yml文件中完成所有 profile 的配置
注意:不同 profile 之间通过 — 分割
# 激活 prod
spring:
profiles:
active: prod
# 也可以同时激活多个 profile
# spring.profiles.active: prod,proddb,prodlog
---
# dev 开发环境配置
spring:
profiles: dev
---
# test 测试环境配置
spring:
profiles: test
---
# prod 生产环境配置
spring.profiles: prod
spring.profiles.include:
- proddb
- prodlog
---
spring:
profiles: proddb
---
spring:
profiles: prodlog
二、区分环境的代码
使用 @Profile 注解可以指定类或方法在特定的 Profile 环境生效。
修饰类
@Configuration
@Profile("Production")
public class JndiDataConfig {
@Bean
public DataSource dataSource() throws Exception {
Context ctx = new InitialContext();
return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
}
}
修饰注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Profile("production")
public @interface Production {
}
修饰方法
@Configuration
public class AppConfig {
@Bean("dataSource")
@Profile("production")
public DataSource jndiDataSource() throws Exception {
Context ctx = new InitialContext();
return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
}
}
四、参考资料
Spring 官方文档之 Bean Definition Profiles
Spring Boot 官方文档之 boot-features-profiles
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/69780.html