Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring-web.xml中配置多个数据源_Java_Xml_Spring_Spring Mvc - Fatal编程技术网

Java 在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" /&

春季多数据源

我的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>
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()如何理解要使用的数据源?更新的答案。请检查。