春天性质重装热

问题描述 投票:0回答:1

在一个项目中,我有注册为一个Bean一个org.apache.commons.configuration.PropertiesConfiguration对象,提供配置值在应用程序中,用热重装功能。

例如:我所定义的单DataSource豆。然后我创建了一个ReloadingDataSource对象,它包装和代表对“真实” DataSource,每一次的配置文件的变化,它能够重新创建一个线程安全的方式。

我想这样做的简单的属性值类似的东西。 我想创建一个简单的,Autowireable反对该委托检索到Apache PropertiesConfiguration豆。

用法应该是相似的:

@Property("my.config.database")
private Property<String> database;

和呼叫网站将仅仅是:

final String databaseValue = database.get()

你会说,只是绕过PropertiesConfiguration对象。也许你是对的,但我想提供了另一个抽象,更简单易用的一个。

我知道,与ProxyFactoryBean有可能创建方法调用的AOP代理。这是正确的道路,还是有更好的方法?也许单纯的Spring AOP / AspectJ的?

我不想用Spring云或类似的依赖关系。

java spring spring-boot aspectj
1个回答
0
投票

春云将重新豆,所以请你记住你来什么解决方案了,如果你有另外一个bean它启动时,例如仅读取该值一次,也不会重新初始化本身,这就是问题所在春天云配置需要照顾。

AOP只能在方法层面,因为我明白,所以你绝对可以拦截调用somebean.getFoo()。但是somebean内,就没有办法来代理调用变量本身:somebean.foo。你将不得不每次你foo改变时重置PropertiesConfiguration,并考虑到,如果别的需要的foo你将需要处理这个或硬着头皮使用Spring云新值再次保持。

你拥有的开销在运行时改变的东西,以避免重新部署真正应该仔细想过。对于Netflix来说,这是有道理的,因为他们拥有的服务器成千上万。但对于规模较小的厂商也看不出理由,决定增加的复杂性。噩梦测试。

  • 你测试在运行时更改配置或接受风险并承担它的工作原理?
  • 你测试从A改变 - 对数据库进行交易的用户的负载下>乙同时?
  • 测试其他加薪的条件,其中foo正在发生变化?

有些事情要思考的问题。

© www.soinside.com 2019 - 2024. All rights reserved.