配置文件相关信息:

#开发
server.port=7200
spring.application.name=BtspIsmpServiceOrderDev eureka.client.serviceUrl.defaultZone=http://127.0.0.1:7761/eureka/
#表示eureka client间隔多久去拉取服务器注册信息,默认为30秒
eureka.client.registry-fetch-interval-seconds=10
#eureka客户端需要多长时间发送心跳给eureka服务器,表明它仍然活着,默认30秒
eureka.instance.lease-renewal-interval-in-seconds=5
#eureka服务器在接受到实力的最后一次发出的心跳后,需要等待多久才可以将此实例删除
eureka.instance.lease-expiration-duration-in-seconds=30
eureka.instance.health-check-url-path=/actuator/health
eureka.instance.hostname=${spring.cloud.client.ip-address}
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
eureka.instance.prefer-ip-address=true management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=ALWAYS #log
logging.config=classpath:spring-logback.xml
logging.path=logs/btspismp/serviceorder #出现错误时, 直接抛出异常
spring.mvc.throw-com.eshore.exception-if-no-handler-found=true
spring.main.allow-bean-definition-overriding=true #文件上传大小限制,默认使用tomcat的上传文件大小限制,即1MB
spring.multipart.maxFileSize=10
spring.multipart.maxRequestSize=10
# 数据库访问配置 sharding.jdbc.datasource.names=btspismp
sharding.jdbc.datasource.btspismp.driver-class-name=net.sf.log4jdbc.DriverSpy
sharding.jdbc.datasource.btspismp.jdbc-url=jdbc:log4jdbc:mysql://192.168.115.31:3306/btspIsmp?characterEncoding=UTF-8&autoReconnect=true&useUnicode=true&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&useSSL=false
sharding.jdbc.datasource.btspismp.username=btspIsmp
sharding.jdbc.datasource.btspismp.password=iSMp123#@!
#所有数据节点
sharding.jdbc.config.sharding.tables.T_TMP_TEST.actual-data-nodes=btspismp.T_TMP_TEST_1,btspismp.T_TMP_TEST_2
#根据这个列分表
#sharding.jdbc.config.sharding.tables.T_TMP_TEST.table-strategy.inline.sharding-column=age
#sharding.jdbc.config.sharding.tables.T_TMP_TEST.table-strategy.inline.algorithm-expression=T_TMP_TEST_$->{age %3}
#分片列
sharding.jdbc.config.sharding.tables.T_TMP_TEST.table-strategy.standard.sharding-column=age
#IN,=
sharding.jdbc.config.sharding.tables.T_TMP_TEST.table-strategy.standard.precise-algorithm-class-name=com.eshore.ismp.config.TestTableShardingConfig
#BETWEEN
#sharding.jdbc.config.sharding.tables.T_TMP_TEST.table-strategy.standard.range-algorithm-class-name=com.eshore.ismp.config.OrderAcceptTableShardingConfig
#工单分表
sharding.jdbc.config.sharding.tables.T_ORDER_ACCEPT.actual-data-nodes=btspismp.T_ORDER_ACCEPT,btspismp.T_ORDER_ACCEPT_CRBT
sharding.jdbc.config.sharding.tables.T_ORDER_ACCEPT.table-strategy.standard.sharding-column=k_785_product_type
sharding.jdbc.config.sharding.tables.T_ORDER_ACCEPT.table-strategy.standard.precise-algorithm-class-name=com.eshore.ismp.config.OrderAcceptTableShardingConfig sharding.jdbc.datasource.btspismp.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=DatebookHikariCP
spring.datasource.hikari.max-lifetime=30000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.leak-detection-threshold=1000 #JPA
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
#spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true #缓存配置redis
spring.cache.type=redis
spring.data.redis.repositories.enabled=false # Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=192.168.115.31
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=-1ms
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=5000ms

  

分表算法:

package com.eshore.ismp.config;

import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component; import groovy.util.logging.Slf4j;
import io.shardingsphere.api.algorithm.sharding.PreciseShardingValue;
import io.shardingsphere.api.algorithm.sharding.RangeShardingValue;
import io.shardingsphere.api.algorithm.sharding.standard.PreciseShardingAlgorithm;
import io.shardingsphere.api.algorithm.sharding.standard.RangeShardingAlgorithm; @Component
public class OrderAcceptTableShardingConfig implements PreciseShardingAlgorithm<String>{
private Logger log=LoggerFactory.getLogger(this.getClass()); @Override
public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<String> shardingValue) {
for(String tableName:availableTargetNames) {
log.info("=====tableName:"+tableName);
}
log.info("=====shardingValue:"+shardingValue);
log.info("====logic table name:"+shardingValue.getLogicTableName());
log.info("====column name:"+shardingValue.getColumnName());
log.info("====sharding value String:"+shardingValue.toString());
int start=shardingValue.toString().indexOf("value=");
int end=shardingValue.toString().indexOf(")");
log.info("length"+shardingValue.toString().length()+",start:"+start+",end:"+end);
log.info("Value:"+shardingValue.toString().substring(start+6,end));
String valueString=shardingValue.toString().substring(start+6,end);
if(valueString.contentEquals("SWCL")) {
return "T_ORDER_ACCEPT_CRBT";
}else {
return "T_ORDER_ACCEPT";
}
} }

  

测试类:

@RunWith(SpringRunner.class)
@SpringBootTest
public class BaseTest { @Autowired
private ITbTestService tbTestService;
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private OrderAcceptSpsAttrJdbcDao jdbcDao;
@Autowired
private IOrderAcceptSpsAttrValueService orderSpsAttrValService;
@Autowired
private OrderAcceptStatusChangRecordJdbcDao orderAcceptStatusChangRecordJdbcDao;
@Autowired
private IOrderAcceptService orderAcceptService;
@Autowired
private ITestService testService; @Test
public void insertOrder() {
OrderAccept accept=new OrderAccept();
accept.setK785ProductType("SWCL");
accept.setCreateTime(new Date());
orderAcceptService.save(accept);
accept=new OrderAccept();
accept.setK785ProductType("1");
accept.setCreateTime(new Date());
orderAcceptService.save(accept);
System.out.println("============END=========");
}
@Test
public void insertTest() {
TestEntity entity=new TestEntity();
entity.setAge(1);
testService.save(entity);
entity=new TestEntity();
entity.setAge(2);
testService.save(entity);
System.out.println("============END=========");
}
}

  

POM.XML:

 <dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

这个版本没分表的数据分页有问题,怎么分页都是limit从0开始,不建议使用

其他的具体DAO和service和其他的一样。

springboot with appache sharding 3.1 单库分表的更多相关文章

  1. SpringBoot+Mybatis-Plus整合Sharding-JDBC5.1.1实现单库分表【全网最新】

    一.前言 小编最近一直在研究关于分库分表的东西,前几天docker安装了mycat实现了分库分表,但是都在说mycat的bug很多.很多人还是倾向于shardingsphere,其实他是一个全家桶,有 ...

  2. Sharding-JDBC实现水平拆分-单库分表

    参考资料:猿天地   https://mp.weixin.qq.com/s/901rNhc4WhLCQ023zujRVQ 作者:尹吉欢 当单表的数量急剧上升,超过了1千万以上,这个时候就要对表进行水平 ...

  3. Sharding-JDBC:单库分表的实现

    剧情回顾 前面,我们一共学习了读写分离,垂直拆分,垂直拆分+读写分离.对应的文章分别如下: Sharding-JDBC:查询量大如何优化? Sharding-JDBC:垂直拆分怎么做? 通过上面的优化 ...

  4. mycat 单库分表

    上次把mycat的读写分离搞定了,这次试下单库分表,顾名思义就是在一个库里把一个表拆分为多个 需要配置的配置文件为 schema.xml 配置内容如下 <!DOCTYPE mycat:schem ...

  5. Spring Boot中整合Sharding-JDBC单库分表示例

    本文是Sharding-JDBC采用Spring Boot Starter方式配置第二篇,第一篇是读写分离讲解,请参考:<Spring Boot中整合Sharding-JDBC读写分离示例> ...

  6. mycat 单库分表实践

    参考 https://blog.csdn.net/sq2006hjp/article/details/78732227 Mycat采用的水平拆分,不管是分库还是分表,都是水平拆分的.分库是指,把一个大 ...

  7. mycat使用之MySQL单库分表及均分数据

    转载自 https://blog.csdn.net/smilefyx/article/details/72810531 1.首先在Mycat官网下载安装包,这里就以最新的1.6版本为例,下载地址为:  ...

  8. Sharding JDBC整合SpringBoot 2.x 和 MyBatis Plus 进行分库分表

    Sharding JDBC整合SpringBoot 2.x 和 MyBatis Plus 进行分库分表 交易所流水表的单表数据量已经过亿,选用Sharding-JDBC进行分库分表.MyBatis-P ...

  9. MySQL多数据源笔记3-分库分表理论和各种中间件

    一.使用中间件的好处 使用中间件对于主读写分离新增一个从数据库节点来说,可以不用修改代码,达到新增节点数据库而不影响到代码的修改.因为如果不用中间件,那么在代码中自己是先读写分离,如果新增节点, 你进 ...

随机推荐

  1. String对象及正则表达式

    1,String和string还是有区别的,一个就是用双引号或单引号包括起来的数据就是字符串,另一个本质是数组多个字符串组成的只读字符数组: 2,你说string他是数组吧,他和数组还是有点区别的,他 ...

  2. C++入门到理解阶段二基础篇(9)——C++结构体

    1.概述 前面我们已经了解到c++内置了常用的数据类型,比如int.long.double等,但是如果我们要定义一个学生这样的数据类型,c++是没有的,此时就要用到结构体,换言之通过结构体可以帮我们定 ...

  3. Linux下离线安装python项目的依赖包

    第一步新建一个site-packages文件夹,把python项目有需要的依赖包名称导出到site-packages下的requirements.txt中 $ pip3 freeze > req ...

  4. NFS文件系统及搭建NFS共享服务

    一.什么是文件系统? 文件系统是对一个存储设备上的数据和元数据进行组织的一种机制.文件系统是在一个磁盘(包括光盘.软盘.闪盘及其它存储设备)或分区上组织文件方式方法,常见文件系统如ext2.ext3. ...

  5. C#_服务器EXCEL模板文件导出

    A-1:EXCEL模板导出 非常简单,将EXCEL模板上传到项目中后,将其浏览URL保存下来(excelUrl),然后: window.location.href="http://local ...

  6. javaWeb核心技术第十一篇之Listener

    监听器:所谓的监听器是指对整个WEB环境的监听,当被监视的对象发生改变时,立即调用相应的方法进行处理. 监听术语: 事件源:被监听的对象. 监听器对象:监听事件源的对象 注册或绑定:1和2结合的过程 ...

  7. Cesium专栏-样条插值(平滑路径、飞行动画,源码下载)

    Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...

  8. JAVA微信企业付款到零钱(十分钟搞定),附完整DEMO下载

    最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信企业付款到零钱的开发过程, 主要就是按规则封装好请求参数调用微信接口,涉及一些签名校验: A.接口流程 1. 获取用 ...

  9. C#(1)运用C#实现一键从Word文档转换TXT文本的功能

    有想直接从Word转TXT文本的可以看看,懒得复制粘贴的也可以使用下,方便而快捷!! 首先打开vs2012创建一个简单的form窗体: 里面主要的就是一个存放Word文档的button和一个执行的bu ...

  10. cell右侧的状态(accessoryType)

    Cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; Cell.accessoryType = UITableViewCe ...