要求:
我有要求在收到请求后在运行时切换数据源。
我曾阅读过有关使用AbstractRoutingDataSource类在spring3中运行时路由数据源的博客。使用它我们可以在运行时获得手动定义的数据源键。
在我的项目中,数据源已在jetty-env.xml文件中配置。现在,我想在app_config等一些表中从DB中检索数据库名称。使用该DB名称,我想在运行时切换数据库,我也想将参数传递给jetty-env.xml文件。
答案 0 :(得分:1)
即使我在尝试从DB设置数据源时遇到问题。您可能喜欢我的解决方案(使用注释而不是xml)。 Spring 3.1.3 + Hibernate Configuration with annotations and with (Dynamic) AbstractRoutingDataSource
查看" EDIT",您可以设置任意数量的静态数据源)或在xml中使用它们。
答案 1 :(得分:0)
创建一个新的DriverManagerDataSource子类,并将其自动装入DAO以访问表app_config。
然后例如覆盖getUrl()方法,并使用允许从app config检索数据库名称的代码dbNameParameter构造url:
<bean id="parentDataSource"
class="org.springframework.jdbc.datasource.custom.MyDriverManagerDataSource"
abstract="true">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="username" value="sa"/>
</bean>
<bean id="goldDataSource" parent="parentDataSource">
<property name="dbNameParameter" value="gold"/>
</bean>
jetty-env.xml不适合该用途,最好不要在此用例上使用。最好在jetty-env.xml中放入table app_config所在的数据源。
答案 2 :(得分:0)
您应将租户标识符存储在ThreadLocal中,提供数据源列表,并配置AbstractRoutingDataSource
以在运行时根据租户标识符选择数据源。