3,项目分库分表实现-默认数据源配置

默认数据源配置

3.1 工程依赖准备

在stock_common工程导入sharding-jdbc依赖:

<!--引入shardingjdbc依赖-->
<dependency>
  <groupId>org.apache.shardingsphere</groupId>
  <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
</dependency>

3.2 配置默认数据源

系统管理相关的表数据量较少,无需分库分表,所以可作为sharding-jdbc的默认数据源;

在stock_backend工程配置application-sharding.properties:

# 数据源名称,多数据源以逗号分隔
# 注意事项:数据源名称如果存在多个单词,不要使用小驼峰,建议使用中划线间隔(不要使用下划线间隔符)
spring.shardingsphere.datasource.names=df
# 配置默认数据源
# 数据库连接池类名称
spring.shardingsphere.datasource.df.type=com.alibaba.druid.pool.DruidDataSource
# 数据库驱动类名
spring.shardingsphere.datasource.df.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据库 url 连接
spring.shardingsphere.datasource.df.url=jdbc:mysql://localhost:3306/stock_sys_db?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai
# 数据库用户名
spring.shardingsphere.datasource.df.username=root
# 数据库密码
spring.shardingsphere.datasource.df.password=root
# 配置默认数据源
spring.shardingsphere.sharding.default-data-source-name=df
# 是否开启 SQL 显示,默认值: false
spring.shardingsphere.props.sql.show=true

 主配置文件application.yml激活application-sharding.properties配置:

spring.profiles.active=sharding

同时在application.yml主配置文件中注释掉原有数据源信息!!

3.3 默认数据源效果测试

@SpringBootTest
public class TestSharding {
    @Autowired
    private SysUserMapper sysUserMapper;
    /**
     * 测试默认数据源
     */
    @Test
    public void testDefaultDs(){
        SysUser user = sysUserMapper.selectByPrimaryKey("1237365636208922624");
        System.out.println(user);
    }
}

对应的mapper.xml

  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from sys_user
        where  id = #{id,jdbcType=BIGINT} 
    </select>

测试时发现报异常错误:

所以在主配置文件中,配置bean允许被覆盖:

spring.main.allow-bean-definition-overriding=true

 最终效果:

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个简单的示例,用于创建 ShardingSphere 数据源配置对象并配置分库分表规则: ``` // 创建 ShardingSphere 数据源配置对象 ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); // 配置分库规则 shardingRuleConfig.setDefaultDataSourceName("ds0"); // 设置默认数据源名称 shardingRuleConfig.setTableRuleConfigs(Arrays.asList(getOrderTableRuleConfig())); // 设置分表规则 // 配置分表规则 private TableRuleConfiguration getOrderTableRuleConfig() { TableRuleConfiguration result = new TableRuleConfiguration("t_order", "ds${0..1}.t_order_${0..1}"); result.setDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("user_id", "ds${user_id % 2}")); result.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("order_id", "t_order_${order_id % 2}")); return result; } ``` 上述代码中,我们首先创建了一个 ShardingRuleConfiguration 对象,然后通过其 setDefaultDataSourceName 方法设置默认数据源名称为 ds0。接着,我们调用了 setTableRuleConfigs 方法来设置分表规则,该方法接收一个 TableRuleConfiguration 的列表作为参数。在 getOrderTableRuleConfig 方法中,我们创建了一个 TableRuleConfiguration 对象,用于设置 t_order 表的分表规则。其中,"ds${0..1}.t_order_${0..1}" 表示将 t_order 表水平分散到名为 ds0 和 ds1 的两个数据源中,并按 order_id 字段的奇偶性分别将数据路由到 t_order_0 和 t_order_1 两张表中。 最后,我们通过 setDatabaseShardingStrategyConfig 方法和 setTableShardingStrategyConfig 方法分别设置了数据库分片策略和表分片策略。这里我们使用了 InlineShardingStrategyConfiguration 类型的分片策略,并将 user_id 字段的值模 2 作为数据库分片键,将 order_id 字段的值模 2 作为表分片键。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码的翠花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值