springboot 2.0+mybatis+hikari/druid+atlas+mysql 配置多数据源及遇到的坑

周边任选+年卡加赠!下单送Coding Plan 卫衣/双肩包/T恤/羽绒服任选,赠CSDN会员年卡+Coding Plan,学习装备一起拿下! 阅读详情

前言:

由于项目中用到了多个数据源,所以需要配置多数据源。这时候就不能使用springboot的默认数据源加载了,需要自定义多个数据源。

一、配置准备

看了springboot的doc和一些博主的经验之谈,发现配置多数据源并不麻烦。选择了一种比较简单的方式,自定义DataSource,SqlSessionFactoryBean,SqlSessionTemplate和DataSourceTransactionManager等。

二、多数据源加载类以及配置文件

1.配置多个数据源在application.yaml中

spring:
  datasource:
      datasource-xxorder:
          name: datasource-xxorder
          url: jdbc:mysql://{$host}:{$port}/{$db}?characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull
          username: xxxx
          password: xxxx
          driver-class-name: com.mysql.jdbc.Driver
          max-pool-size: 20
          max-active: 10
          max-idle: 5
          min-idle: 2
          initial-size: 2
          validation-query: select 1
          test-on-borrow: true
          test-on-return: false
          test-while-idle: false
          time-between-eviction-runs-millis: 3000
          min-evictable-idle-time-millis: 3000
          max-wait: 3000
          jmx-enabled: true
      datasource-xxauth:
          name: datasource-xxauth
          url: jdbc:mysql://{$host}:{$port}/{$db}?characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull
          username: xxxxxx
          password: xxxxxx
          driver-class-name: com.mysql.jdbc.Driver
          max-pool-size: 20
          max-active: 10
          max-idle: 5
          min-idle: 2
          initial-size: 2
          validation-query: select 1
          test-on-borrow: true
          test-on-return: false
          test-while-idle: false
          time-between-eviction-runs-millis: 3000
          min-evictable-idle-time-millis: 3000
          max-wait: 3000
          jmx-enabled: true

2.datasource 配置类,要让springboot能自动加载自定义的数据源

@Configuration
public class DataSourceConfig {

    @Primary
    @Bean(name = "xxOrderDSProperties")
    @Qualifier("xxOrderDSProperties")
    @ConfigurationProperties(prefix = "spring.datasource.datasource-xxorder")
    public DataSourceProperties xxOrderDSProperties(){//这是是用hikariCP的时候用的
        return new DataSourceProperties();
    }

    @Bean(name = "xxAuthDSProperties")
    @Qualifier("xxAuthDSProperties")
    @ConfigurationProperties(prefix = "spring.datasource.datasource-xxauth")
    public DataSourceProperties xxAuthDSProperties(){
        return new DataSourceProperties();
    }


    @Primary
    @Bean(name = "xxorderDS")
    @ConfigurationProperties(prefix = "spring.datasource.datasource-xxorder")
    public HikariDataSource dataSourceOrder(){
        //return DruidDataSourceBuilder.create().build(); //使用druidCP时打开这个注释,同时注释掉下面一行
        return xxOrderDSProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }

    @Bean(name = "xxauthDS")
    @ConfigurationProperties(prefix = "spring.datasource.datasource-xxauth")
    public HikariDataSource dataSourceAuth(){
        //return DruidDataSourceBuilder.create().build();//使用druidCP时打开这个注释,同时注释掉下面一行
      return xxAuthDSProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}}

说明:

i.对于数据源加载配置来讲,springboot2.0 默认的数据库连接池用的是hikari2.7.9,所以不用引入依赖了。但是创建数据源的时候要相应的指定类型,也可以在配置文件中指定。

ii.这里可以看到,笔者使用了DataSourcePr

自定义HikariCP连接池 官方解释:快速、简单、可靠。HikariCP 是一个“零开销”的生产就绪 JDBC 连接池。大约 130Kb,库非常轻。需要使用Jdbc自己实现查询,并且查询过程中,使用数据库连接池进行数据源管理。获取数据源从数据源获取链接/*** 获取数据库连接* @param driverClassName 驱动类(com.mysql.cj.jdbc.Driver)* @param username 用户名* @param password 密码* @return。 阅读详情

相关推荐

Windows下,SpringBoot JDBC无法连接的问题

问题症状 在Win7和Win10下启动时均会出现下面的错误,但是在OSX和Linux下没问题 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 18,982 m...

IOsetting的专栏 1510

POSTGRESQL实战-008-事务与并发控制【不完善】

事务与并发控制 当多个事务并发执行时,即使每个单独的事务都正确执行,数据库的一致性也可能被破坏。 为了控制并发事务之间的相互影响,解决并发可能带来的资源争用及数据不一致性问题,数据库的并发控制系统引入了: 基于锁的并发控制机制(Lock-Based Concurrency Control) 基于多版本的并发控制机制MVCC (Multi-Version Concurrency Control)。 事务和并发控制的概念 事务的基本概念和性质 ...

steven的博客 612

springboot多数据源遇到jdbcUrl is required with driverClassName.

** 2019-08-15 19:34:00.026 ERROR 17140 — [pool-3-thread-1] com.zaxxer.hikari.HikariConfig : HikariPool-1 - jdbcUrl is required with driverClassName. 2019-08-15 19:34:00.028 ERROR 17140 — [po...

weixin_39654286的博客 823

数据库查询事务隔离级别时报错:Unknown system variable 'tx_isolation'

如题如图: 在cmd界面登录mysql,查询事务隔离级别的时候,报错:未知系统变量 'tx_isolation 解决办法: 由于mysql数据库的更新,在旧版本中tx_isolation是作为transaction_isolation的别名被应用的,新版本已经弃用了,所以输入会显示未知变量 把tx_isolation换成transaction_isolation,就可以显示结果 ...

Jewel’s blog 3万+

13-SpringBoot之数据库(四)——事务处理:隔离级别与传播行为

SpringBoot之数据库(四)——事务处理:隔离级别与传播行为1. 隔离级别(isolation)1.1 未提交读1.2 读写提交1.3 可重复读1.4 串行化1.5 使用合理的隔离级别2. 传播行为(pragation)2.1 REQUIRED(0)2.2 SUPPORTS(1)2.3 MANDATORY(2)2.4 REQUIRES_NEW(3)2.5 NOT_SUPPORTED(4)2...

HJ的技术博客 8151

SpringBoot 数据源的自动配置HikariDataSource以及使用Druid数据源

SpringBoot分析数据源的自动配置以及配置和使用Druid数据源

m0_62946761的博客 1万+

Spring boot项目长时间不进行接口操作,会提示HikariPool-1警告解决方法!

问题描述:Spring boot项目长时间未进行操作,前端进行调用接口时第一次会报警报,并且接口访问时间过长而导致第一次调用接口失败 Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@286d93a8] was not registered for synchronization because synchronization is not active 2020-12-01

qq_41645986的博客 5759

SpringBoot&MySq中设置默认事务隔离等级详解

SpringBoot&MySq中设置默认事务隔离等级详解

白石的专栏 4579

Transaction Isolation Levels

事务隔离级别由韦恩谢菲尔德,2014/02/13我最近在SQL Server Central上发布了锁定,闭塞和死锁的文章。本文继续讨论事务隔离级别,以及事务隔离级别的选择如何影响前面文章中前面讨论的锁定机制。如果我们看一下数据库引擎中的联机丛书(BOL)主题隔离级别,我们可以看到事务隔离级别控制着:•读取数据时是否进行锁定,以及请求何种类型的锁。•读锁持续了多长时间。•引用由另一个事务修改的行的...

qq_41249520的博客 603

人大金仓数据库 执行SHOW TRANSACTION ISOLATION LEVEL,报 ERROR: syntax error at or near “LEVEL

摘要:在使用第三方工具连接人大金仓数据库时,出现"Default transaction isolation level detection failed"错误。经排查发现,这是由于数据库将"level"设为非保留字,导致无法识别标准SQL语句"SHOW TRANSACTION ISOLATION LEVEL"。最终通过重建数据库解决,该问题源于异常配置导致语法兼容性问题。

u014098615的博客 829

HikariCP】HikariCP连接时间设置和连接数设置

HikariCP连接时间设置和连接数设置 时间设置 HikariCP用来控制连接时间的配置主要有:idleTimeout(空闲时间)、maxLifetime(最长时间) idleTimeout:用来控制连接在连接池中空闲的时间。 maxLifetime:用来控制连接在连接池中最大的生命周期。 idleTimeout 空闲时间默认设置为600000毫秒(10分钟)。 配置生效的时机 当minimumIdle小于maximumPoolSize的时候,HikariCP才开始进行空闲连接的判断,这个时候idle

大风的博客 1万+

springboot 【数据库事务处理】

一、1.1 声明式事务使用       对于事务,需要通过标注告诉 Spring 在什么地方启用数据库事务功能 。 对于声明式事务,是使用@Transactional 进行标注的。这个注解可以标注在类或者方法上,当它标注在类上时,代表这个类所有公共非静态的方法都将启用事务功能。在@Transactional 中,还允许配置许多的属性,如事务的隔离级别和传播行为,核心内容 :如异常类型 ,从而确定...

qq_41670021的博客 1087

PG事务:隔离级别基础

在众多关系型数据库中,pg的事务机制非常有特色,了解pg的事务机制是了解pg数据库运行原理的关键。

liuzhilong的博客 1566

Spring事务:Spring声明式事务详解、@Transactional注解源码及使用说明、数据库隔离级别、读未提交,读已提交,可重复读,串行化详细说明

Spring声明式事务的使用 SpringAOP的约定会把我们的代码织入约定的流程中。同样地,使用AOP的思维后,执行SQL的代码就可以织入Spring约定的数据库事务的流程中。所以首先需要掌握这个约定。 Spring 声明式数据库事务约定 在讲解SpringAOP时,只要我们遵循约定,就可以把自己开发的代码织入约定的流程中。为了“擦除”令人厌烦的try..catch..finally.语句,减少那些数据库连接开闭和事务回滚提交的代码,Spring利用其AOP为我们提供了一个数据库事务的约定流程。通过

qq_43265673的博客 3573

MySQL查看事务隔离级别报错(ERROR 1193 (HY000): Unknown system variable 'tx_isolation')

在查看MySQL数据库事务的隔离级别时,我使用了select @@tx_isolation命令,报错如下: ERROR 1193 (HY000): Unknown system variable 'tx_isolation' 一些博客说是mysql-connector-java的版本太低,数据库的版本太高 因此将mysql-connector-java升级到最新版本就解决了问题 然后继续找,...

weixin_30594001的博客 423

Unknown system variable ‘transaction_isolation

Unknown system variable 'transaction_isolation'解决办法

咲幸运的西游模拟器 4436

Spring boot项目长时间不进行接口操作,解决HikariPool-1提示

Spring boot项目长时间不进行接口操作,解决HikariPool-1提示

李长渊的博客 3468

数据库事务

数据库事务的特性(ACID): 原子性(Atomic)     表示组成一个事务的多个数据库操作是一个不可分割的原子单元事务作为一个整体被执行,包含在其中对数据库的操作要么全部被执行,要么都不执行。 一致性(Consistency)      事务应确保数据库的状态从一个一致状态转变为另一个一致状态,事务操作成功后,数据库所处的状态和它的业务规则是一致的. 隔离性(Iso

u013057721的专栏 752

07【MyBatis连接池与事务管理】

自定义MyDataSourceFactory:/*** @intro:// MyBatis在初始化时会读取SqlMapConfig.xml中的properties配置,然后将读取到的配置传递到这个方法中 this . properties = properties;try {// Mybatis需要获取连接时首先从这个方法这里获取数据源(该方法只会调用一次) return dataSource;

緑水長流*z 788
上一篇: Springboot mybatis配置及踩过的坑
下一篇: springboot+gradle配置过程中遇到的一些小坑和解决记录
michaelgo
博客等级 码龄16年 36粉丝 20原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值