繁体   English   中英

在 spring-web.xml 中配置多个数据源

[英]Configuring multiple data sources in spring-web.xml

spring中的多个数据源

我的spring-web.xml是这样的

<!-- Data source Bean -->
<bean id="dataSource"
     class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="com.ibm.as400.access.AS400JDBCDriver" />
    <property name="url" value="jdbc:as400://localhost/BB" />
    <property name="username" value="ROOT" />
    <property name="password" value="ROOT" />
</bean>

我的 DAOImpl 是这样的

public class BBDAOImpl extends JdbcDaoSupport implements BBDao {    

@Autowired
DataSource dataSource;

@Override
public List<Map<String, Object>> getDetails(String customerId) {
    String sql = "<SQL Query>";
    if(BBUtil.getInstance().isNotEmpty(customerId)) {
        try {
            return getJdbcTemplate().queryForList(sql,customerId);
        }  catch (EmptyResultDataAccessException e) {
            logger.error("Empty result data - getDetails");
        }
    } else {
        // Want to configure here from second data source
    }

    return null;
}

这里 getJdbcTemplate() 方法直接指向 AS400 DB(但是如何)。 现在,我的另一个要求出现了。 在 else 块中,我想从另一个 SQL Server 进行一些数据操作。

谁能告诉我如何在此配置多个数据库以及如何使用它们?

该项目已经使用 XML 配置开发,现在我无法返回注释配置。

在此先感谢各位。

定义两组 jdbc 模板,如下所示:

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="jdbcTemplate2" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource2"/>
</bean>

然后提前将它们注入存储库,如下所示:

    @Resource("jdbcTemplate")
    private JdbcTemplate jdbcTemplate;

    @Resource("jdbcTemplate2")
    private JdbcTemplate jdbcTemplate2;

在 spring 数据配置文件中定义两个数据源,如下所示:

<!-- Data source Bean 1 -->
 <bean id="dataSource"
 class="org.springframework.jdbc.datasource.DriverManagerDataSource">

   <property name="driverClassName" value="com.ibm.as400.access.AS400JDBCDriver" />
   <property name="url" value="jdbc:as400://localhost/BB" />
   <property name="username" value="ROOT" />
   <property name="password" value="ROOT" />
</bean>
<bean id="dataSource2"
     class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="com.ibm.as400.access.AS400JDBCDriver" />
    <property name="url" value="jdbc:as4002://localhost/BB2" />
    <property name="username" value="ROOT" />
    <property name="password" value="ROOT" />
</bean>

然后在您的存储库类中注入如下这些数据源,并在您想要的任何地方使用:

@Autowired
DataSource dataSource;

@Autowired
DataSource dataSource1;

现在使用第二个 JDBC 模板来满足您的其他要求,它将使用数据源 2。

您可以配置一个额外的数据源,如

<bean id="dataSource1"
     class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="com.ibm.as400.access.AS400JDBCDriver" />
    <property name="url" value="jdbc:as400://localhost/BB" />
    <property name="username" value="ROOT" />
    <property name="password" value="ROOT" />
</bean>

<bean id="dataSource2"
     class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="com.ibm.as400.access.AS400JDBCDriver" />
    <property name="url" value="jdbc:as400://localhost/BB" />
    <property name="username" value="ROOT" />
    <property name="password" value="ROOT" />
</bean>

然后当你想要注入时,你可以使用@Qualifier注释。

@Autowired
@Qualifier("dataSource1")
DataSource dataSource1;

@Autowired
@Qualifier("dataSource2")
DataSource dataSource2;

现在,无论何时在类中您想使用第一个数据源,您都将使用变量dataSource1 ,而当您想使用第二个数据源时,您将不得不使用变量dataSource2

但是,现在您将不得不使用@Qualifier批注修改所有数据访问层,因为Spring 将有两个候选数据源要注入到Datasource 中,并且很可能会问您要注入哪一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM