我正在使用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;
答案 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;