精华内容
下载资源
问答
  • springboot 2 多数据源 hikari 连接

    千次阅读 2021-02-01 04:36:13
    1.配置文件#第一数据源spring.datasource.primary.jdbc-url=jdbc:sqlserver://192.168.1.159\\aaa:1433;database=dataserverspring.datasource.primary.username=saspring.datasource.primary.password=fr123456...

    1.配置文件

    #第一数据源

    spring.datasource.primary.jdbc-url=jdbc:sqlserver://192.168.1.159\\aaa:1433;database=dataserver

    spring.datasource.primary.username=sa

    spring.datasource.primary.password=fr123456

    spring.datasource.primary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

    spring.datasource.primary.type=com.zaxxer.hikari.HikariDataSource

    spring.datasource.primary.minimum-idle=1spring.datasource.primary.maximum-pool-size=15spring.datasource.primary.auto-commit=truespring.datasource.primary.idle-timeout=60000spring.datasource.primary.pool-name=fang_sqlserver

    spring.datasource.primary.max-lifetime=1800000spring.datasource.primary.connection-timeout=30000spring.datasource.primary.connection-test-query=SELECT 1#第二数据源

    spring.datasource.secondary.jdbc-url=jdbc:mysql://192.168.1.130:33306/reptie?zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8&useSSL=false&useUnicode=true&autoReconnect=true

    spring.datasource.secondary.username=root

    spring.datasource.secondary.password=123456spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver

    spring.datasource.secondary.type=com.zaxxer.hikari.HikariDataSource

    spring.datasource.secondary.minimum-idle=1spring.datasource.secondary.maximum-pool-size=15spring.datasource.secondary.auto-commit=truespring.datasource.secondary.idle-timeout=60000spring.datasource.secondary.pool-name=fang_mysql

    spring.datasource.secondary.max-lifetime=1800000spring.datasource.secondary.connection-timeout=30000spring.datasource.secondary.connection-test-query=SELECT 1

    2.java代码,配置DataSource

    import com.zaxxer.hikari.HikariDataSource;

    import org.apache.ibatis.session.SqlSessionFactory;

    import org.mybatis.spring.SqlSessionFactoryBean;

    import org.mybatis.spring.SqlSessionTemplate;

    import org.mybatis.spring.annotation.MapperScan;

    import org.springframework.beans.factory.annotation.Qualifier;

    import org.springframework.boot.context.properties.ConfigurationProperties;

    import org.springframework.boot.jdbc.DataSourceBuilder;

    import org.springframework.context.annotation.Bean;

    import org.springframework.context.annotation.Configuration;

    import org.springframework.context.annotation.Primary;

    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

    import javax.sql.DataSource;

    /**

    * @author PangG

    * @MapperScan 扫描mapper所在路径

    */

    @Configuration

    @MapperScan(basePackages = "aa.com.cn.mapper.sqlserver", sqlSessionFactoryRef = "sqlserverSqlSessionFactory")

    public class SqlserverDataSourceConfig {

    /**

    * @Bean 注册Bean对象

    * @Primary 表示默认数据源

    * @ConfigurationProperties 读取properties中的配置参数映射成为一个对象

    */

    @Bean(name = "sqlserverDataSource")

    @Primary

    @ConfigurationProperties(prefix = "spring.datasource.primary")

    public HikariDataSource getSqlserverDateSource() {

    return new HikariDataSource();

    }

    /**

    * @param datasource 数据源

    * @return SqlSessionFactory

    * @Primary 默认SqlSessionFactory

    */

    @Bean(name = "sqlserverSqlSessionFactory")

    @Primary

    public SqlSessionFactory sqlserverSqlSessionFactory(@Qualifier("sqlserverDataSource") DataSource datasource) throws Exception {

    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

    bean.setDataSource(datasource);

    //mybatis扫描xml所在位置

    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/sqlserver/*.xml"));

    //分页插件

    Interceptor interceptor = new PageInterceptor();

    Properties properties = new Properties();

    //数据库

    properties.setProperty("helperDialect", "sqlserver");

    // //是否将参数offset作为PageNum使用

    // properties.setProperty("offsetAsPageNum", "true");

    // //是否进行count查询

    // properties.setProperty("rowBoundsWithCount", "true");

    //是否分页合理化

    properties.setProperty("reasonable", "true");

    interceptor.setProperties(properties);

    bean.setPlugins(new Interceptor[] {interceptor});

    return bean.getObject();

    }

    @Bean("sqlserverSessionTemplate")

    @Primary

    public SqlSessionTemplate sqlserverSqlSessionTemplate(@Qualifier("sqlserverSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {

    return new SqlSessionTemplate(sqlSessionFactory);

    }

    }

    import com.zaxxer.hikari.HikariDataSource;

    import org.apache.ibatis.session.SqlSessionFactory;

    import org.mybatis.spring.SqlSessionFactoryBean;

    import org.mybatis.spring.SqlSessionTemplate;

    import org.mybatis.spring.annotation.MapperScan;

    import org.springframework.beans.factory.annotation.Qualifier;

    import org.springframework.boot.context.properties.ConfigurationProperties;

    import org.springframework.boot.jdbc.DataSourceBuilder;

    import org.springframework.context.annotation.Bean;

    import org.springframework.context.annotation.Configuration;

    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

    import javax.sql.DataSource;

    /**

    * @author PangG

    * @MapperScan 扫描mapper所在路径

    */

    @Configuration

    @MapperScan(basePackages = "aa.com.cn.mapper.mysql", sqlSessionFactoryRef = "mysqlSqlSessionFactory")

    public class MySqlDataSourceConfig {

    /**

    * @Bean 注册Bean对象

    * @Primary 表示默认数据源

    * @ConfigurationProperties 读取properties中的配置参数映射成为一个对象

    */

    @Bean(name = "mysqlDataSource")

    @ConfigurationProperties(prefix = "spring.datasource.secondary")

    public HikariDataSource getMysqlDateSource() {

    return new HikariDataSource();

    }

    /**

    * @param datasource 数据源

    * @return SqlSessionFactory

    * @Primary 默认SqlSessionFactory

    */

    @Bean(name = "mysqlSqlSessionFactory")

    public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource datasource) throws Exception {

    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

    bean.setDataSource(datasource);

    //mybatis扫描xml所在位置

    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/mysql/*.xml"));

    //分页插件

    Interceptor interceptor = new PageInterceptor();

    Properties properties = new Properties();

    //数据库

    properties.setProperty("helperDialect", "mysql");

    // //是否将参数offset作为PageNum使用

    // properties.setProperty("offsetAsPageNum", "true");

    // //是否进行count查询

    // properties.setProperty("rowBoundsWithCount", "true");

    //是否分页合理化

    properties.setProperty("reasonable", "true");

    interceptor.setProperties(properties);

    bean.setPlugins(new Interceptor[]{interceptor});

    return bean.getObject();

    }

    @Bean("mysqlSessionTemplate")

    public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {

    return new SqlSessionTemplate(sqlSessionFactory);

    }

    }

    如果有 Thread starvation or clock leap detecte 警告 把minimum-idle的值设置成1即可

    下面有评论,看不懂,感觉没必要?

    getMysqlDateSource(),这个方法的返回值应该改为DataSource,不能是HikariDataSource。 否则的话,@Bean初始化不会执行这个方法。 因为springboot自己已经创建了一个HikariDataSource对象放在ioc容器里,@Bean不会重复创建

    展开全文
  • 使用 spring boot 2.0 以上默认使用Hikari连接池,一旦连接池启动,就无法再修改HikariDataSource,所以刷新配置时连带数据源一起刷新,于是报错。 解决方式 解决方法: 在自定义的DataSource上加入注解@...

    Bug

    异常信息如下:

    The configuration of the pool is sealed once started.  Use HikariConfigMXBean for runtime changes.
    

    使用 spring boot 2.0 以上默认使用Hikari连接池,一旦连接池启动,就无法再修改HikariDataSource,所以刷新配置时连带数据源一起刷新,于是报错。

    解决方式

    解决方法: 在自定义的DataSource上加入注解@RefreshScope,或者使用spring.scloud.refresh.extra-refreshable配置指定classname列表。我采取的时直接加 @RefreshScope 注解的方式
    在这里插入图片描述

    展开全文
  • 整合Druid连接池及数据源监控 第一次用mybatis-plus配置多数据源也是踩了很多坑,写一篇文章记录下详细的配置过程。首先要自行搭建一个初始化的springboot工程 添加相应依赖(重要) 为什么说添加相应依赖很重要,...


    第一次用mybatis-plus配置多数据源也是踩了很多坑,写一篇文章记录下详细的配置过程。首先要自行搭建一个初始化的springboot工程

    添加相应依赖(重要)

    为什么说添加相应依赖很重要,因为这里坑很多,依赖添不好启动直接会jar包冲突报错的。
    1.MyBatis-Plus官方文档说多数据源配置第一步要引入dynamic-datasource-spring-boot-starter

    <!-- 实现对 dynamic-datasource 的自动化配置 -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
      <version>2.5.4</version>
    </dependency>
    

    2.使用MyBatis-Plus当然少不了实现对 MyBatis 的自动化配置

    <dependency>
       <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.1</version>
    </dependency>
    

    注意这时就出现第一个坑:有了mybatis-plus,mybatis就不用引入不然有冲突,所以下边这个依赖不要引入:

    <!--<dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${mybatis.spring.boot.version}</version>
    </dependency>-->
    

    3.mysql依赖肯定得有:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    

    4.引入德鲁伊连接池:

    <dependency>
       <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.1</version>
    </dependency>
    

    注意这时第二个坑就出现了: 注意需要在springboot配置中排除原生Druid的快速配置类:DruidDataSourceAutoConfigure。让mybatis-plus提供的dynamic-datasource来完成配置。不然启动直接报如下错误:
    在这里插入图片描述

    排除原生Druid的快速配置类

    两种方式二选一即可:
    1)在springboot启动类上加如下配置:

    @SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
    

    2)在application.yml配置文件中添加如下配置(properties同理):

    spring:
      autoconfigure:
        exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
    

    yml配置

    一般项目中会放三个application配置文件(application.yml、application-dev.yml、application-prod.yml),因为开发环境用的配置肯定和生产环境不一样的,所以这样方便我们切换:
    1.application.yml(放些开发和生产环境通用的配置)如下:

    server:
      port: 8088
    spring:
      profiles:
        active: dev #引入开发环境
      application:
        name: demo #服务名
      autoconfigure:
        exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
          initial-size: 10 #初始化时建立物理连接的个数
          min-idle: 10 #最小连接池数量
          maxActive: 100 #最大连接池数量
          maxWait: 20000 #获取连接时最大等待时间,单位毫秒
          #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
          test-while-idle: true
          time-between-eviction-runs-millis: 20000 #既作为检测的间隔时间又作为test-while-idle执行的依据
          min-evictable-idle-time-millis: 30000 #销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
          #用来检测连接是否有效的sql
          #mysql中为 select 'x'
          #oracle中为 select 1 from dual
          validation-query: SELECT 'x'
          test-on-borrow: false #申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
          test-on-return: false #归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
          exception-sorter: true #当数据库抛出不可恢复的异常时,抛弃该连接
          pool-prepared-statements: true #是否缓存preparedStatement,mysql5.5+建议开启
          max-pool-prepared-statement-per-connection-size: 20 #当值大于20时poolPreparedStatements会自动修改为true
          #通过connectProperties属性来打开mergeSql功能;慢SQL记录
          connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
          use-global-data-source-stat: true #合并多个DruidDataSource的监控数据
          #filters通过别名的方式配置扩展插件,常用的插件有:
          #监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
          filters: stat,wall,log4j
          #设置访问druid监控页面的拦截路径及账号和密码,默认没有
          stat-view-servlet:
            enabled: true
            url-pattern: /druid/*
            login-username: admin
            login-password: admin
    # mybatis-plus通用配置
    mybatis-plus:
      configuration:
        # 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射
        map-underscore-to-camel-case: false
    

    2.application-dev.yml(放些开发环境的配置)多数据源配置就在这里,如下:

    spring:
      datasource:
        dynamic:
          primary: master #设置默认的数据源或者数据源组,默认值即为master
          strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
          datasource:
            master:
              url: jdbc:mysql://192.168.100.30:3306/erp4?useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8
              username: erplocal
              password: erplocal
              driver-class-name: com.mysql.cj.jdbc.Driver
            slave:
              url: jdbc:mysql://192.168.100.30:3306/erp4_cloud?useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8
              username: erplocal
              password: erplocal
              driver-class-name: com.mysql.cj.jdbc.Driver
    # 配置sql打印日志,开发环境需要,生产环境一般不需要
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    

    此时我们的相关配置就搞定了,可以来编写业务代码了,非常的简单。

    使用多数据源

    mybatis-plus官方说明书:

    使用 @DS 切换数据源
    

    在这里插入图片描述

    如何在同一个方法中切换数据源?

    肯定有这种需求,在同一个方法中调不同的库来查询,这是就涉及数据源的切换了,其实很简单,只需两步就ok:

    DynamicDataSourceContextHolder.push("slave");//slave即数据源名称
    //中间执行你的业务sql
    DynamicDataSourceContextHolder.clear();
    

    整合Druid连接池及数据源监控

    其实在上边的yml配置中已经整合了德鲁伊连接池了。
    需要注意一点:如果需要访问德鲁伊的内置监控页面就必须要配如下配置:

     #设置访问druid监控页面的拦截路径及账号和密码,默认没有
          stat-view-servlet:
            enabled: true
            url-pattern: /druid/*
            login-username: admin
            login-password: admin
    

    启动项目,访问http://localhost:8088/druid,就能跳转到监控页面了,我们可以看到数据源中存在我们配置的两个节点:
    在这里插入图片描述

    展开全文
  • 针对这种多数据源使用场景的痛点,MyBatis-plus团队开源了一个更为方便的解决方案(https://mp.baomidou.com/guide/dynamic-datasource.html),但是对于整合druid数据库连接池,却没有给出具体的使用示例。...

    在使用springboot开发业务应用程序的过程中,使用多数据源的场景很常见。目前,业界常用的spring boot整合多数据源的方案主要有两个,一个是Mapper分包方式,另一个是AOP切片方式。针对这种多数据源使用场景的痛点,MyBatis-plus团队开源了一个更为方便的解决方案(https://mp.baomidou.com/guide/dynamic-datasource.html),但是对于整合druid数据库连接池,却没有给出具体的使用示例。本篇文章就是使用springboot整合mybatis-plus、druid连接池和多数据源配置,给出一个可用的示例。

    一、在SpringBoot项目pom文件中引入依赖

    在SpringBoot项目pom文件中,引入如下依赖:

    <!-- 常用collection操作 依赖 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-collections4</artifactId>
                <version>4.1</version>
            </dependency>
    
            <!-- mybatis-plus依赖 -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.4.1</version>
            </dependency>
    
            <!-- druid连接池依赖 -->
            <!-- 如果使用druid-spring-boot-starter, 那么需要在启动类上使用@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class) -->
            <!--        <dependency>-->
            <!--            <groupId>com.alibaba</groupId>-->
            <!--            <artifactId>druid-spring-boot-starter</artifactId>-->
            <!--            <version>1.2.4</version>-->
            <!--        </dependency>-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.2.4</version>
            </dependency>
    
            <!--多数据源依赖-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
                <version>3.3.1</version>
            </dependency>
    
            <!-- mysql connector 依赖 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.23</version>
                <scope>runtime</scope>
            </dependency>
    
            <!-- lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <!-- 测试类 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>

     

    二、application属性文件增加数据源配置项

    使用property格式配置,则属性配置文件application.properties内容为:

    
    
    mybatis-plus.mapper-locations=classpath:mapper/*.xml
    mybatis-plus.type-aliases-package=com.mvp.world.mybatisplusdynamicdruid.model.po
    
    ########################## 多数据源配置###############################
    ## druid连接池配置
    # 默认数据源
    spring.datasource.dynamic.primary=master
    # 主库配置 master
    spring.datasource.dynamic.datasource.master.username=test_user
    spring.datasource.dynamic.datasource.master.password=test_pswd
    spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
    #spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.dynamic.datasource.master.url=jdbc:mysql://localhost:3306/mysql-plus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    spring.datasource.dynamic.datasource.master.druid.initial-size=5
    spring.datasource.dynamic.datasource.master.druid.max-active=20
    spring.datasource.dynamic.datasource.master.druid.min-idle=5
    spring.datasource.dynamic.datasource.master.druid.max-wait=60000
    spring.datasource.dynamic.datasource.master.druid.min-evictable-idle-time-millis=300000
    spring.datasource.dynamic.datasource.master.druid.max-evictable-idle-time-millis=300000
    spring.datasource.dynamic.datasource.master.druid.time-between-eviction-runs-millis=60000
    # 从库配置 slave
    spring.datasource.dynamic.datasource.slave.username=test_user
    spring.datasource.dynamic.datasource.slave.password=test_pswd
    spring.datasource.dynamic.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driver
    #spring.datasource.dynamic.datasource.slave.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.dynamic.datasource.slave.url=jdbc:mysql://localhost:3306/mysql-plus-slave?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    spring.datasource.dynamic.datasource.slave.druid.initial-size=5
    spring.datasource.dynamic.datasource.slave.druid.max-active=20
    spring.datasource.dynamic.datasource.slave.druid.min-idle=5
    spring.datasource.dynamic.datasource.slave.druid.max-wait=60000
    spring.datasource.dynamic.datasource.slave.druid.min-evictable-idle-time-millis=300000
    spring.datasource.dynamic.datasource.slave.druid.max-evictable-idle-time-millis=300000
    spring.datasource.dynamic.datasource.slave.druid.time-between-eviction-runs-millis=60000
    ## 去除druid配置
    #spring.autoconfigure.exclude=com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure 
    ############################# 多数据源配置##############################
    

    说明:

    1.spring.datasource.dynamic.primary=master 表示设置master数据源为primary数据源。

    2.在application.properties属性文件中,配置的多个数据源以spring.datasource.dynamic.datasource为前缀。

    3.spring.datasource.dynamic.strict=false 设置严格模式,默认false不启动.。若设置为true,则在未匹配到指定数据源时会抛出异常。若设置为false,则在未匹配到指定数据源时会使用默认数据源。

    如果使用yaml格式配置,则application.yaml配置文件内容为:

    server:
      port: 8080
    spring:
      datasource:
        dynamic:
          primary: master # 配置默认数据库
          datasource:
            master: # 数据源1配置
              url: jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
              username: test_user
              password: test_pswd
              driver-class-name: com.mysql.cj.jdbc.Driver
            slave: # 数据源2配置
              url: jdbc:mysql://localhost:3306/db2?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
              username: test_user
              password: test_pswd
              driver-class-name: com.mysql.cj.jdbc.Driver
          durid:
            initial-size: 1
            max-active: 20
            min-idle: 1
            max-wait: 60000
      autoconfigure:
        # 去除druid配置。是否需要,根据druid连接池的类型。如果druid连接池为starter类型,则需要排除。否则,不需要。
        exclude:  com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure 
    

    三、@DS 注解

    @DS注解可用于方法或类上。若同时存在,则方法上的注解优先于类上的注解。
    官网推荐@DS注解在service层使用,且是实现类上使用,在接口层无效。注解用在service实现或mapper接口方法上,不要同时在service和mapper注解。

    注解结果
    没有@DS默认数据源
    @DS(“dsName”)dsName可以为组名也可以为具体某个库名

    若没有使用@DS注解,则会使用默认数据源。
    @DS(“dsName”) dsName可以为某个具体库名,也可以为组名。若dsName为组名,则会使用负载均衡算法进行切换。

    四、启动排除druid连接池默认自动配置

    1. 如果在pom文件中引入druid连接池的依赖为druid-spring-boot-starter,那么需要在应用启动时排除druid默认加载的db配置项。原因为:DruidDataSourceAutoConfigure会注入一个DataSourceWrapper,这个数据源包装器会在原生spring.datasource或spring.datasource.druid路径下查找url、username、password等属性。动态数据源依赖默认加载的 url、username、password等配置项是在spring.datasource.dynamic路径下,因此需要排除druid属性默认加载,否则程序会报错。排除druid属性默认加载的方式有两种,一种是在配置文件中排除,另一种是在项目启动类中排除。

    在配置文件中排除druid属性默认加载,其方法为在配置文件中添加如下内容:

    spring.autoconfigure.exclude=com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure 

    在项目启动类中排除druid属性默认加载,其方法为在@SpringBootApplication注解中排除DruidDataSourceAutoConfigure.class,如下所示:

    @SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)

    2. 如果在pom文件中引入druid连接池的依赖非starter版本的druid依赖,那么应用程序在启动时不会加载druid默认的db配置项,也就不用考虑如何排除DataSourceWrapper数据源包装器。建议使用这种方式。

    五、使用多数据源代码示例

    1.在mapper层使用mybatis-plus整合多数据源

    @DS("slave") 
    public interface UserMapper extends BaseMapper<User> {
    }

    2.在service层使用JdbcTemplate整合多数据源

    @Service
    public class UserServiceImpl implements UserService {
     
      @Autowired
      private JdbcTemplate jdbcTemplate;
     
      public List selectAll() {
        return  jdbcTemplate.queryForList("select * from user limit 10");
      }
      
      @Override
      @DS("slave")
      public List selectByCondition() {
        return  jdbcTemplate.queryForList("select * from user where age >10 limit 10");
      }
    }

    3.在service层使用mybatis-plus整合多数据源

    @Service
    @DS("db2") // @DS注解可以使用在service实现类上
    public class ModelServiceImpl extends ServiceImpl<ModelMapper, Model> implements IModelService {
      @Select("SELECT * FROM user order by id asc limit 10")
      @DS("slave") // @DS注解可以使用在service实现类的方法上
      List<User> selectUser();
    }

     

     

     

     

     

    展开全文
  • 配置说明在“关系数据源管理”界面进行关系数据源连接配置项的设置,如下表:配置项说明名称新建的数据源的标示名,必须唯一。别名新建的数据源显示的名称。用户选择连接的数据库的类型。系统支持连接的关系数据库...
  • DolphinScheduler 不同Mysql版本数据源连接失败问题解决方案 在部署dolphinscheduler后,默认的Mysql版本是5.x,但是如果在配置数据源中需要连接8.x的话,就会报建立数据源失败。 解决方案 在安装目录lib下找到...
  • JDBC数据源常用的有:应用服务器自身的JNDI数据源、开源数据源 DBCP、 C3P0、Druid、hikari等。接下来我们介绍如何使用和配置。 说明: 第一种:采用TongWeb的JNDI数据源,可自学下关于JNDI的知识。 1. 先将...
  • Abp连接多个数据源

    千次阅读 2020-12-19 18:46:26
    在使用ABP时会遇到新数据和旧数据相互结合,我们不单单要用到一个数据库,还会用到多个数据库,由于我们使用了ABP框架,所以就要学习框架中的知识点,进入代码环节。 平时我们都是继承EntityFramework下的DbContext...
  • 配置多数据源,由于不常用就进行了百度,百度了很久(有很多都不能用),加上自己修修改改,终于能用了。那么就废话不多说,直接上代码。 SpringBoot应用启动类注解: @MapperScan("com.xxx.mapper") @SpringBoot...
  • 先来解释一下什么是多数据源,多数据源的意思就是,我需要在一个项目(工程) 中连接两个或两个以上的数据库。通常情况我们的一个项目都是连接一个数据库的,但是不排除 一些特殊情况下,需要连接多个数据库。这里一定...
  • 铁子们,快扫码关注啦!或 wx搜索:“聊5毛钱的java”,关注可领取博主的...都去重新建立并获取新的连接,会浪费大量的资源和时间,此时客户端的响应时间肯定会较,这并不是我们想看到的。因此这时候我们就要想办..
  • 上两遍已经描述了动态多数据源的原理和基础实现了,上面两篇都是从applition.yml中配置多数据源的,这里再拓展补充一下其他场景,如何读取数据源不从applition.yml中配置,实现从数据库中读取数据源配置并动态切换...
  • 连接配置—>命令配置—>记录集配置—>管理从数据库返回的数据 对于连接配置需要包含以下参数: 参数 描述 数据提供商 Provider 数据服务器 服务器名称 初始目录 要连接的数据库 认证 数据库...
  • Tableau可以连接到广泛使用的所有常用数据源.Tableau的本机连接器可以连接到以下类型的数据源。 文件系统,如CSV,Excel等。 关系系统如Oracle,Sql Server,DB2等。 云系统如Windows Azure,Google BigQuery等。...
  • #每个库可连接最大用户数 dynamic-server: #每个服务最大建库数 database-max-number: 30 #每个库最大用户连接数 user-max-number: 200 template: gis_template 然后项目中添加dynamicds 模块的代码,仅展示...
  • Springboot动态切换数据源

    千次阅读 2021-11-30 10:31:31
    动态切换数据源 在springboot项目中只需一句代码即可实现多个数据源之间的切换: // 切换sqlserver数据源: DataSourceContextHolder.setDataBaseType(DataSourceEnum.SQLSERVER_DATASOURCE); ...... // 切换mysql数据...
  • Java动态切换数据源(AOP)

    千次阅读 2021-02-25 19:37:07
    而使用客户端模式来管理数据源,直连数据库,就没有那一部分的性能损耗,但是不够通用,而且如果业务足够复杂时,对数据库的连接处理也并不 easy。二、实现 ①自定义数据源目录结构概览:采用 springboot 来实现本...
  • 下面我们为大家介绍SqlDataSource如何配置数据源,在此,连接的是MSSQL数据库。如下图一样,首先在页面中拖出一个控件,该控件为FormView,随后,和这个控件一起出现的就是SqlDataSource控件了。点击SqlDataSource...
  • Mycat 连接会报无效数据源(Invalid datasource)? 答:例如报错:mysql> select * from company; ERROR 3009 (HY000): java.lang.IllegalArgumentException: Invalid DataSource:0 这类错误最常见是一些配置...
  • clickhouse连接mysql数据源 在linux123上建立好测试的数据库和表并插入数据 create database bigdataClickHouse; use bigdataClickHouse; create table student( id int, name varchar(40), age int); insert ...
  • 一、Druid的简介: Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他...Spring Boot 2.0 以上默认使用 Hikari 数据源,可以说 Hikari 与 Driud 都是当前 Java Web
  • Boot项目原配Mysql数据库 。业务需要加上sqlserver数据库 网上看了两天 趟了不少坑。其实网上帖子挺全的,我遇到的问题没有太多相关介绍。现在搞好后分享给大家,自己也做个记录。1.首先 依赖配置按需配置重点是...
  • 问题描述: IM002:未发现数据源名称且未指定驱动程序 解决办法: 找到Navicat Premium 15安装目录,找到msodbcsql_64.msi文件,双击安装,再次打开Navivat即可:
  • 数据源(Source)用于管理用户数据源连接配置。Davinci 目前支持两种类型数据源: 通过 JDBC 连接的数据源(配置详情参考安装 - 数据源配置); 上传 CSV 文件到指定数据库中作为数据源 1 新增数据源 在数据源...
  • 1. 简介ArcGIS for Sever 从10.1 推出了一个非常实用的功能,就是注册数据源(register data store)。注册数据源,就是将当前是数据路径赋予arcgis for server的账户(安装的时候,默认为arcgis)的相关的操作权限,...
  • 【Java】SpringBoot整合多数据源JdbcTemplate、Mybatis、Jpa

    千次阅读 多人点赞 2021-11-30 00:04:21
    SpringBoot 整合 JdbcTemplate 多数据源 pom <!-- 引入阿里的数据源--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId>...
  • 数据源在配置文件中的配置xmlns:xsi=...
  • Grafana配置es数据源

    千次阅读 2021-11-11 14:37:13
    -H 'Content-Type: application/json' -d' { "user" : "kimchy3", "post_date" : "2021-11-11T01:45:12", "message" : "trying out Elasticsearch" }' 配置Grafana数据源 post_date在插入数据的时候,指定为"2021-...
  • PowerBI目前可以连接超过100种数据源,包含常见的各种数据库,文件,数据仓库,云等等。不同的数据源支持不同的连接方式,通常来讲,PowerBI支持两种数据连接方式:导入(import)和DirectQuery对于导入:1.导入的数据...
  • 数据源的作用主要是与业务数据库取得连接,从而获取业务数据进行分析。数据源的数据库包含关系数据库,本地数据库(Java数据源,Excel数据源,主要用于自定义数据结构及上传本地数据文件),多维数据库,高速...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,053,068
精华内容 421,227
关键字:

数据源长连接