春天的多个数据源
我的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配置开发,现在我无法返回注释配置。
先谢谢你们。
答案 0 :(得分:0)
定义两组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模板作为if else要求,它将使用数据源2.
答案 1 :(得分:0)
您可以配置其他数据源,例如
<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,并且很可能会问你哪一个注入。