springMvc项目如何配置动态数据源

这篇具有很好参考价值的文章主要介绍了springMvc项目如何配置动态数据源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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>

到了这里,关于springMvc项目如何配置动态数据源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot 配置动态多数据源(Mybatis-plus)

    前言:在项目中需要用到动态切换多数据源,查阅Mybatis-plus文档得知可以通过@DS注解,但该方法主要针对不同内容的数据源,而目前场景是相同内容的数据库需要在运行时根据请求头动态切换,因此文档方法不适用。 注意,不要使用dynamic-datasource-spring-boot-starter依赖包。 应用

    2024年02月12日
    浏览(31)
  • grpc + springboot + mybatis-plus 动态配置数据源

    前言 这是我在这个网站整理的笔记,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 1.1 项目初始化 项目初始化的时候会调用com.baomidou.dynamic.datasource.DynamicRoutingDataSource对象的addDataSource方法添加数据源,数据源存进dataSourceMap中。 1.2 接口请求时候 进行数据操作时,

    2024年02月09日
    浏览(32)
  • 如何在Spring Boot应用中使用Nacos实现动态更新数据源

    🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言

    2024年02月10日
    浏览(28)
  • 如何在Spring Boot中配置双数据源?

    在许多应用程序中, 可能会遇到需要连接多个数据库的情况 。这些数据库可以是不同的类型,例如关系型数据库和NoSQL数据库,或者它们可以是相同类型但包含不同的数据。为了处理这种情况,我们可以使用双数据源来管理多个数据库连接。 双数据源是指在一个应用程序中

    2024年02月11日
    浏览(40)
  • springboot dynamic-datasource 实现动态切换数据源-多租户-配置文件切换-基于dynamic-datasource

    1、实现动态切换数据源 2、实现配置多数据源 3、实现读写分离也可以用多数据源方式 4、选择 dynamic-datasource集成了很多ORM的框架,其中,使用比较多的是druid,但有一些东西开始收费了 druid也可以自行配置,配置多了点 目前版本只支持单一位置加载数据源(只能从配置文件或

    2024年02月09日
    浏览(42)
  • SpringBoot——动态数据源(多数据源自动切换)

    日常的业务开发项目中只会配置一套数据源,如果需要获取其他系统的数据往往是通过调用接口, 或者是通过第三方工具比如kettle将数据同步到自己的数据库中进行访问。 但是也会有需要在项目中引用多数据源的场景。比如如下场景: 自研数据迁移系统,至少需要新、老两

    2024年02月16日
    浏览(31)
  • yml配置动态数据源(数据库@DS)与引起(If you want an embedded database (H2, HSQL or Derby))类问题

    Druid连接池的自动配置类是DruidDataSourceAutoConfigure类上有一行注解 @EnableConfigurationProperties注解的作用是:使配置文件中的配置生效并且映射到指定类的属性 DruidStatProperties:指定的前缀是spring.datasource.druid,主要设置连接池的一些参数 DataSourceProperties:指定的前缀是spring.dataso

    2024年02月10日
    浏览(33)
  • SpringBoot动态切换数据源

      Spring提供一个DataSource实现类用于动态切换数据源—— AbstractRoutingDataSource pom.xml 大概的项目结构 注意:这两个事务管理器,并不能处理分布式事务 链接:https://pan.baidu.com/s/1ymxeKYkI-cx7b5nTQX0KWQ  提取码:6bii  --来自百度网盘超级会员V4的分享                

    2024年02月06日
    浏览(39)
  • Springboot 多数据源 dynamic-datasource动态添加移除数据源

    上一篇文章我们讲了如何通过多数据源组件,在Spring boot Druid 连接池项目中配置多数据源,并且通过@DS注解的方式切换数据源,《Spring Boot 配置多数据源【最简单的方式】》。但是在多租户的业务场景中,我们通常需要手动的切换数据源,那么本文将解答你的额疑惑。 dynam

    2024年02月13日
    浏览(41)
  • mybatisplus快速实现动态数据源切换

    1.背景   通常一个系统只需要连接一个数据库就可以了。但是在企业应用的开发中往往会和其他子系统交互,特别是对于一些数据实时性要求比较高的数据,我们就需要做实时连接查询,而不是做同步。这个时候就需要用到多数据源。   举个简单的例子某企业要做订单网上订

    2024年02月06日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包