在 Spring 运行时更改 bean 属性/值
我正在使用 spring mvc+hibernate+两个数据库
例如: 我创建了 2 个 sessionFactories。 sessionFactory1
(使用datasource1
)和sessionFactory2
(使用datasource2
)。
是否可以在运行时将 sessionFactory1
或 sessionFactory2
更改为 sessionFactory,以便 dao/s 引用它们。 sessionFactory 已经自动连接到所有 dao/s。
我现在正在寻找它,我认为@Configuration可以帮助我,但我不确定。
我正在尝试 AbstractRoutingDataSource 但认为它没有帮助。
I am using spring mvc+hibernate+two databases
So for example:
I create 2 sessionFactories. sessionFactory1
(using datasource1
) and sessionFactory2
(using datasource2
).
Would it be possible to change sessionFactory1
or sessionFactory2
to sessionFactory at runtime so that the dao/s references them. sessionFactory is already autowired to all dao/s.
I am searching for it right now I think @Configuration can help me but I am not sure.
I am trying AbstractRoutingDataSource but don't think it helps.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
通常 Spring 在应用程序启动时连接您的 bean,因此“重新连接”(在运行时用对 sessionFactory2 的引用替换对 sessionFactory1 的引用)似乎并不容易实现。
也许您可以实现一个连接到 DAO 对象的“代理 bean”,并更改代理 bean 的“目标 SessionFactory”。
Usually Spring wires your beans on application startup, so "re-wiring" (replacing references to sessionFactory1 with references to sessionFactory2 on runtime) does not seem easy to implement.
Maybe you could implement a "proxy bean" that is wired to your DAO objects and change the "target SessionFactory" of your proxy bean.
AbstractRoutingDataSource 将为您工作。
首先,您需要创建一个类来存储当前使用的数据库:
您需要创建一个扩展该类并实现确定当前查找键()的类,并返回上下文持有者中的当前数据库:
请参阅http://blog.springsource.org/2007/01/23/dynamic-datasource-routing/。
这对我来说效果很好。
AbstractRoutingDataSource will work for you.
First you'll need to create a class that will store the current DB in use:
You'll need to create a class that extends this one and implements determineCurrentLookupKey(), and return the current db you have in your context holder:
See the example in http://blog.springsource.org/2007/01/23/dynamic-datasource-routing/.
It worked fine for me.