Spring boot项目集成Sharding Jdbc

  环境
  
  jdk:1.8
  
  framework: spring boot, sharding jdbc
  
  database: MySQL
  
  搭建步骤
  
  在pom 中加入sharding 依赖
  
  <dependency>
  
  <groupId>io.shardingjdbc</groupId>
  
  <artifactId>sharding-jdbc-core-spring-boot-starter</artifactId>
  
  <version>2.0.3</version>
  
  </dependency>
  
  将原来的 spring DataSource 注释掉,加入 sharding 的配置
  
  sharding:
  
  jdbc:
  
  datasource:
  
  names: ds_0,ds_1
  
  ds_0:
  
  type: com.zaxxer.hikari.HikariDataSource
  
  driver-class-name: com.mysql.jdbc.Driver
  
  jdbc-url: jdbc:mysql://sharding0
  
  username: mams_test
  
  password: mams_test
  
  ds_1:
  
  type: com.zaxxer.hikari.HikariDataSource
  
  driver-class-name: com.mysql.jdbc.Driver
  
  jdbc-url: jdbc:mysql://sharding1
  
  username: mams_test
  
  password: mams_test
  
  config:
  
  sharding:
  
  default-data-source-name: ds_0
  
  tables:
  
  task:
  
  actual-data-nodes: ds_${0..1}.task
  
  database-strategy:
  
  inline:
  
  sharding-column: id
  
  algorithm-expression: ds_${id % 2}
  
  key-generator-column-name: id
  
  reverse_display:
  
  actual-data-nodes: ds_${0..1}.reverse_display
  
  database-strategy:
  
  inline:
  
  sharding-column: task_id
  
  algorithm-expression: ds_${task_id % 2}
  
  key-generator-column-name: id
  
  props:
  
  sql.show: true
  
  注:
  
  这个配置只是针对分库,sharding jdbc 还支持读写分离,主从等模式,具体可以看文档sharding jdbc configuration
  
  faq
  
  只有网友的分享例子,没有文档
  
  sharding jdbc 的链接 shardingjdbc.io 访问是不可用的,在码云上找到了一份文档,地址是sharding-jdbc-doc
  
  spring boot的 health check 显示为down
  
  看了一下 DataSourceHealthIndicator 类的实现,要求 select 1 返回的大小为 1才认为数据库是健康的,但是经过分库之后,这个list size 应该了是数据库的数量,所以显示数据库为down。
  
  可以将db 个health check关掉,配置management.health.db.enabled=false 即可。
  
  不过这种情况下数据库如果挂掉的话注册中心是不知道的,需要定制一个自己的数据库检查类
  
  @Component
  
  public class CustomDataSourceHealthCheck extends AbstractHealthIndicator {
  
  private JdbcTemplate jdbcTemplate;
  
  private String databases;
  
  private int databaseCount;
  
  private String query www.tiaotiaoylzc.com= "SELECT 1 ";
  
  @PostConstruct
  
  public void init() {
  
  databaseCount = databases.split(",").length;
  
  }
  
  @Override
  
  protected void doHealthCheck(Health.Builder builder) throws Exception {
  
  try {
  
  List<Map<String, Object>> result = jdbcTemplate.queryForList(query);
  
  if (result.size(www.mytxyl1.com) == databaseCount) {
  
  builder.up();
  
  } else {
  
  builder.down();
  
  }
  
  } catch (Exception e) {
  
  builder.down(e);
  
  }
  
  }
  
  public JdbcTemplate getJdbcTemplate() {
  
  return jdbcTemplate;
  
  }
  
  @Autowired
  
  public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
  
  this.jdbcTemplate = jdbcTemplate;
  
  }
  
  public String getDatabases() {
  
  return databases;
  
  }
  
  @Value("${sharding.www.yongshi123.cn jdbc.datasource.names}")
  
  public void setDatabases(String databases) {
  
  this.databases = databases;
  
  }
  
  public int getDatabaseCount() {
  
  return databaseCount;
  
  }
  
  public void setDatabaseCount(int databaseCount) {
  
  this.databaseCount = www.zhenghongyule.com/ databaseCount;
  
  }
  
  public String getQuery(www.xtd912.com) {
  
  return query;
  
  }
  
  public void setQuery(String query) {
  
  this.query = query;
  
  }
  
  }

转载于:https://www.cnblogs.com/qwangxiao/p/10419659.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Leedcode][JAVA][第300题][最长上上子序列][动态规划][压缩空间]

【问题描述】[中等] 给定一个无序的整数数组&#xff0c;找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101]&#xff0c;它的长度是 4。 说明:可能会有多种最长上升子序列的组合&#xff0c;你只需要输出对应的…

Java学习笔记5-2——多线程

目录线程同步三大不安全案例一、不安全的买票过程二、不安全的取钱过程三、线程不安全的集合synchronized解决三大不安全案例一、解决不安全的买票过程二、解决不安全的取钱过程三、解决集合线程不安全死锁可重入锁&#xff08;ReentrantLock&#xff09;线程协作&#xff08;线…

html:(38):元素分类和块级元素

元素分类 在讲解CSS布局之前&#xff0c;我们需要提前知道一些知识&#xff0c;在CSS中&#xff0c;html中的标签元素大体被分为三种不同的类型&#xff1a;块状元素、内联元素(又叫行内元素)和内联块状元素。 常用的块状元素有&#xff1a; <div>、<p>、<h1…

Spyder kernel died 错误

Keras 2.2.4版本和 tensorflow1.2.1 版本不兼容导致的错误。降低Keras 为2.1.2版本 import keras 出现&#xff1a; Using TensorFlow backend. Kernel died, restarting conda uninstall kerasconda install keras2.1.2 转载于:https://www.cnblogs.com/maxiaodoubao/p/10421…

html:(39):块级元素和内联块级元素

元素分类--内联元素 在html中&#xff0c;<span>、<a>、<label>、 <strong> 和<em>就是典型的内联元素&#xff08;行内元素&#xff09;&#xff08;inline&#xff09;元素。当然块状元素也可以通过代码display:inline将元素设置为内联元素。…

HDU-6103

。 Kirinriki Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1204 Accepted Submission(s): 475 Problem Description We define the distance of two strings A and B with same length n is disA,B∑i0n−1|A…

Java学习笔记6——网络编程

目录基础知识查询IP地址端口通信协议TCP实现聊天TCP实现文件上传UDPUDP实现聊天UDP多线程在线咨询URL下载网络资源基础知识 请自行翻阅《计算机网络》 查询IP地址 import java.net.InetAddress; import java.net.UnknownHostException;public class TestInetAddress {public…

[剑指offer][JAVA]面试题第[15]题[二进制中1的个数][位运算]

【问题描述】[简单] 请实现一个函数&#xff0c;输入一个整数&#xff08;无符号数&#xff09;&#xff0c;输出该数二进制表示中 1 的个数。例如&#xff0c;把 9 表示成二进制是 1001&#xff0c;有 2 位是 1。因此&#xff0c;如果输入 9&#xff0c;则该函数输出 2。示例…

课外阅读(XHTML和XML简介)

课外阅读 一、XHTML简介 HTML从出现发展到今天&#xff0c;仍有些缺陷和不足。HTML的三个主要缺点如下。 &#xff08;1&#xff09;太简单。不能适应现在越来越多的网络设备和应用的需要&#xff0c;比如手机、PDA、信息家电都不能直接显示HTML&#xff1b; &#xff08;2…

Java学习笔记7-1——注解与反射

目录注解注解是啥内置注解元注解TargetRetentionDocumentedInherited自定义注解反射静态语言 和 动态语言Java 反射机制概述Java 反射机制提供的功能Java 反射优点和缺点反射相关的主要 API注解 注解是啥 注解&#xff08;Annotation&#xff09;是从 JDK 1.5 开始引入的新技…

C++11并发之std::thread

C11并发之std::thread知识链接&#xff1a;C11 并发之std::mutexC11 并发之std::atomic本文概要&#xff1a;1、成员类型和成员函数。2、std::thread 构造函数。3、异步。4、多线程传递参数。5、join、detach。6、获取CPU核心个数。7、CPP原子变量与线程安全。8、lambda与多线程…

极角排序的几种方法

转载自http://www.cnblogs.com/aiguona/p/7248311.html&#xff01;&#xff01; 关于极角排序&#xff1a; 在平面内取一个定点O&#xff0c;叫极点&#xff0c;引一条射线Ox&#xff0c;叫做极轴&#xff0c;再选定一个长度单位和角度的正方向&#xff08;通常取逆时针方向&a…

[剑指offer][JAVA]面试题第[16]题[数值的整数次方][位运算][二分法]

【问题描述】[中等] 实现函数double Power(double base, int exponent)&#xff0c;求base的exponent次方。不得使用库函数&#xff0c;同时不需要考虑大数问题。示例 1:输入: 2.00000, 10 输出: 1024.00000 示例 2:输入: 2.00000, -2 输出: 0.25000 解释: 2-2 1/22 1/4 0.…

玩转oracle 11g(50):rman备份脚本

D盘新建一个文件夹backup_file&#xff0c;里面新建一个文件夹logs 一个文件叫auto_full_one_rman.bat 修改这三处 set oracle_sidwiicare rman cmdfile D:/backup_file/level_full_one_rman.rman msglog D:/backup_file/logs/full_one_%date:~0,4%%date:~5,2%%date:~8,2%…

Java学习笔记7-2——注解与反射

目录理解 Class 类并获取 Class 实例Class类获取 Class 类的实例哪些类型可以有Class对象所有类型的Class对象从内存角度分析类加载【重点】类加载的过程什么时候会发生类的初始化类加载器获取运行时类的完整结构有了Class对象能做什么性能对比分析通过反射操作泛型通过反射操作…

python实战学习之matplotlib绘图续

学习完matplotlib绘图可以设置的属性&#xff0c;还需要学习一下除了折线图以外其他类型的图如直方图&#xff0c;条形图&#xff0c;散点图等&#xff0c;matplotlib还支持更多的图&#xff0c;具体细节可以参考官方文档&#xff1a;https://matplotlib.org/gallery/index.htm…

Spring MVC面试题

目录概述什么是Spring MVC&#xff1f;简单介绍下你对Spring MVC的理解&#xff1f;Spring MVC的优点核心组件Spring MVC的主要组件&#xff1f;什么是DispatcherServlet什么是Spring MVC框架的控制器&#xff1f;Spring MVC的控制器是不是单例模式,如果是,有什么问题,怎么解决…

5.应用服务器简介

应用服务器简介 Tomcat

NOI-砝码称重v2 多重背包 生成函数

描述 设有1g、2g、3g、5g、10g、20g的砝码各若干枚&#xff08;其总重<100,000&#xff09;&#xff0c;要求&#xff1a;计算用这些砝码能称出的不同重量的个数&#xff0c;但不包括一个砝码也不用的情况。 输入 一行&#xff0c;包括六个正整数a1,a2,a3,a4,a5,a6&#x…

vue-touchjs

支持vue2.0的面向指令的touch指令&#xff0c;基于touchjs&#xff08;原百度实现的移动端手势库&#xff09; vue-touchjs支持三种stopPropagation的方式&#xff1a; 1 .stop修饰符 2 事件handler里面调用stopPropagation方法 3 事件handler里面return false 支持的事件&…