iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >springboot中如何利用mybatis+druid配置动态数据源
  • 450
分享到

springboot中如何利用mybatis+druid配置动态数据源

2023-06-08 04:06:49 450人浏览 八月长安
摘要

这篇“SpringBoot中如何利用mybatis+druid配置动态数据源”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“s

这篇“SpringBoot中如何利用mybatis+druid配置动态数据源”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot中如何利用mybatis+druid配置动态数据源”文章吧。

一、建数据库和表
1.数据库demo1放一张user表

SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(11) NOT NULL,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', 'aa');INSERT INTO `user` VALUES ('2', 'bb');

2.数据库demo2放一张role表

SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for role-- ----------------------------DROP TABLE IF EXISTS `role`;CREATE TABLE `role` (`id` int(11) NOT NULL,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of role-- ----------------------------INSERT INTO `role` VALUES ('1', 'CC');INSERT INTO `role` VALUES ('2', 'DD');

二、pom.xml引入包

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-WEB</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>Mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.1</version></dependency><!-- aop --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></dependency><!-- alibaba druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><!-- dynamic--><dependency><groupId>com.typesafe.dynamicdatasource</groupId><artifactId>dynamic-data-source_2.11</artifactId></dependency>

三、用generator插件生成user、role两张表的实体类、mapper.java、mapper.xml

User.javaRole.javaUserMapper.javaRoleMapper.javaUserMapper.xmlRoleMapper.xml

四、配置application.yml

server:port: 8088mybatis:mapper-locations: classpath:mapper/*.xmlspring:datasource:db1:url: jdbc:mysql://localhost:3306/demo1?useUnicode=true&characterEncoding=utf8&serverTimezone=GMTusername: rootpassWord: roottype: com.alibaba.druid.pool.DruidDataSource#驱动包driver-class-name: com.mysql.cj.jdbc.Driver#初始连接数initial-size: 5#最小空闲数min-idle: 5#最大活动数max-active: 20#等待超时时间max-wait: 60000#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒time-between-eviction-runs-millis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒min-evictable-idle-time-millis: 300000#验证数据库连接的查询语句,MYSQL是select 1validation-query: SELECT 1 FROM DUAL#空闲时测试,testOnBorrow和testOnReturn在生产环境一般是不开启的,主要是性能考虑。失效连接主要通过testWhileIdle保证test-while-idle: truetest-on-borrow: falsetest-on-return: false#打开PSCache,并指定每个链接上的PSCache大小pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20#配置监控统计拦截的filters,去掉后监控界面sql无法统计,‘wall'用于防火墙,此处是filter修改的地方filters: stat,wall#通过connectproperties属性来打开mergesql功能:慢sql记录connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000#合并多个DruidDataSourceuseGlobalDataSourceStat: truedb2:url: jdbc:mysql://localhost:3306/demo2?useUnicode=true&characterEncoding=utf8&serverTimezone=GMTusername: rootpassword: roottype: com.alibaba.druid.pool.DruidDataSource#驱动包driver-class-name: com.mysql.cj.jdbc.Driver#初始连接数initial-size: 5#最小空闲数min-idle: 5#最大活动数max-active: 20#等待超时时间max-wait: 60000#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒time-between-eviction-runs-millis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒min-evictable-idle-time-millis: 300000#验证数据库连接的查询语句,MYSQL是select 1validation-query: SELECT 1 FROM DUAL#空闲时测试,testOnBorrow和testOnReturn在生产环境一般是不开启的,主要是性能考虑。失效连接主要通过testWhileIdle保证test-while-idle: truetest-on-borrow: falsetest-on-return: false#打开PSCache,并指定每个链接上的PSCache大小pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20#配置监控统计拦截的filters,去掉后监控界面sql无法统计,‘wall'用于防火墙,此处是filter修改的地方filters: stat,wall#通过connectproperties属性来打开mergesql功能:慢sql记录connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000#合并多个DruidDataSourceuseGlobalDataSourceStat: true

五、启动类扫描mapper.java文件

@SpringBootApplication@MapperScan("com.example.demo.dao")public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}

六、定义DataSourceConfig, 将application.yml中的配置导入DataSource中,并注入到bean

@Configurationpublic class DataSourceConfig {//从配置文件配置数据源@Primary@Bean(name="datasource1")@ConfigurationProperties("spring.datasource.db1")public DataSource dataSource1(){return new DruidDataSource();}//从配置文件配置数据源@Bean(name="datasource2")@ConfigurationProperties("spring.datasource.db2")public DataSource dataSource2(){return new DruidDataSource();}//动态数据源 进行数据源切换@Bean(name="dynamicDataSource")public DataSource dynamicDataSource(){DynamicDataSource dynamicDatasource=new DynamicDataSource();//设置默认数据源dynamicDatasource.setDefaultTargetDataSource(dataSource1());//配置多数据源Map<Object,Object> dsMap=new HashMap<>();dsMap.put("datasource1",dataSource1());dsMap.put("datasource2",dataSource2());//将多数据源放到数据源池中dynamicDatasource.setTargetDataSources(dsMap);return dynamicDatasource;}}

七、定义动态数据源切换类DynamicDataSourceContextHolder

public class DynamicDataSourceContextHolder {private static final ThreadLocal<String> contextHolder=new ThreadLocal<>();//设置数据源名称public static void setDB(String dbType){contextHolder.set(dbType);}//获取数据源名称public static String getDB(){return contextHolder.get();}//清除数据源名public static void clearDB(){contextHolder.remove();}}

八、定义获取动态数据源类DynamicDataSource

public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return DynamicDataSourceContextHolder.getDB();}}

九、定义mybatis配置类,将DynamicDataSource放入SqlSessionFactoryBean中

@EnableTransactionManagement@Configurationpublic class MyBatisConfig {@Resource(name = "dynamicDataSource")private DataSource dynamicDataSource;@Beanpublic SqlSessionFactory sqlSessionFactory() throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dynamicDataSource);//将动态数据源bean配置到sqlsessionfactorysqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));return sqlSessionFactoryBean.getObject();}@Beanpublic PlatfORMTransactionManager platformTransactionManager() {return new DataSourceTransactionManager(dynamicDataSource);}}

十、定义用于切换数据源的注解TargetDataSource

@Target({ElementType.METHOD,ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface TargetDataSource {String value() default "datasource1";}

十一、定义切面DynamicDataSourceAspect,用于拦截注解,并执行数据源切换功能

@Aspect@Componentpublic class DynamicDataSourceAspect {@Before("@annotation(targetDataSource)")public void beforeSwitchDS(JoinPoint point,TargetDataSource targetDataSource){DynamicDataSourceContextHolder.setDB(targetDataSource.value());}@After("@annotation(targetDataSource)")public void afterSwitchDS(JoinPoint point,TargetDataSource targetDataSource){DynamicDataSourceContextHolder.clearDB();}}

十二、测试类Test

@RestControllerpublic class Test {@Autowiredprivate RoleMapper roleMapper;@Autowiredprivate UserMapper userMapper;//未使用TargetDataSource注解,则使用默认数据源,即datasource1@RequestMapping("/ds1")public String selectDataSource1(){return userMapper.selectByPrimaryKey(1).toString();}//使用了注解,则数据源为注解中指定的datasource2@RequestMapping("/ds2")@TargetDataSource("datasource2")public String selectDataSource2(){return roleMapper.selectByPrimaryKey(1).toString();}}

测试

1.输入

Http://localhost:8088/ds1

返回

springboot中如何利用mybatis+druid配置动态数据源

2.输入

http://localhost:8088/ds2

返回

springboot中如何利用mybatis+druid配置动态数据源

以上就是关于“springboot中如何利用mybatis+druid配置动态数据源”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: springboot中如何利用mybatis+druid配置动态数据源

本文链接: https://www.lsjlt.com/news/251834.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springboot中如何利用mybatis+druid配置动态数据源
    这篇“springboot中如何利用mybatis+druid配置动态数据源”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“s...
    99+
    2023-06-08
  • 使用springboot+druid双数据源动态配置操作
    目录一、yml配置二、动态切换数据源配置文件1.数据源db12.数据源db2三、多数据源的mapper包最好是分开四、代码中调用总结进行动态切换,需要在类里面配置,顺便解决mybat...
    99+
    2024-04-02
  • springboot mybatis druid配置多数据源教程
    目录1、项目代码结构2、导入基本依赖3、配置多数据源4、配置类5、启动类6、测试使用的表7、测试表对应的实体类8、持久层:dao层接口1、项目代码结构 2、导入基本依赖 记得需要导...
    99+
    2024-04-02
  • springboot中如何利用mybatis-plus配置多数据源
    这篇文章主要介绍“springboot中如何利用mybatis-plus配置多数据源”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot中如何利用mybatis-plus配置多数据源”...
    99+
    2023-06-08
  • springboot 中怎么配置DRUID数据源
    本篇文章为大家展示了springboot 中怎么配置DRUID数据源,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.修改pom.xml<dependency>  &...
    99+
    2023-06-02
  • JAVA:Springboot动态装配Druid多数据源
    1、简介 最近打算搭建一个鉴权中心服务,采用springboot+FastMybatis装配Druid,考虑后续拓展采用Druid多数据源配置,以一个数据源为主,多个动态数据源为辅的结构。除了数据库,...
    99+
    2023-09-29
    spring boot java druid
  • SpringBoot怎么使用druid配置多数据源
    这篇“SpringBoot怎么使用druid配置多数据源”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot怎...
    99+
    2023-07-05
  • springboot配置多数据源并集成Druid和mybatis的操作
    可以是mysql,oracle等多种不同数据源 项目结构 注意:只有@Primary的数据源所控制的mapper文件加注解@Mapper,否则mybatis无法切换扫描;即本文中...
    99+
    2024-04-02
  • SpringBoot使用druid配置多数据源问题
    目录一、背景二、版本介绍三、项目结构四、maven依赖 五、yaml配置文件六、数据源配置文件七、启动类配置八、druid管理页面总结一、背景 使用spring boot配...
    99+
    2023-03-11
    SpringBoot配置多数据源 druid配置多数据源 druid多数据源
  • druid多数据源配置+Datasurce动态切换方式
    目录druid多数据源配置+Datasurce动态切换AbstractRoutingDataSource 数据源动态切换例子配置多数据源并实现Druid自动切换配置yml文件主数据源...
    99+
    2024-04-02
  • springboot整合druid及多数据源配置
    前言 本篇主要分两部分 ①springboot整合druid的代码配置,以及druid的监控页面演示;②对实际场景中多数据源的配置使用进行讲解。 一、springboot整合druid的演示demo 可以用idea快速生成一个可运行的dem...
    99+
    2023-10-24
    spring boot java spring
  • SpringBoot+Mybatis如何实现动态数据源切换
    这篇文章主要介绍了SpringBoot+Mybatis如何实现动态数据源切换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。springboot是什么springboot一种全...
    99+
    2023-06-14
  • SpringBoot中如何整合Druid数据源
    这篇文章主要介绍“SpringBoot中如何整合Druid数据源”,在日常操作中,相信很多人在SpringBoot中如何整合Druid数据源问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot中...
    99+
    2023-06-08
  • Jasper如何配置动态数据源
    Jasper如何配置动态数据源,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Jasper 本身是不支持动态数据源的,能用的解决方式是通过 api 自定义数据源,...
    99+
    2023-06-03
  • SpringBoot怎么使用Nacos动态配置数据源
    这篇文章主要介绍SpringBoot怎么使用Nacos动态配置数据源,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SpringBoot/SpringCloud项目部署运行后,如果使用硬编码方式定义数据源,那么如果需要...
    99+
    2023-06-14
  • springboot配置druid多数据源的示例代码
    目录1、配置多数据源所需要的jar2、配置多数据源所需要的工具类3、DataSourceType 枚举类4、DruidProperties druid 配置属性5、DruidConf...
    99+
    2024-04-02
  • springboot中mybatis多数据源动态切换实现
    目录多数据源配置引入 动态数据源路由实现 动态数据源切换使用 案例源码 在开发中,动态数据源配置还是用的比较多的,比如在多数据源使用方面,又或者是在多个DB之间切换方面。这里给出一个...
    99+
    2024-04-02
  • SpringBoot使用Nacos动态配置数据源的方法
    SpringBoot/SpringCloud项目部署运行后,如果使用硬编码方式定义数据源,那么如果需要更换数据库,就只能通过更改源码并重启的方式来达成目的 而SpringCloud生...
    99+
    2024-04-02
  • SpringBoot中怎么使用Druid数据源
    SpringBoot中怎么使用Druid数据源,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。数据访问之Druid数据源的使用说明:该数据源Druid,使用自定义方式实现,后...
    99+
    2023-06-20
  • springboot数据源如何配置
    Spring Boot提供了多种配置数据源的方式,可以根据具体的需求选择适合的配置方式。1. 使用默认配置:Spring Boot默...
    99+
    2023-10-09
    springboot
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作