1.在类文件下创建jdbc.properties测试连接
#<!-- =========数据源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
#<!-- =========数据源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.创建配置bean文件spring-dao.xml
<context:property-placeholder location="classpath:jdbc/jdbc.properties" />
<!--=======数据源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>
<!--=======数据源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>
<!--=======配置数据源动态切换===========================-->
<!-- 配置动态数据源 -->
<!-- 别忘记创建类 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">
<!-- 数据库连接池 -->
<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 常用数据源配置
<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**: 数据源允许的最大活动连接数。
2. **maxIdle**: 数据源允许的最大空闲连接数。
3. **minIdle**: 数据源允许的最小空闲连接数。
4. **initialSize**: 数据源在启动时创建的初始连接数。
5. **maxWaitMillis**: 在连接池耗尽并且达到`maxTotal`时,应用程序等待可用连接的最大时间(以毫秒为单位)。
6. **timeBetweenEvictionRunsMillis**: 连接池进行空闲连接回收的时间间隔(以毫秒为单位)。
7. **minEvictableIdleTimeMillis**: 连接池中的连接在被认定为空闲连接并且被移除之前,需要保持空闲的最小时间(以毫秒为单位)。
8. **testWhileIdle**: 是否在连接池空闲连接回收线程运行时,对连接进行测试。
9. **testOnReturn**: 是否在连接返回连接池时对连接进行测试。
10. **timeBetweenEvictionRunsMillis**: 空闲连接回收线程运行的时间间隔(以毫秒为单位)。
11. **removeAbandoned**: 是否移除超过指定时间未使用且被认定为废弃的连接。
12. **removeAbandonedTimeout**: 超过指定时间未使用且被认定为废弃的连接将被移除的超时时间(以秒为单位)。
13. **logAbandoned**: 是否记录被移除的废弃连接日志。
14. **defaultAutoCommit**: 连接的默认自动提交行为。
15. **defaultTransactionIsolation**: 连接的默认事务隔离级别。
3.创建类 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.创建web文件将spring-dao.xml文件引入
具体文件引入和结构体参考另一章连接文章来源地址https://www.toymoban.com/news/detail-811518.html
<!-- 加载spring容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring/spring-dao.xml</param-value>
</context-param>
文章来源:https://www.toymoban.com/news/detail-811518.html
到了这里,关于springMvc项目如何配置动态数据源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!