1. 程式人生 > >SpringMVC JdbcTemplate 多資料來源配置實現

SpringMVC JdbcTemplate 多資料來源配置實現

如果有業務需求,單個工程需要連線多個數據庫,那麼就要配置多資料來源,不同資料需求請求不同資料來源,如下是雙資料來源具體實現步驟:

1. 配置檔案中配置兩個資料庫的連線資訊

jdbc.properties:

db1.jdbc.driver=com.mysql.jdbc.Driver
db1.jdbc.url=jdbc:mysql://192.168.0.100:3306/db1?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
db1.jdbc.username=root
db1.jdbc.password=123456

db2.jdbc.driver=com.mysql.jdbc.Driver
db2.jdbc.url=jdbc:mysql://192.168.0.101:3306/db2?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
db2.jdbc.username=root
db2.jdbc.password=123456

2. SpringMVC主配置檔案中配置雙資料來源資訊:

(一)首先配置載入庫連線資訊:

<context:property-placeholder location="/WEB-INF/jdbc.properties"/>

(二)再配置雙資料來源:

<!-- 配置db1資料來源 -->
    <bean id="dbOneDataSource" class="com.alibaba.druid.pool.DruidDataSource"
        init-method="init" destroy-method="close">
        <!-- 基本屬性 url、user、password -->
        <property name="url" value="${db1.jdbc.url}" />
        <property name="username" value="${db1.jdbc.username}" />
        <property name="password" value="${db1.jdbc.password}" />
        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="1" />
        <property name="minIdle" value="1" />
        <property name="maxActive" value="60" />
          <!-- 配置獲取連線等待超時的時間 -->
          <property name="maxWait" value="60000" />
          <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 -->
          <property name="timeBetweenEvictionRunsMillis" value="60000" />
          <!-- 配置一個連線在池中最小生存的時間,單位是毫秒 -->
          <property name="minEvictableIdleTimeMillis" value="300000" />
          <property name="validationQuery" value="SELECT 1 from dual" />
        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
          <!-- 開啟PSCache,並且指定每個連線上PSCache的大小 -->
         <property name="poolPreparedStatements" value="true" />
         <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
          <!-- 配置監控統計攔截的filters -->
        <property name="filters" value="stat" /> 
    </bean>
    
<!-- 配置db1資料來源 -->
    <bean id="dbTwoDataSource" class="com.alibaba.druid.pool.DruidDataSource"
        init-method="init" destroy-method="close">
        <!-- 基本屬性 url、user、password -->
        <property name="url" value="${db2.jdbc.url}" />
        <property name="username" value="${db2.jdbc.username}" />
        <property name="password" value="${db2.jdbc.password}" />
        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="1" />
        <property name="minIdle" value="1" />
        <property name="maxActive" value="60" />
          <!-- 配置獲取連線等待超時的時間 -->
          <property name="maxWait" value="60000" />
          <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 -->
          <property name="timeBetweenEvictionRunsMillis" value="60000" />
          <!-- 配置一個連線在池中最小生存的時間,單位是毫秒 -->
          <property name="minEvictableIdleTimeMillis" value="300000" />
          <property name="validationQuery" value="SELECT 1 from dual" />
        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
          <!-- 開啟PSCache,並且指定每個連線上PSCache的大小 -->
         <property name="poolPreparedStatements" value="true" />
         <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
          <!-- 配置監控統計攔截的filters -->
        <property name="filters" value="stat" /> 
    </bean>

兩個資料來源都採用阿里巴巴的Druid資料庫連線池,連線池配置請參考druid官網,案例使用druid的推薦配置

(三)配置JdbcTemplate模板

    <!-- 配置db1 Jdbc模板 -->
    <bean id="dbOneJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dbOneDataSource"></property>
    </bean>
    
    <!-- 配置db2 Jdbc模板 -->
    <bean id="dbTwoJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dbTwoDataSource"></property>
    </bean>

如果資料來源需要配置事務管理器可自行新增事務管理器配置

3、使用資料來源

在需要使用資料來源的DAO類中,注入要使用的資料來源即可    

    @Autowired
    @Qualifier("dbOneJdbcTemplate")
    private JdbcTemplate dbTwojdbcTemplate;

    @Autowired
    @Qualifier("dbTwoJdbcTemplate")
    private JdbcTemplate dbOneJdbcTemplate;