Spring为不同的JdbcTemplate提供相同的dataSource

时间:2014-04-07 20:19:15

标签: spring datasource jdbctemplate

我有不同的DAO,它们具有相同的类,需要使用相同类型的dataSource的不同jdbcTemplates。有没有办法整合我的代码,所以我不需要使用这么多的复制和粘贴。

我在xml中的一个例子是:

<bean id="jdbcTemplate1" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="jdbcDataSource1" />
</bean>
<bean id="jdbcDataSource1" class="com.zaxxer.hikari.HikariDataSource"
    destroy-method="shutdown">
    <constructor-arg>
        <bean class="com.zaxxer.hikari.HikariConfig">
            <constructor-arg>
                <props>
                    <prop key="dataSource.url">dataSourceUrl
                    </prop>
                    <prop key="dataSource.user">user</prop>
                    <prop key="dataSource.password">password</prop>
                </props>
            </constructor-arg>
            <property name="dataSourceClassName"
                value="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" />
        </bean>
    </constructor-arg>
</bean>
<bean id="jdbcTemplate2" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="jdbcDataSource2" />
</bean>
<bean id="jdbcDataSource2" class="com.zaxxer.hikari.HikariDataSource"
    destroy-method="shutdown">
    <constructor-arg>
        <bean class="com.zaxxer.hikari.HikariConfig">
            <constructor-arg>
                <props>
                    <prop key="dataSource.url">dataSourceUrl
                    </prop>
                    <prop key="dataSource.user">user</prop>
                    <prop key="dataSource.password">password</prop>
                </props>
            </constructor-arg>
            <property name="dataSourceClassName"
                value="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" />
        </bean>
    </constructor-arg>
</bean>

正如代码所示,jdbcDataSource1jdbcDataSource2是相同的。那么有没有办法巩固这两个?

2 个答案:

答案 0 :(得分:0)

这是将相同数据源传递给两个JDBC模板的方法:

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

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

<bean id="jdbcDataSource" class="com.zaxxer.hikari.HikariDataSource"
    destroy-method="shutdown">
    <constructor-arg>
        <bean class="com.zaxxer.hikari.HikariConfig">
            <constructor-arg>
                <props>
                    <prop key="dataSource.url">dataSourceUrl
                    </prop>
                    <prop key="dataSource.user">user</prop>
                    <prop key="dataSource.password">password</prop>
                </props>
            </constructor-arg>
            <property name="dataSourceClassName"
                value="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" />
        </bean>
    </constructor-arg>
</bean>

答案 1 :(得分:0)

您可以在bean定义中保留一个模板和一个数据源。如果您的dao模板已经预定义并且您不想更改它,您仍然可以只使用一个jdbc模板,如下所示:

    <bean id="yourDao1" class="package.YourDao1">
        <property name="jdbcTemplate1" ref="jdbcTemplate" />
    </bean>
    <bean id="yourDao2" class="package.YourDao2">
        <property name="jdbcTemplate2" ref="jdbcTemplate" />
    </bean>
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="jdbcDataSource" />
    </bean>
    <bean id="jdbcDataSource" class="com.zaxxer.hikari.HikariDataSource"
        destroy-method="shutdown">
        <constructor-arg>
            <bean class="com.zaxxer.hikari.HikariConfig">
                <constructor-arg>
                    <props>
                        <prop key="dataSource.url">dataSourceUrl
                        </prop>
                        <prop key="dataSource.user">user</prop>
                        <prop key="dataSource.password">password</prop>
                    </props>
                </constructor-arg>
                <property name="dataSourceClassName"
                    value="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" />
            </bean>
        </constructor-arg>
    </bean>