我有一个使用多个数据库的Spring Web应用程序。有多个客户,每个客户都有自己的数据库。一个主数据库(客户授权数据库)具有存储的客户数据库的客户信息和连接字符串(或元数据)。我在Spring配置文件中创建了2个数据源bean定义。所以,我想根据客户设置第二个数据源。 我已经尝试根据客户设置第二个数据源。 问题是当另一个客户登录时,第二个数据源切换到新客户数据库。我认为我的做法是完全错误的。有任何想法吗??或者我们可以设置某种范围来避免这个问题。我的Spring配置文件具有以下定义:
<bean id="customerDS" class="org.springframework.jdbc.datasource.DriverManagerDataSource" lazy-init="true">
<property name="driverClassName" value="${property.cust.db.driver}" />
<property name="url" value="${property.cust.db.url}" />
<property name="username" value="${property.cust.db.username}" />
<property name="password" value="${property.cust.db.password}" />
</bean>
<bean id="userAuthDS" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${property.userauth.db.driver}" />
<property name="url" value="${property.userauth.db.url}" />
<property name="username" value="${property.userauth.db.username}" />
<property name="password" value="${property.userauth.db.password}" />
</bean>
我有以下代码根据登录的客户设置第二个数据源:
@Autowired
private DriverManagerDataSource customerDS;
if(customer.equals("cust1")){
customerDS.setUrl("jdbc:sybase:Tds:127.0.0.1:2679?ServiceName=cust1");
customerDS.setUsername("dba");
customerDS.setPassword("sql");
}
if(customer.equals("cust2")){
customerDS.setUrl("jdbc:sybase:Tds:127.0.0.1:2689?ServiceName=cust1");
customerDS.setUsername("dba");
customerDS.setPassword("sql");
}
答案 0 :(得分:0)
以下链接帮助我解决了这个问题: http://spring.io/blog/2007/01/23/dynamic-datasource-routing/
如果您仔细阅读并理解弹簧配置,您应该能够实现它。