关于@value获取不到spring.profiles.active值的问题

关于@value获取不到spring.profiles.active值的问题最近在优化项目 发现获取到的 profile 一直未 null 获取不到 网上查找了好多 发现 Value 两者必须使用在 bean 的实例中 例如被 Controller Service Component 等注解的类里边

欢迎大家来到IT世界,在知识的湖畔探索吧!

关于@value获取不到spring.profiles.active值的问题



欢迎大家来到IT世界,在知识的湖畔探索吧!

最近在优化项目,发现获取到的profile一直未null,获取不到,网上查找了好多,发现@Value,两者必须使用在bean的实例中,例如被@Controller,@Service,@Component等注解的类里边。查看代码发现我的类是用@Component注解的类啊,百思不得其解,翻阅多篇博客,终于找到了原因。原来,使用@Value的类,在spring中,不能直接通过new 操作符来使用,应该通过spring的注解 @Autowired 来使用。这时我们应该怎么获取呢?有下面两种方法可以获取。

第一种方法

首选要在BootstrapInfo里建一个static的变量,然后使用@Value获取yml配置文件的值。最后关键就是使用 @PostConstruct 将yml中配置的值赋给本地的变量,这样后面的静态方法就能使用了。

@Component @Data public class BootstrapInfo { @Value("${spring.profiles.active}") private String active; private static String profile; @PostConstruct public void setProfile() { profile = this.active; } public static String getProfile() { return profile; } } 

欢迎大家来到IT世界,在知识的湖畔探索吧!

注意事项:
注意BootstrapInfo类使用了 @Component 属性注解了说明是需要在启动类 Application 启动的时候加载的,所以我们本地写一个方法调用 BootstrapInfo 的时候是获取不到 profile的。

第二种方法

通过YamlPropertiesFactoryBean这种方式去获取yml中的值
代码如下:

欢迎大家来到IT世界,在知识的湖畔探索吧!public static Object getBootstrapYml(Object key){ Resource resource = new ClassPathResource("bootstrap.yml"); Properties properties = null; try { YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean(); yamlFactory.setResources(resource); properties = yamlFactory.getObject(); } catch (Exception e) { e.printStackTrace(); return null; } return properties.get(key); } public static void main(String[] args) { System.out.println(getBootstrapYml("spring.profiles.active")); } 

注意:
yml和properties配置文件的获取方式可能会有所不同。

关于@value获取不到spring.profiles.active值的问题

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/94978.html

(0)
上一篇 3小时前
下一篇 3小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信