记一次shardingJDBC主键生成策略没有生效问题

在SpringBoot应用中,使用ShardingJDBC遇到主键生成策略未生效的问题,导致DuplicateKeyException。尽管配置了SNOWFLAKE雪花算法,但 cid 仍插入0,而非自增ID。通过分析SQL发现,实体类中cid字段应使用LONG而非long类型,修复后问题解决,数据能正确分表并插入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pom.xml

         <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>

        <!--JDBC-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.6</version>
        </dependency>

        <!--sharding-->
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.1.1</version>
        </dependency>

        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
application.properties
#配置真实数据源
spring.shardingsphere.datasource.names=m1

#配置数据源
spring.shardingsphere.datasource.m1.type= com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m1.dr
在使用 `spring-cloud-starter-huawei-service-engine` 集成 `sharding-jdbc` 后,如果分库不生效,可能是由于以下几个原因: 1. **配置问题**: - 检查 `application.yml` 或 `application.properties` 文件中的 `sharding-jdbc` 配置是否正确。确保数据源、分片规则等配置项没有拼写错误,并且配置项的值是符合预期的。 2. **依赖冲突**: - 确保项目中没有其他版本的 `sharding-jdbc` 依赖,避免版本冲突。可以使用 `mvn dependency:tree` 命令查看依赖树,确保使用的是正确的版本。 3. **Bean 配置问题**: - 确保 `ShardingDataSource` Bean 被正确创建并注入到 Spring 容器中。可以通过在配置类中打印日志或使用调试工具来确认 Bean 是否被正确创建。 4. **数据源配置问题**: - 确认数据源的配置是否正确,包括数据库连接地址、用户名、密码等。确保数据库服务正常运行,并且能够通过配置的信息连接成功。 5. **分片键配置问题**: - 确认分片键的配置是否正确。分片键的选择和配置直接影响到数据的分片策略。确保分片键的选择是合理的,并且配置的分片策略能够正确地将数据分布到不同的数据库中。 以下是一个示例配置,供参考: ```yaml spring: shardingsphere: datasource: names: ds0, ds1 ds0: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db0 username: root password: password ds1: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db1 username: root password: password sharding: default-database-strategy: inline: sharding-column: id algorithm-expression: ds$->{id % 2} tables: user: actual-data-nodes: ds$->{0..1}.user table-strategy: inline: sharding-column: id algorithm-expression: user ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值