李斌斌 发表于 2025-2-28 15:20:07

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

求解。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 : Failed to instantiate : 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 : 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);
    }
}

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,感谢
页: [1]
查看完整版本: 使用shardingsphere分库分表出现Column 'my_row_id' not found