1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > ShardingSphere-JDBC整合druid配置数据源

ShardingSphere-JDBC整合druid配置数据源

时间:2019-02-18 23:44:00

相关推荐

ShardingSphere-JDBC整合druid配置数据源

前言

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

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

特别说明

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

<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.0.0-alpha</version></dependency>

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

配置druid

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

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

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

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

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

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

原因就是我们上一步的配置,启动将druid的配置排除了。

那怎么办?所以我们要在项目里给它重新开启。

druid配置文件

@Configurationpublic class DruidConfig {/*** Druid监控*/@Beanpublic 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");//黑名单IPinitParams.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: -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: 8088servlet:context-path: /shardingspring:autoconfigure:exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfiguredatasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:stat-view-servlet:enabled: trueloginUsername: adminloginPassword: 123456web-stat-filter:enabled: trueshardingsphere:datasource:common:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverinitial-size: 6min-idle: 3maxActive: 20# 配置获取连接等待超时的时间maxWait: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒minEvictableIdleTimeMillis: 300000#Oracle需要打开注释#validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: false# 打开PSCache,并且指定每个连接上PSCache的大小poolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 20# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙filters: stat,wall,slf4j# 通过connectProperties属性来打开mergeSql功能;慢SQL记录connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000wall:multi-statement-allow: truenames: demo0,demo1demo0:url: jdbc:mysql://localhost:3306/ride_share?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456demo1: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/Shanghaiusername: rootpassword: root

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

Shardingsphere与dynamic-datasource配合实现多数据源切换

当然,也有需求是,用到数据读写分离或者分片的需求就用shardingsphere,但是用不到就用正常的数据源,那么可以参考这篇文章:

Shardingsphere与dynamic-datasource配合实现多数据源切换

读写分离参考这个:

基于5.1.1版本的读写分离(完整版)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。