我是靠谱客的博主 舒心毛豆,最近开发中收集的这篇文章主要介绍Spring boot 数据库里读取属性到system中,以便@Value(${})从system中获取属性值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

之前梳理spring启动,bean实例化的时候 有一个知识点是 beanDefination中的property是在beanFactoryPostProcessor中将property文件中的属性值赋给beanDeifination的,但在代码中使用@Value(${property}),debug时(如下),发现是AutowiredAnnotationBeanPostProcessor将属性注入给了bean的成员变量,这里也就是说,@Value()这种bean的成员变量属性的赋值先是发生在beanFactoryPostProcessor中,最终也会通过beanPostProcessor在环境中读取属性并赋值。可以简单的理解为标有@AutoWired 及 @Value的都有自动注入功能,该功能从环境中读取属性。

在这里插入图片描述

所有 要想从数据库中读取属性并赋值给标有@Value的变量,则只需将数据库中的key-value属性读取到系统环境中:

@Component
public class ReadProperyFromDB implements BeanFactoryPostProcessor {

	@Override
	@SneakyThrows
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
		
		Environment env = beanFactory.getBean(Environment.class);
		String url = env.getProperty("spring.datasource.url");
		String username = env.getProperty("spring.datasource.data-username");
		String password = env.getProperty("spring.datasource.data-password");
		
		@Cleanup
		Connection con = DriverManager.getConnection(url, username, password);
		
		@Cleanup
		Statement sta = con.createStatement();
		
		@Cleanup
		ResultSet rs = sta.executeQuery("select pro_key, pro_val from demo where 1=1");
		
		while(rs.next()) {
			System.setProperty(rs.getString(1), rs.getString(2));
		}
		
	}	
}

详见 RADME.md , 如果你喜欢,给颗小星星吧

最后

以上就是舒心毛豆为你收集整理的Spring boot 数据库里读取属性到system中,以便@Value(${})从system中获取属性值的全部内容,希望文章能够帮你解决Spring boot 数据库里读取属性到system中,以便@Value(${})从system中获取属性值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部