美文网首页springboot
SpringBoot Profiles

SpringBoot Profiles

作者: lconcise | 来源:发表于2019-08-22 19:15 被阅读0次
    1. 根据环境更改配置,不同环境配置不同
      1.1 YAML 更改配置
      1.2 application-${profile}.properties 更改配置
    2. @Profile 使用
    3. 工具类

    根据环境更改配置

    官方文档

    方式一 YAML

    新建一个web项目,新建配置文件application.yml:

    server:
      port: 9090
    
    spring:
      profiles:
        active: pro
    ---
    #development environment
    spring:
      profiles: dev
    
    test_name: dev_testName
    ---
    #production environment
    spring:
      profiles: pro
    
    test_name: pro_testName
    

    application.yml文件分为三部分,使用 --- 来作为分隔符,第一部分通用配置部分,表示两个环境都通用的属性, 后面三段分别为:开发,生产
    profiles.active后面的文字决定 开发模式,还是生成模式

    创建TestController:

    @RestController
    public class HelloController {
    
        @Value("${test_name}")
        private String testName;
    
        @GetMapping("/hello")
        public String hello() {
            return testName;
        }
    }
    

    启动项目,访问http://127.0.0.1:9090/hello

    image.png

    修改application.yml 文件

    server:
      port: 9090
    
    spring:
      profiles:
        active: dev
    ---
    #development environment
    spring:
      profiles: dev
    
    test_name: dev_testName
    ---
    #production environment
    spring:
      profiles: pro
    
    test_name: pro_testName
    

    修改 active: dev
    启动项目,访问http://127.0.0.1:9090/hello

    image.png

    结论:配置profile.active不同,获取的test_name的值不同。

    方式二:application-${profile}.properties 更改配置

    you can use application-${profile}.properties to specify profile-specific values.

    resource 目录下创建文件application-dev.yml,application-pro.yml文件


    image.png

    内容分别为:

    test_name: dev_testName_file
    
    test_name: pro_testName_file
    

    application.yml 内容为:

    server:
      port: 9090
    
    spring:
      profiles:
        active: dev
    

    启动项目测试,和上面结果一样,不同配置,读取的配置不同。

    @Profile 使用

    官方地址

    1. @Profile注解使用范围:
      @Configration 和 @Component 注解的类及其方法,其中包括继承了@Component的注解:@Service、@Controller、@Repository等…

    2. @Profile可接受一个或者多个参数

    @Service
    @Profile({"pro","dev"})
    

    Demo

    创建接口类

    public interface HelloService {
        String getTestName();
    }
    

    创建两个实现类:

    @Service
    @Profile("dev")
    public class DevHelloServiceImpl implements HelloService {
    
        @Value("${test_name}")
        private String testName;
    
        @Override
        public String getTestName() {
            return "开发环境   "+testName;
        }
    }
    
    @Service
    @Profile("pro")
    public class ProHelloServiceImpl implements HelloService {
        @Value("${test_name}")
        private String testName;
    
        @Override
        public String getTestName() {
            return "生产环境   " + testName;
        }
    }
    

    @Profile("pro") 注解代表不同的环境配置。

    编写接口测试:

    @RestController
    public class HelloController {
    
        @Autowired
        private HelloService helloService;
    
        @GetMapping("/")
        public String getTestName() {
            return helloService.getTestName();
        }
    }
    

    当前application.yml文件中 profiles.active: dev
    启动项目,访问:http://127.0.0.1:9090/
    返回如下:

    image.png

    工具类

    @Component
    public class ProfileUtil implements ApplicationContextAware {
    
        private static ApplicationContext context;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            context = applicationContext;
        }
    
        /**
         * 获取当前环境的active profile.
         *
         * @return
         */
        public static String getActiveProfile() {
            String[] activeProfiles = context.getEnvironment().getActiveProfiles();
            if (!ArrayUtils.isEmpty(activeProfiles)) {
                return activeProfiles[0];
            }
            return "";
        }
    }
    

    源码地址:https://github.com/lbshold/springboot/tree/master/Spring-Boot-ProfileDemo

    参考文章:https://blog.csdn.net/zknxx/article/details/77906096
    https://blog.csdn.net/fmuma/article/details/82787500

    相关文章

      网友评论

        本文标题:SpringBoot Profiles

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