欢迎大家来到IT世界,在知识的湖畔探索吧!
欢迎大家来到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配置文件的获取方式可能会有所不同。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/94978.html