ShardingSphere-JDBC整合druid配置数据源

ShardingSphere-JDBC整合druid配置数据源,第1张

前言

本文重点讲ShardingSphere整合driud,原因是,网上大部分讲的重点都在ShardingSphere整合mysql的数据源上,配置文件也不是很完整,很全面,所以这里先说一下配置,均采用yml的方式。

下边开始正文,文章最后会附上完整代码,配置步骤思路不想看可以直接跳到最后。(博主这里建议大家,对于自己配置和写的东西,尽量要搞懂每项配置和每行代码的作用,而不是随便在网上一复制,项目中一粘贴,只要不报错就ok,这样是对项目的不负责,也是对自己的不负责。)

特别说明

本文针对的ShardingSphere版本为 5.0.0-alpha,maven依赖

<dependency>
   <groupId>org.apache.shardingspheregroupId>
    <artifactId>shardingsphere-jdbc-core-spring-boot-starterartifactId>
    <version>5.0.0-alphaversion>
dependency>

版本的差异造成配置方法也发生很大变化,比如,在最新的5.1.1中,common配置项就无法使用了,只能把公共信息在每个数据源下都配置一遍(至少在我本文发布节点存在这个问题)。

配置druid

rules部分本文就不讲解和配置了,可以看完整springboot整合ShardingSphere-JDBC文章

spring:
  shardingsphere:
    datasource:
      common:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        initial-size: 6
        min-idle: 3
        maxActive: 20
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        # 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 300000
        #Oracle需要打开注释
        #validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        # 打开PSCache,并且指定每个连接上PSCache的大小
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
        filters: stat,wall,slf4j
        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
        wall:
          multi-statement-allow: true
      names: demo0,demo1
      demo0:
        url: jdbc:mysql://localhost:3306/ride_share?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
        username: root
        password: 123456

      demo1:
        url: jdbc:mysql://192.168.150.129:3306/ride_share?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
        username: root
        password: root

看网上关于druid这部分的配置,基本全部都是放在每个数据源下的,这样会造成很多冗余代码,博主有点强迫症,既然shardingsphere starter给我们提供了common,为什么不利用一下呢。

配置完之后启动会报错找不到 “url”,这个错误是druid报的,因为没有对其配置数据源,但是我们的数据源是要用shardingsphere 来配置的,所以我们先排序掉druid的核心配置,加入如下代码。

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

配置完之后,我们可以顺利的启动项目了,但是你会发现druid的监控页面你打不开了,也就是下边的页面。

原因就是我们上一步的配置,启动将druid的配置排除了。
那怎么办?所以我们要在项目里给它重新开启。

druid配置文件

@Configuration
public class DruidConfig {
    /**
     * Druid监控
     */
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        Map<String,String> initParams = new HashMap<>();//这是配置的druid监控的登录密码
        initParams.put("loginUsername","root");
        initParams.put("loginPassword","root");
        //默认就是允许所有访问
        initParams.put("allow","127.0.0.1,192.168.3.4");
        //黑名单IP
        initParams.put("deny","192.168.15.21");
        bean.setInitParameters(initParams);
        return bean;
    }
}

这一种配置是我在网上找的,可以用,但唯一不完美的地方就是配置信息要写在代码里而不是配置文件里,当然你也可以直接把这些自定义信息定义在yml里,然后注入进来,但是还是不够优雅。

这时我注意到了之前没用ShardingSphere的时候,用mybatis动态数据源的配置。

mybatis也是排除了这个druid自动配置,但是监控页面依然能打开,怎么找到原因呢?
思路:确定druid配置是mybaits开启的,然后我们先去看看druid是怎么加载yml配置并且开启监控页面的,之后再去找到开启的核心配置类,最后看看这个配置类被谁调用了。
下边直接截图表达:


为什么找这个类,因为对应配置文件


找到了,果然mybatis引用它了,继续。

ok,把这个类复制出来,改个名字放到你的项目里就好了。

/**
 * @author: zhouwenjie
 * @description: 重新开启被排除的druid配置
 * @create: 2022-04-24 16:54
 **/

@Configuration
@ConditionalOnClass(DruidDataSourceAutoConfigure.class)
@EnableConfigurationProperties({DruidStatProperties.class})
@Import({
        DruidSpringAopConfiguration.class,
        DruidStatViewServletConfiguration.class,
        DruidWebStatFilterConfiguration.class,
        DruidFilterConfiguration.class})
public class DruidShardingJdbcDataSourceConfiguration {
}

于是,我们yml里就可以按照druid官方要求正常配置了。

yml完整配置
server:
  port: 8088
  servlet:
    context-path: /sharding
spring:
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      stat-view-servlet:
        enabled: true
        loginUsername: admin
        loginPassword: 123456
      web-stat-filter:
        enabled: true
  shardingsphere:
    datasource:
      common:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        initial-size: 6
        min-idle: 3
        maxActive: 20
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        # 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 300000
        #Oracle需要打开注释
        #validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        # 打开PSCache,并且指定每个连接上PSCache的大小
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
        filters: stat,wall,slf4j
        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
        wall:
          multi-statement-allow: true
      names: demo0,demo1
      demo0:
        url: jdbc:mysql://localhost:3306/ride_share?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
        username: root
        password: 123456

      demo1:
        url: jdbc:mysql://192.168.150.129:3306/ride_share?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
        username: root
        password: root

好了,至此完成,如果小伙伴们发现有什么不对的地方,可以提示一下,我及时更正!!!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/730732.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存