• @Profile使用及SpringBoot获取profile值


    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/Fmuma/article/details/82787500

    之前开发用过 maven 的环境隔离,现在使用springboot的@Profile功能,发现spring体系真的大到我只是学习了皮毛。相比面试问的 IOC,bean的作用域等,突然觉得很可笑。

    官方文档关于 Profile 的使用
    https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#boot-features-profiles

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

        @Profile可接受一个或者多个参数,例如:

    @Service
    @Profile({"prod","default"})

    Demo

    参考: https://blog.csdn.net/zknxx/article/details/77906096

    先看项目架构体系,只需要看展示的类,其他不用管

    在这里插入图片描述
    application.properties 配置文件

    spring.profiles.active=prod,default

    service

    public interface ProfileService {
        String getMsg();
    }


    service.impl

    @Service
    @Profile("dev")
    public class DevServiceImpl implements ProfileService {

        public DevServiceImpl() {
            System.out.println("我是开发环境。。。。。");
        }

        @Override
        public String getMsg() {
            StringBuilder sb = new StringBuilder();
            sb.append("我在开发环境,").append("我只能吃加班餐:大米饭。。。。");
            return sb.toString();
        }
    }



    @Service
    @Profile({"prod","default"})
    public class ProdServiceImpl implements ProfileService {

        public ProdServiceImpl() {
            System.out.println("我是生产环境。。。。。");
        }

        @Override
        public String getMsg() {
            StringBuilder sb = new StringBuilder();
            sb.append("我在生产环境,").append("我可以吃鸡鸭鱼牛羊肉。。。。");
            return sb.toString();
        }

    }



    controller

    @Profile("dev")
    @RestController
    public class DevController {

        @Autowired
        private ProfileService profileService;

        @RequestMapping(value = "/")
        public String dev(){
            return "hello-dev "+profileService.getMsg();
        }

    }



    @Profile("prod")
    @RestController
    public class ProdController {

        @Autowired
        private ProfileService profileService;

        @RequestMapping(value = "/")
        public String prod(){
            return "hello-prod "+profileService.getMsg();
        }

    }




    在application.properties 配置文件使用不同的环境会执行不同的方法。

    那么问题来了,这个功能使如何实现的?如果让你设计你会怎么做?面试新题,啊哈哈哈哈
    获取profile值

    参考来源:一下找不到了…囧

    使用profile帮我解决了不同环境使用不同配置的问题,那么如果我们需要在代码中获取这个profile的值怎么处理呢?

    @Component
    public class ProfileUtil implements ApplicationContextAware {

        private static ApplicationContext context = null;

        @Override
        public void setApplicationContext(ApplicationContext applicationContext)
                throws BeansException {
            this.context = applicationContext;
        }

        // 获取当前环境参数  exp: dev,prod,test
        public static String getActiveProfile() {
            String []profiles = context.getEnvironment().getActiveProfiles();
            if( ! ArrayUtils.isEmpty(profiles)){
                return profiles[0];
            }
            return "";
        }
    }
     ————————————————
    版权声明:本文为CSDN博主「淘气的二进制」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/Fmuma/article/details/82787500

  • 相关阅读:
    【转】Java集合框架面试问题集锦
    【转】Hibernate面试问题集锦: 概述
    【转】常见Java面试题 – 第四部分:迭代(iteration)和递归(recursion)
    【转】常见Java面试题 – 第三部分:重载(overloading)与重写(overriding)
    【转】常见Java面试题 – 第二部分:equals与==
    【转】常见Java面试题 – 第一部分:非可变性(Immutability)和对象引用(Object reference)
    【转】你应该关注的几个Eclipse超酷插件
    【转】Eclipse插件收藏列表
    【转】最受欢迎的8位Java牛人
    【转】改进异常处理的6条建议
  • 原文地址:https://www.cnblogs.com/xiang--liu/p/11430771.html
Copyright © 2020-2023  润新知