使用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);
}
}
my_row_id这是个隐藏列,当表中没有显式创建主键列时,会自动创建,由参数sql_generate_invisible_primary_key控制,详情参考:https://mp.weixin.qq.com/s/4GBZqK-wYidcc_j1zKHrKw yejr 发表于 2025-2-28 21:57
my_row_id这是个隐藏列,当表中没有显式创建主键列时,会自动创建,由参数sql_generate_invisible_primary_ ...
新知识+1,感谢
页:
[1]