美文网首页海外敦煌简友好文互动专题
springboot 使用profile多环境配置

springboot 使用profile多环境配置

作者: dylan丶QAQ | 来源:发表于2021-04-18 22:42 被阅读0次

当应用部署到不同的运行环境中的时候,有些配置细节通常会有些差别。例如 数据库链接细节。虽然我们可以使用环境变量的方式来指定配置属性,但使用Spring profile 将更加的方便。一起干饭!


本章主要内容

  • 定义特定profile相关的属性
  • 激活profile
  • 使用profile条件化bean

使用profile可以解决多环境配置切换问题,比如测试环境,开发环境,生产环境

1.定义特定profile相关的属性

方法一: 创建各自的属性文件

创建新的YML或属性文件,其中只包含用户生产环境的属性。文件的名称要遵守如下的约定:application-{profile名}.yml或 application-{profile名}.properties。然后,我们就可以在这里声明适用于该profile的配置属性了。

logging:
  level:
    tacos:warn
方法二: 使用3个中划线进行分割

将特定的profile的属性和非profile的属性都放到application.yml中,它们之间使用3个中划线进行分割,并且使用spring.profiles属性命名。如果按照这种方式定义生产环境的属性,等价的application.yml如下:

logging:
  level: 
    tacos: debug
    
---
spring:
  profiles: prod

  datasource:
    url: jdbc:mysql://localhost:3306/platform?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: xxx
    password: xxx

logging:
  level: 
    tacos: warn

application.yml文件通过一组中划线(---) 分成了两部分。第二部分指定了spring.profiles值,代表后面的属性适用于prod profile。而第一部分的属性没有指定spring.profiles,所以他们是所有profile通用的,如果当前激活的profile没有设置这些属性,他们就会作为默认值。

2.激活profile

要激活某个profile,需要做的就是将profile名称的列表赋值给spring.profiles.active属性。例如,在application.yml中,我们可以这样设置:

spring:
  profiles:
    active: prod

但是,这可能是激活profile最糟糕的一种方式。因为这样,我们体验不到使用profile将生产环境相关属性和开发环境相关的属性分开的任何好处。因此,我推荐使用环境变量来设置处于激活状态的profile。在生产环境中,我们可以这样设置SPRING_PROFILES_ACTIVE:

% export SPRING_PROFILES_ACTIVE=prod

这样部署到该机器上的任何应用都会激活prod profile,对应的属性会比默认profile具备更高的优先级。

如果可以执行JAR文件的形式运行应用,那么我们还可以以命令行参数的形式设置激活的profile:

% java -jar xxx.jar --spring.profiles.active=prod

当然,如果要设置激活多个profile。通常通过逗号分割的列表来实现:

% java -jar xxx.jar --spring.profiles.active=prod,abc,dev

如果我们将spring应用部署到Cloud Foundry中,将会自动激活一个名为cloud的profile。默认激活。。

3.使用profile条件化地创建bean

假设我们希望某些bean 仅在特定profile激活的情况下才需要创建。在这种情况下,@Profile注解可以将某些bean设置为仅使用与给定的profile。

package com.ptdot.portal.controller;


import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;

public class Test2 {

    @Bean
    @Profile("dev")
    public CommandLineRunner dataLoader() {

    }
}


不要以为每天把功能完成了就行了,这种思想是要不得的,互勉~!

若文章对您有用,请点赞支持哦。

相关文章

网友评论

    本文标题:springboot 使用profile多环境配置

    本文链接:https://www.haomeiwen.com/subject/ydrplltx.html