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;