GreatSQL社区

搜索

使用shardingsphere分库分表出现Column 'my_row_id' not found

179 2 2025-2-28 15:20
求解。springboot + alibaba cloud,原使用mysql8,现在某个模块改为GreatSql(8.0.32),该模块使用了shardingsphere分库分表,启动时报错,关闭shardingsphere分库分表又正常启动,报错信息如下:



Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shardingDataSource' defined in class path resource [org/apache/shardingsphere/shardingjdbc/spring/boot/SpringBootConfiguration.class]: Failed to instantiate [javax.sql.DataSource]: Factory method 'shardingDataSource' threw exception with message: Column 'my_row_id' not found.
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:485)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1355)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1185)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:904)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:782)
        ... 85 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'shardingDataSource' threw exception with message: Column 'my_row_id' not found.
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:178)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:644)
        ... 99 common frames omitted
Caused by: java.sql.SQLException: Column 'my_row_id' not found.
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98)
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90)
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64)
        at com.mysql.cj.jdbc.result.ResultSetImpl.findColumn(ResultSetImpl.java:584)
        at com.zaxxer.hikari.pool.HikariProxyResultSet.findColumn(HikariProxyResultSet.java)
        at org.apache.shardingsphere.sql.parser.binder.metadata.column.ColumnMetaDataLoader.load(ColumnMetaDataLoader.java:77)
        at org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaDataLoader.load(SchemaMetaDataLoader.java:84)
        at org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaDataLoader.lambda$asyncLoad$0(SchemaMetaDataLoader.java:113)
        at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:842)



配置:
spring:
  shardingsphere:
    datasource: # 数据源
      master:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password:
        jdbcUrl: jdbc:mysql://192.168.10.128:3360/cbo_test?useUnicode=true&serverTimezone=GMT%2B8&autoReconnect=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&allowLoadLocalInfile=true&allowPublicKeyRetrieval=true
      names: master
    props:
      sql.show: true #是否开启SQL显示,默认值: false
      max.connections.size.per.query: 8 # 每个查询可以打开的最大连接数量,默认为1,此处可加快项目启动时shardingsphere加载数据库表元数据的速度
    sharding:
      tables:
        f_gprs_firewall_flow_5m:
          actual-data-nodes: master.f_gprs_firewall_flow_5m_$->{0..6}  #表分布情况 {数据源分支.表名}
          table-strategy:
            standard: # 数据库表分片策略
              shardingColumn: TIME_STAMP
              preciseAlgorithmClassName: com.etone.judge.common.config.sharding.DayPreciseShardingAlgorithm
              rangeAlgorithmClassName: com.etone.judge.common.config.sharding.DayRangeShardingAlgorithm
    enabled: true


@Configuration
@MapperScan(basePackages = "com.**.dao.sharding", sqlSessionTemplateRef = "shardingSqlSessionTemplate")
public class ShardingDataSourceConfig {

    @Bean(name = "shardingSqlSessionFactory")
    public SqlSessionFactory shardingSqlSessionFactory(@Qualifier("shardingDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/sharding/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "shardingTransactionManager")
    public DataSourceTransactionManager shardingTransactionManager(@Qualifier("shardingDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "shardingSqlSessionTemplate")
    public SqlSessionTemplate shardingSqlSessionTemplate(@Qualifier("shardingSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
全部回复(2)
yejr 2025-2-28 21:57:43
my_row_id这是个隐藏列,当表中没有显式创建主键列时,会自动创建,由参数sql_generate_invisible_primary_key控制,详情参考:https://mp.weixin.qq.com/s/4GBZqK-wYidcc_j1zKHrKw
李斌斌 2025-3-3 15:04:43
yejr 发表于 2025-2-28 21:57
my_row_id这是个隐藏列,当表中没有显式创建主键列时,会自动创建,由参数sql_generate_invisible_primary_ ...

新知识+1,感谢
李斌斌

2

主题

0

博客

9

贡献

新手上路

Rank: 1

积分
15

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2025-4-2 01:03 , Processed in 0.024289 second(s), 11 queries , Redis On.
快速回复 返回顶部 返回列表