在一个项目中,我有注册为一个Bean一个org.apache.commons.configuration.PropertiesConfiguration
对象,提供配置值在应用程序中,用热重装功能。
例如:我所定义的单DataSource
豆。然后我创建了一个ReloadingDataSource
对象,它包装和代表对“真实” DataSource
,每一次的配置文件的变化,它能够重新创建一个线程安全的方式。
我想这样做的简单的属性值类似的东西。
我想创建一个简单的,Autowire
able反对该委托检索到Apache PropertiesConfiguration
豆。
用法应该是相似的:
@Property("my.config.database")
private Property<String> database;
和呼叫网站将仅仅是:
final String databaseValue = database.get()
你会说,只是绕过PropertiesConfiguration
对象。也许你是对的,但我想提供了另一个抽象,更简单易用的一个。
我知道,与ProxyFactoryBean
有可能创建方法调用的AOP代理。这是正确的道路,还是有更好的方法?也许单纯的Spring AOP / AspectJ的?
我不想用Spring云或类似的依赖关系。
春云将重新豆,所以请你记住你来什么解决方案了,如果你有另外一个bean它启动时,例如仅读取该值一次,也不会重新初始化本身,这就是问题所在春天云配置需要照顾。
AOP只能在方法层面,因为我明白,所以你绝对可以拦截调用somebean.getFoo()
。但是somebean
内,就没有办法来代理调用变量本身:somebean.foo
。你将不得不每次你foo
改变时重置PropertiesConfiguration
,并考虑到,如果别的需要的foo
你将需要处理这个或硬着头皮使用Spring云新值再次保持。
你拥有的开销在运行时改变的东西,以避免重新部署真正应该仔细想过。对于Netflix来说,这是有道理的,因为他们拥有的服务器成千上万。但对于规模较小的厂商也看不出理由,决定增加的复杂性。噩梦测试。
foo
正在发生变化?有些事情要思考的问题。