1.在類文件下創(chuàng)建jdbc.properties測試連接
#<!-- =========數(shù)據(jù)源1========== -->
jdbc.driverClass1=com.mysql.cj.jdbc.Driver
jdbc.url1=jdbc\:mysql\://192.168.1.1\:3306/database1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
jdbc.userName1=root
jdbc.password1=123456
jdbc.initialSize1e1=50
jdbc.maxIdle1=2000
jdbc.minIdle1=50
jdbc.maxActive1=2000
#<!-- =========數(shù)據(jù)源2========== -->
jdbc.driverClass2=com.mysql.cj.jdbc.Driver
jdbc.url2=jdbc\:mysql\://192.168.1.2\:3306/database2?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
jdbc.userName2=root
jdbc.password2=123456
jdbc.initialSize1e2=50
jdbc.maxIdle2=2000
jdbc.minIdle2=50
jdbc.maxActive2=2000
2.創(chuàng)建配置bean文件spring-dao.xml
<context:property-placeholder location="classpath:jdbc/jdbc.properties" />
<!--=======數(shù)據(jù)源1===========================-->
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClass1}" />
<property name="url" value="${jdbc.url1}" />
<property name="username" value="${jdbc.userName1}" />
<property name="password" value="${jdbc.password1}" />
<property name="initialSize" value="${jdbc.initialSize1e1}"/>
<property name="maxActive" value="${jdbc.maxIdle1}" />
<property name="maxIdle" value="${jdbc.minIdle1}" />
<property name="minIdle" value="${jdbc.maxActive1}"/>
</bean>
<!--=======數(shù)據(jù)源2===========================-->
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClass2}" />
<property name="url" value="${jdbc.url2}" />
<property name="username" value="${jdbc.userName2}" />
<property name="password" value="${jdbc.password2}" />
<property name="initialSize" value="${jdbc.initialSize1e2}"/>
<property name="maxActive" value="${jdbc.maxIdle2}" />
<property name="maxIdle" value="${jdbc.minIdle2}" />
<property name="minIdle" value="${jdbc.maxActive2}"/>
</bean>
<!--=======配置數(shù)據(jù)源動態(tài)切換===========================-->
<!-- 配置動態(tài)數(shù)據(jù)源 -->
<!-- 別忘記創(chuàng)建類 DynamicDataSource -->
<bean id="dynamicDataSource" class="cn.test.testmodel.DynamicDataSource">
<property name="defaultTargetDataSource" ref="dataSource1" />
<property name="targetDataSources">
<map>
<entry key="dataSource1" value-ref="dataSource1" />
<!--切換-->
<entry key="dataSource2" value-ref="dataSource2" />
</map>
</property>
</bean>
<!-- sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 數(shù)據(jù)庫連接池 -->
<property name="dataSource" ref="dynamicDataSource" />
<!-- 加載mybatis的全局配置文件 -->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 掃描包路徑,如果需要掃描多個包,中間使用半角逗號隔開 -->
<property name="basePackage" value="cn.test.testMapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
2.1 常用數(shù)據(jù)源配置
<property name="maxWait" value="5000" />
<property name="logAbandoned" value="true" />
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="90" />
<property name="maxWait" value="3000" />
<property name="validationQuery">
<value>SELECT 1</value>
</property>
<property name="testOnBorrow">
<value>true</value>
</property>
以下是一些常見的配置選項:
1. **maxTotal / maxActive**: 數(shù)據(jù)源允許的最大活動連接數(shù)。
2. **maxIdle**: 數(shù)據(jù)源允許的最大空閑連接數(shù)。
3. **minIdle**: 數(shù)據(jù)源允許的最小空閑連接數(shù)。
4. **initialSize**: 數(shù)據(jù)源在啟動時創(chuàng)建的初始連接數(shù)。
5. **maxWaitMillis**: 在連接池耗盡并且達(dá)到`maxTotal`時,應(yīng)用程序等待可用連接的最大時間(以毫秒為單位)。
6. **timeBetweenEvictionRunsMillis**: 連接池進(jìn)行空閑連接回收的時間間隔(以毫秒為單位)。
7. **minEvictableIdleTimeMillis**: 連接池中的連接在被認(rèn)定為空閑連接并且被移除之前,需要保持空閑的最小時間(以毫秒為單位)。
8. **testWhileIdle**: 是否在連接池空閑連接回收線程運行時,對連接進(jìn)行測試。
9. **testOnReturn**: 是否在連接返回連接池時對連接進(jìn)行測試。
10. **timeBetweenEvictionRunsMillis**: 空閑連接回收線程運行的時間間隔(以毫秒為單位)。
11. **removeAbandoned**: 是否移除超過指定時間未使用且被認(rèn)定為廢棄的連接。
12. **removeAbandonedTimeout**: 超過指定時間未使用且被認(rèn)定為廢棄的連接將被移除的超時時間(以秒為單位)。
13. **logAbandoned**: 是否記錄被移除的廢棄連接日志。
14. **defaultAutoCommit**: 連接的默認(rèn)自動提交行為。
15. **defaultTransactionIsolation**: 連接的默認(rèn)事務(wù)隔離級別。
3.創(chuàng)建類 DynamicDataSource
package cn.test.testmodel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import javax.servlet.http.HttpServletRequest;
public class DynamicDataSource extends AbstractRoutingDataSource {
@Autowired
private HttpServletRequest request;
@Override
protected Object determineCurrentLookupKey() {
String ipAddress = request.getRequestURL().toString();
String dataSourceName = switchDataSource(ipAddress);
return dataSourceName;
}
private String switchDataSource(String ipAddress) {
//切換邏輯
if (ipAddress.indexOf("requestIpAddressStr") > -1) {
return "dataSource1";
} else {
return "dataSource2";
}
}
}
4.創(chuàng)建web文件將spring-dao.xml文件引入
具體文件引入和結(jié)構(gòu)體參考另一章連接文章來源地址http://www.zghlxwxcb.cn/news/detail-811518.html
<!-- 加載spring容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring/spring-dao.xml</param-value>
</context-param>
文章來源:http://www.zghlxwxcb.cn/news/detail-811518.html
到了這里,關(guān)于springMvc項目如何配置動態(tài)數(shù)據(jù)源的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!