Java 在spring-web.xml中配置多个数据源
春季多数据源 我的spring-web.xml是这样的Java 在spring-web.xml中配置多个数据源,java,xml,spring,spring-mvc,Java,Xml,Spring,Spring Mvc,春季多数据源 我的spring-web.xml是这样的 <!-- Data source Bean --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.ibm.as400.access.AS400JDBCDriver" /&
<!-- 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>
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;
}
我的想法是这样的
<!-- 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>
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;
}
public类BBDAOImpl扩展JdbcDaoSupport实现BBDao{
@自动连线
数据源数据源;
@凌驾
公共列表getDetails(字符串customerId){
字符串sql=“”;
if(BBUtil.getInstance().isNotEmpty(customerId)){
试一试{
返回getJdbcTemplate().queryForList(sql,customerId);
}捕获(EmptyResultDataAccessE异常){
logger.error(“空结果数据-getDetails”);
}
}否则{
//要从第二个数据源在此处进行配置吗
}
返回null;
}
这里getJdbcTemplate()方法直接指向AS400 DB(但是如何)。现在,我的另一个需求出现了。在else块中,我想从另一台SQL服务器执行一些数据操作
有谁能告诉我如何配置多个数据库,以及如何使用它们
这个项目已经使用XML配置开发,现在我无法返回到annotations配置
提前感谢各位。定义两组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;
<!-- 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>
在spring数据配置文件中定义两个数据源,如下所示:
<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;
<!-- 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>
现在使用第二个JDBC模板满足您的if-else要求,它将使用数据源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>
现在,无论何时在类中要使用第一个数据源,都将使用变量dataSource1
,而要使用第二个数据源,则必须使用变量dataSource2
但是,现在您必须使用
@Qualifier
注释修改所有数据访问层,因为Spring将在datasource中注入两个候选数据源,它可能会问您要注入哪一个将了解要使用的数据源?答案已更新,以添加jdbc模板说明。请查看。它只接受@Resource,不接受@Resource(“jdbcTemplate”)。请检查syntaxonly资源。getJdbcTemplate()如何理解要使用的数据源?更新的答案。请检查。