若依集成分库分表(一)

news/2024/11/29 0:13:05/

1.本次需求为同库分表

1.1 引入pom依赖

<!-- sharding-jdbc分库分表 -->
<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-core</artifactId><version>4.1.1</version>
</dependency>

1.2 DruidConfig修改

1.3 新增ShardingDataSourceConfig

package com.ruoyi.framework.config;import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.shardingsphere.api.config.sharding.KeyGeneratorConfiguration;
import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration;
import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration;
import org.apache.shardingsphere.api.config.sharding.strategy.InlineShardingStrategyConfiguration;
import org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.ruoyi.framework.config.properties.DruidProperties;/*** sharding 配置信息* * @author ruoyi*/
@Configuration
public class ShardingDataSourceConfig
{@Bean@ConfigurationProperties("spring.datasource.druid.master")public DataSource masterDataSource(DruidProperties druidProperties){DruidDataSource dataSource = DruidDataSourceBuilder.create().build();return druidProperties.dataSource(dataSource);}/*@Bean@ConfigurationProperties("spring.datasource.druid.order1")@ConditionalOnProperty(prefix = "spring.datasource.druid.order1", name = "enabled", havingValue = "true")public DataSource order1DataSource(DruidProperties druidProperties){DruidDataSource dataSource = DruidDataSourceBuilder.create().build();return druidProperties.dataSource(dataSource);}@Bean@ConfigurationProperties("spring.datasource.druid.order2")@ConditionalOnProperty(prefix = "spring.datasource.druid.order2", name = "enabled", havingValue = "true")public DataSource order2DataSource(DruidProperties druidProperties){DruidDataSource dataSource = DruidDataSourceBuilder.create().build();return druidProperties.dataSource(dataSource);}*/@Bean(name = "shardingDataSource")public DataSource shardingDataSource(@Qualifier("masterDataSource") DataSource masterDataSource) throws SQLException{Map<String, DataSource> dataSourceMap = new HashMap<>();dataSourceMap.put("master", masterDataSource);// sys_order 表规则配置TableRuleConfiguration orderTableRuleConfig = new TableRuleConfiguration("oct_hr_user_clock", "master.oct_hr_user_clock_$->{0..4}");// 配置分库策略 //orderTableRuleConfig.setDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("user_id", "order$->{user_id % 2 + 1}"));// 配置分表策略orderTableRuleConfig.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("id", "oct_hr_user_clock_$->{id % 5}"));// 分布式主键orderTableRuleConfig.setKeyGeneratorConfig(new KeyGeneratorConfiguration("SNOWFLAKE", "id"));// 配置分片规则ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();shardingRuleConfig.getTableRuleConfigs().add(orderTableRuleConfig);// 获取数据源对象DataSource dataSource = ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, getProperties());return dataSource;}/*** 系统参数配置*/private Properties getProperties(){Properties shardingProperties = new Properties();shardingProperties.put("sql.show", true);return shardingProperties;}
}

 1.4 application.yml配置

# 数据源配置
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.cj.jdbc.Driverdruid:# 主库数据源master:url: jdbc:mysql://192.168.1.86:3306/octv_hr_prod?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=trueusername: rootpassword: root# 初始连接数initialSize: 5# 最小连接池数量minIdle: 10# 最大连接池数量maxActive: 20# 配置获取连接等待超时的时间maxWait: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒minEvictableIdleTimeMillis: 300000# 配置一个连接在池中最大生存的时间,单位是毫秒maxEvictableIdleTimeMillis: 900000# 配置检测连接是否有效validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsewebStatFilter: enabled: truestatViewServlet:enabled: true# 设置白名单,不填则允许所有访问allow:url-pattern: /druid/*# 控制台管理用户名和密码login-username: login-password: filter:stat:enabled: true# 慢SQL记录log-slow-sql: trueslow-sql-millis: 1000merge-sql: truewall:config:multi-statement-allow: true

1.5在分表的方法上加上切换数据源注解

1.6测试

前提:

1)手动创建表oct_hr_user_clock_0到oct_hr_user_clock_4

 

 


http://www.ppmy.cn/news/292761.html

相关文章

Python入门教程+项目实战-13.3节-集合的快速查找

目录 13.3.1 键的输出顺序 13.4.2 键的数据类型 13.4.3 集合的快速查找 13.4.4 知识要点 13.4.5 系统学习python 13.3.1 键的输出顺序 集合类型的底层实现基于哈希表&#xff0c;键的输出顺序取决于键在哈希表中的存储顺序。 对哈希表结构不是很熟悉的同学&#xff0c;可…

为啥无线随身设备显示无服务器,随身WiFi怎么用_移动wifi怎么用【图文】-太平洋IT百科...

随身wifi怎么用 随身wifi就是可以随身携带的wifi信号&#xff0c;通过无线移动路由器和无线运营商提供的无线上网芯片(sim卡)&#xff0c;组成一个可以移动的wifi接收发射信号源。随身wifi怎么用&#xff1f;通过此套设备&#xff0c;可以连接到2.5G、3G或者4G网络上&#xff0…

手机做web服务器 无限流量,无限流量卡和手机随身无线wifi,你选择哪一个?

随着科技水平的发展&#xff0c;人们的网络需求日益倍增。现在市场上最多的产品是无限流量卡和手机随身无线wifi。而运营商推出的流量卡套餐又各不相同&#xff0c;有的人又有选择恐惧症&#xff0c;进退两难啊&#xff0c;但是有一点小编是知道的&#xff0c;低消费、又实惠、…

如何利用wifi盈利

一只小蝴蝶的翅膀挥动&#xff0c;可能即将扇起一场狂野飓风。这只蝴蝶&#xff0c;就是WiFi无线网络接入。目前&#xff0c;BAT三大巨头已经在这领域争来斗去&#xff0c;百度推出了小度WiFi&#xff0c;阿里与树熊合作&#xff0c;360也发布了随身WiFi。但上述对无线上网入口…

WiFi万能钥匙 v4.3.50

类型&#xff1a;系统工具 版本&#xff1a;v4.3.50 大小&#xff1a;27.5M 更新&#xff1a;2019/2/28 语言&#xff1a;简体 等级&#xff1a; 平台&#xff1a;安卓, 4.0以上 厂商&#xff1a;WiFi万能钥匙 下载地址&#xff1a; WiFi万能钥匙 v4.3.50&#xff08;1&#xf…

Windows 7/8 创建WIFI热点

问题描述&#xff1a;很多人&#xff08;特别是中国的大学生&#xff09;都拥有一台联网的笔记本电脑&#xff0c;而手机使用的却是电信运营商提供的限制数量和速度的GPRS。 很多人不敢想象&#xff1a;联网的笔记本电脑能够将其流量以WiFi的形式共享出来供其它设备——例如Pad…

机上WiFi浪潮席卷而至

现代人已经越来越离不开智能手机和离不开上网了&#xff0c;在酒店、咖啡店、机场和其他公共场所&#xff0c;提供免费WiFi似乎已经成为基本服务。但如何度过飞机上漫长的时间曾经是众多“空中飞人”心中的痛&#xff0c;但随着无线通信技术的快速发展&#xff0c;机上WiFi服务…

aardio - 【库】authorize 软件授权管理

使用授权码或授权文件进行校验&#xff0c;以确定程序代码是否需要向下执行。 库下载地址&#xff1a; http://chengxu.online → aardio资源下载 → authorize.rar 示例执行效果&#xff1a; import win.ui; /*DSG{{*/ var winform win.form(text"aardio form"…