[英]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.