单个类中的两个JDBC模板对象

时间:2016-09-22 20:42:49

标签: java spring jdbctemplate

我正在使用spring框架创建的应用程序。在DAO实现类中,我们使用org.springframework.jdbc.core.JdbcTemplate来创建对象并连接到database.Below是代码。

 @Inject
    @Qualifier("jdbcTemplateServiceATW)
    private JdbcTemplate jdbcTemplate;

我可以在同一个类中创建另一个JdbcTemplate对象,因为我想连接到另一个模式中的其他表。所以我需要一个新的JdbcTemplate object。 我可以在同一个类中创建两个JdbcTemplate个对象,如下所示。

 @Inject
    @Qualifier("jdbcTemplateServiceATW)
    private JdbcTemplate jdbcTemplate;

    @Inject
    @Qualifier("jdbcTemplateServiceDLW")
    private JdbcTemplate jdbcTemplateMyLoans;

2 个答案:

答案 0 :(得分:1)

如果您想使用2个JdbcTemplates处理2个不同的数据库,您可以执行以下操作:

按如下方式配置DataSources,JdbcTemplates和TransactionManagers:

<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"></property>
    <property name="url" value="${node1.jdbc.url}"></property>
    <property name="username" value="${node1.jdbc.username}"></property>
    <property name="password" value="${node1.jdbc.password}"></property>
</bean>

<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"></property>
    <property name="url" value="${node2.jdbc.url}"></property>
    <property name="username" value="${node2.jdbc.username}"></property>
    <property name="password" value="${node2.jdbc.password}"></property>
</bean>

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

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

<tx:annotation-driven transaction-manager="txnManager1"/>
<tx:annotation-driven transaction-manager="txnManager2"/>

<bean id="txnManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource1" />
</bean>

<bean id="txnManager2" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource2" />
</bean>

您可以注入多个JdbcTemplates并使用它们,但是您需要根据您正在使用的JdbcTemplate声明正确的TransactionManager以与@Transactional一起使用。

@Service
public class MyService
{
    @Autowired
    @Qualifier("jdbcTemplate1")
    private JdbcTemplate jdbcTemplate1;

    @Autowired
    @Qualifier("jdbcTemplate2")
    private JdbcTemplate jdbcTemplate2;

    @Transactional("txnManager1")
    public void method1()
    {
        //do something with jdbcTemplate1
    }

    @Transactional("txnManager2")
    public void method2()
    {
        //do something with jdbcTemplate2
    }
}

答案 1 :(得分:0)

您可以在类中包含任意数量的Spring配置Bean,但如果您需要来自两个数据库的数据,则必须使用两个不同的DataSource对象配置两个JdbcTemplate类。 此外,您可以使用注释@Resource,它按名称而不是按类自动装配bean。

例如:

@Resource
JdbcTemplate jdbcTemplateServiceATW;
@Resource
JdbcTemplate jdbcTemplateServiceDLW;