IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> shardingJdbc 的 actual-data-nodes节点扩展 -> 正文阅读

[Java知识库]shardingJdbc 的 actual-data-nodes节点扩展

自己测试用的
配置类

package com.shardingjdbc.shardingjdbcstu.config;

import lombok.AllArgsConstructor;
import org.apache.shardingsphere.core.yaml.config.sharding.YamlTableRuleConfiguration;
import org.apache.shardingsphere.shardingjdbc.spring.boot.sharding.SpringBootShardingRuleConfigurationProperties;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Map;

/**
 * @author qb
 * @version 1.0
 * @since 2022/3/11 16:48
 */
@AllArgsConstructor
@Component
public class TestConfig {

    private final SpringBootShardingRuleConfigurationProperties shardingRuleConfigurationProperties;

    @PostConstruct
    public void init(){
        Map<String, YamlTableRuleConfiguration> tables =
                shardingRuleConfigurationProperties.getTables();
        YamlTableRuleConfiguration order = tables.get("order");
        String actualDataNodesTo = order.getActualDataNodes();
        //TODO: 可以查询数据库,根据数据关联表
        StringBuilder stringBuilder = new StringBuilder("ds0.order$->{[");
        stringBuilder.append("202101,202102");
        stringBuilder.append("]}");
        order.setActualDataNodes(stringBuilder.toString());
        String actualDataNodes = order.getActualDataNodes();
        System.out.println(actualDataNodesTo);
        System.out.println(actualDataNodes);
        System.out.println(tables);
    }

}


yml


spring:
  shardingsphere:
    # 参数配置,显示sql
    props:
      sql:
        show: true
    # 配置数据源
    datasource:
      # 给每个数据源取别名,下面的ds1,ds1任意取名字
      names: ds0
      # 给master-ds1每个数据源配置数据库连接信息
      ds0:
        #配置druid数据源
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/ksd_order_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
        maxPoolSize: 100
        minPoolSize: 5
      # 配置ds1-slave
#      ds1:
#        type: com.alibaba.druid.pool.DruidDataSource
#        driver-class-name: com.mysql.cj.jdbc.Driver
#        url: jdbc:mysql://192.168.100.110:3306/ksd_order_db?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT
#        username: root
#        password: 123456
#        maxPoolSize: 100
#        minPoolSize: 5
    # 配置默认数据源ds0
    sharding:
      # 默认数据源,主要用于写,注意一定要配置读写分离 ,注意:如果不配置,
      #那么就会把三个节点都当做从slave节点,新增,修改和删除会出错。
      default-data-source-name: ds0
      # 配置分表的规则
      tables:
        # ksd_order 逻辑表名
        order:
          # 数据节点:数据源$->{0..N}.逻辑表名$->{0..N}
          actual-data-nodes: ds0.order$->{0..1}  #只分表不分库
          # 拆分库策略,也就是什么样子的数据放入放到哪个数据库中。
#          database-strategy:
#            standard:
#              shardingColumn: tenantId  # 分片字段(分片键)
#              preciseAlgorithmClassName: com.shardingjdbc.shardingjdbcstu.algorithm.TenantShardingAlgorithm
#          # 拆分库策略,也就是什么样子的数据放入放到哪个数据库中。
#          database-strategy:
#            inline:  #inline 行表达时分片策略(核心,必须要掌握)
#              sharding-column: age    # 分片字段(分片键)
#              algorithm-expression: ds$->{age % 2} # 分片算法表达式
          # 拆分表策略,也就是什么样子的数据放入放到哪个数据表中。

          table-strategy:
            standard:
              shardingColumn:  userid #tenantId  # 分片字段(分片键)
              preciseAlgorithmClassName: com.shardingjdbc.shardingjdbcstu.algorithm.TenantShardingAlgorithm

#需求:用户变1000W的数据,对用户的数据进行分表和分库的操作,根据年龄单数储存在user1 偶数储存在user0
#同时age单数

分表节点配置的事0-1
在这里插入图片描述
test

    @Select("select * from order where userid = #{userid} limit #{pageNo},#{pageSize}")
    List<Order> findOrders(
            @Param("userid") Long userid,
            @Param("pageNo") Integer pageNo,
            @Param("pageSize") Integer pageSize
    );



    @Select("select * from order limit #{pageNo},#{pageSize}")
    List<Order> findOrdersTo(
            @Param("pageNo") Integer pageNo,
            @Param("pageSize") Integer pageSize
    );

在这里插入图片描述
执行结果
在这里插入图片描述
最后一次查询应该是order0与order1,但是并没有这样执行,而是根据自己config的配置来的

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:18:07  更:2022-03-12 17:20:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:52:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码