【问题标题】:Multiple DataSource Switching problem in Spring MVC. when the 2nd dataSource is unavailable it automatically uses 1st datasource where 2nd is referredSpring MVC 中的多数据源切换问题。当第二个数据源不可用时,它会自动使用引用第二个的第一个数据源
【发布时间】:2019-04-24 20:24:12
【问题描述】:

我在我的 SpringMVC 项目中配置了 2 个数据源,但是当第二个 数据源不可用,它会自动使用第一个数据源引用第二个数据源。 我想停止这种切换。

代码如下:

调度程序-servlet.xml:

<bean id="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource" lazy-init="false">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="testOnBorrow" value="true"/>
        <property name="initialSize" value="1"/>
        <property name="maxActive" value="1"/>
        <property name="maxWait" value="500"/>
        <property name="maxIdle" value="2"/>
</bean> 

<bean id="dataSource1" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource" lazy-init="false">
        <property name="driverClassName" value="${jdbc.driverClassName1}"/>
        <property name="url" value="${jdbc.url1}"/>
        <property name="username" value="${jdbc.username1}"/>
        <property name="password" value="${jdbc.password1}"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="testOnBorrow" value="true"/>
        <property name="initialSize" value="1"/>
        <property name="maxActive" value="3"/>
        <property name="maxWait" value="500"/>
        <property name="maxIdle" value="8"/> 
</bean>

BaseNamedParameterJdbcDaoSupport.java 类:

    public class BaseNamedParameterJdbcDaoSupport extends NamedParameterJdbcDaoSupport{

    @Autowired
    public void setDataSourceFor1(DataSource dataSource) {        
//      System.out.println("Main DS"+dataSource);
        setDataSource(dataSource); 
    }

}

BaseNamedParameterJdbcDaoSupportForMirrorDB.java:

public class BaseNamedParameterJdbcDaoSupportForMirrorDB extends NamedParameterJdbcDaoSupport{

    @Autowired
    public void setDataSourceFor2(DataSource dataSource1) {  
//      System.out.println("ForMirrorDB dataSource1"+dataSource1); 
        setDataSource(dataSource1); 
    }

}

【问题讨论】:

  • 如何在代码中调用datasource2?
  • 像这样:@Repository public class DashboardMirrorDAOImpl extends BaseNamedParameterJdbcDaoSupportForMirrorDB implements DashboardMirrorDAO{ ,现在这个 Impl 中的所有查询都将以 2nd 运行。 .但是当第二个不可用或我从调度程序中删除第二个数据源条目时,它会自动使用第一个数据源:(

标签: java spring spring-mvc datasource spring-jdbc


【解决方案1】:

不同名称维护的DataSource不可能自动切换。我认为您已经实现了一些其他逻辑来处理这两个 DataSource 对象。

检查您的 DAO/服务代码,以通过适当的 @Autowired 使用“BaseNamedParameterJdbcDaoSupport”和“BaseNamedParameterJdbcDaoSupportForMirrorDB”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2018-02-26
    • 2015-11-06
    • 2021-12-01
    • 1970-01-01
    • 2013-07-09
    • 2019-12-16
    相关资源
    最近更新 更多