Spring Web应用程序根据客户/用户设置数据源

时间:2014-03-17 20:55:08

标签: java spring

我有一个使用多个数据库的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");
}

1 个答案:

答案 0 :(得分:0)

以下链接帮助我解决了这个问题: http://spring.io/blog/2007/01/23/dynamic-datasource-routing/

如果您仔细阅读并理解弹簧配置,您应该能够实现它。