SpringBoot —— 运行环境切换(多 profiles 文档)

导读:本篇文章讲解 SpringBoot —— 运行环境切换(多 profiles 文档),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!