我在Spring应用程序中使用简单的JDBCTemplate .

我有多个DataSource,我想根据包名称应用于我的DAO类 .

我现在正在做的是以下内容:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/a.jdbc" />
</bean>
<bean id="transactionManager"
    class="org.springframework.jdbc.datasource.pui.PuiJdbcTransactionManager">
    <constructor-arg ref="dataSource" />
</bean>

<bean id="dataSource2" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/a.jdbc2" />
</bean>
<bean id="transactionManager2"
    class="org.springframework.jdbc.datasource.pui.PuiJdbcTransactionManager">
    <constructor-arg ref="dataSource2" />
</bean>

我定义了两个dataSources和两个transactionManagers,然后我在每个DAO中设置了dataSource:

@Autowired
@Qualifier("dataSource2")
public void setDataSource(DataSource dataSource) {
    this.jdbcTemplate = new JdbcTemplate(dataSource);
}

它的工作原理,但我想,要知道是否存在更好的方法来进行设置,主要是因为交易的,因为他们总是被在“数据源” beans 创建的,从来没有过“dataSource2”之一 .

也许一个解决方案是从Spring覆盖TransactionInterceptor类,并带来一个自定义的解决方案来获取正确的TransactionManager ...