写点什么

MySQL 启动 apollo-adminservice 报错 Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'serverconf0_.Cluster' in 'field list

作者:Andy
  • 2023-05-28
    北京
  • 本文字数:2625 字

    阅读完需:约 9 分钟

一、问题描述


在导入的 Apollo 配置开源项目中,启动主程序 ApolloApplication ,报出了一下错误:


Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2023-05-28 16:09:04.559 ERROR 12052 --- [           main] o.s.boot.SpringApplication               : Application run failed
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) ......
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:142) ......
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'configServiceAutoConfiguration' defined in file [C:\Projects\apollo\apollo-configservice\target\classes\com\ctrip\framework\apollo\configservice\ConfigServiceAutoConfiguration.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bizConfig': Invocation of init method failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ......
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bizConfig': Invocation of init method failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ......
Caused by: org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:259) ......
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63) ......
Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'serverconf0_.Cluster' in 'field list' at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ......
复制代码


二、分析原因


Idea 打印了多个 caused by,因为最新的一个是一切所有相关问题的根源,因此,可以从最新的一个 Caused by 下手,也就是:


Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'serverconf0_.Cluster' in 'field list'
复制代码


这个错误说明 serverconf0_.Cluster 的列不存在。


这里有两个库 apolloportaldb 和 apolloconfigdb,由于只是用到了 apollo-adminservice。因此,可以去 apollo-adminservice 涉及的数据库脚本文件 apolloconfigdb.sql,查看是否该文件内容中有遗漏。


发现只有 ServerConfig 数据库表的字段里有 Cluster,其他的表并没有涉及。


DROP TABLE IF EXISTS `ServerConfig`;
CREATE TABLE `ServerConfig` ( `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id', `Key` varchar(64) NOT NULL DEFAULT 'default' COMMENT '配置项Key', `Cluster` varchar(32) NOT NULL DEFAULT 'default' COMMENT '配置对应的集群,default为不针对特定的集群', `Value` varchar(2048) NOT NULL DEFAULT 'default' COMMENT '配置项值', `Comment` varchar(1024) DEFAULT '' COMMENT '注释', `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal', `DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀', `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀', `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间', PRIMARY KEY (`Id`), KEY `IX_Key` (`Key`), KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配置服务自身配置';
复制代码


这下就有些奇怪了,再搜索了一下,根本没有这个表 serverconf0_ 存在。


暂时想不到原因所在,那么,就只好看看配置启动的参数,数据库是哪个,看看那个库里到底有没有对应的表和字段。



这才发现,配置的数据库不正确,使用的是 ApolloPortalDB 。那么,不管怎么样,程序肯定无法在这个 ApolloPortalDB 库中找到 ApolloConfigDB 库中的表和字段的。


因此,就先把数据库更改为正确的,再看下运行情况。


三、验证效果


经过以上分析之后,再重新启动主程序 ApolloApplication ,并未报错,浏览器也能够正确访问 localhost:8080 地址,这下说明可以了。



四、多个 Caused by


如果在 Idea 中,对于某个异常,打印出多个 Caused by,那么,选择,最新的那个即可。


这也符合程序逻辑,因为,程序始终是顺序执行的,最新的那个才是问题的根源。


用户头像

Andy

关注

强准备+强信念+强执行 2019-11-21 加入

以前是T型人才,当下是π型人才,未来是梳子型人才

评论

发布
暂无评论
MySQL 启动apollo-adminservice 报错 Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'serverconf0_.Cluster' in 'field list_Andy_InfoQ写作社区