有一个提供数据服务的Aservice连接的A库A表;A服务启动正常。B服务引用了Aservice的api;B服务连接另外的数据库B。在启动B服务时就会报B库中找不到A表的错误(B库中确实无A表)。
1、B服务中pom设置如下
<dependency> <groupId>io.jboot.admin</groupId> <artifactId>A-service-api</artifactId> <version>1.0</version> </dependency>
2、如果B服务不依赖不引用A服务,则两个服务都能正常使用
具体报错如下:
2018-08-02 08:07:17.228 [INFO ] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
2018-08-02 08:07:17.523 [INFO ] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
2018-08-02 08:07:17.757 [ERROR] com.jfinal.core.Config - Plugin start error: com.jfinal.plugin.activerecord.ActiveRecordPlugin.
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'jboot-admin.usersinfo' doesn't exist
com.jfinal.plugin.activerecord.ActiveRecordException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'jboot-admin.usersinfo' doesn't exist
at com.jfinal.plugin.activerecord.TableBuilder.build(TableBuilder.java:55)
at com.jfinal.plugin.activerecord.ActiveRecordPlugin.start(ActiveRecordPlugin.java:226)
at com.jfinal.core.Config.startPlugins(Config.java:128)
at com.jfinal.core.Config.configPluginWithOrder(Config.java:71)
at com.jfinal.core.Config.configJFinal(Config.java:56)
at com.jfinal.core.JFinal.init(JFinal.java:63)
at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:111)
at io.undertow.servlet.core.ManagedFilter.createFilter(ManagedFilter.java:80)
at io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:590)
at io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:555)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:597)
at io.jboot.server.undertow.UnderTowServer.initUndertowServer(UnderTowServer.java:104)
at io.jboot.server.undertow.UnderTowServer.start(UnderTowServer.java:192)
at io.jboot.Jboot.startServer(Jboot.java:167)
at io.jboot.Jboot.start(Jboot.java:148)
at io.jboot.Jboot.run(Jboot.java:91)
at QuartzServiceStart.main(QuartzServiceStart.java:5)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'jboot-admin.usersinfo' doesn't exist
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2444)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1381)
at com.zaxxer.hikari.pool.ProxyStatement.executeQuery(ProxyStatement.java:111)
at com.zaxxer.hikari.pool.HikariProxyStatement.executeQuery(HikariProxyStatement.java)
at com.jfinal.plugin.activerecord.TableBuilder.doBuild(TableBuilder.java:71)
at com.jfinal.plugin.activerecord.TableBuilder.build(TableBuilder.java:47)
... 19 common frames omitted
Can not create Table object, maybe the table UsersInfo is not exists.
java.lang.RuntimeException: Plugin start error: com.jfinal.plugin.activerecord.ActiveRecordPlugin.
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'jboot-admin.usersinfo' doesn't exist
at com.jfinal.core.Config.startPlugins(Config.java:137)
at com.jfinal.core.Config.configPluginWithOrder(Config.java:71)
at com.jfinal.core.Config.configJFinal(Config.java:56)
at com.jfinal.core.JFinal.init(JFinal.java:63)
at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:111)
at io.undertow.servlet.core.ManagedFilter.createFilter(ManagedFilter.java:80)
at io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:590)
at io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:555)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:597)
at io.jboot.server.undertow.UnderTowServer.initUndertowServer(UnderTowServer.java:104)
at io.jboot.server.undertow.UnderTowServer.start(UnderTowServer.java:192)
at io.jboot.Jboot.startServer(Jboot.java:167)
at io.jboot.Jboot.start(Jboot.java:148)
at io.jboot.Jboot.run(Jboot.java:91)
at QuartzServiceStart.main(QuartzServiceStart.java:5)
Caused by: com.jfinal.plugin.activerecord.ActiveRecordException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'jboot-admin.usersinfo' doesn't exist
at com.jfinal.plugin.activerecord.TableBuilder.build(TableBuilder.java:55)
at com.jfinal.plugin.activerecord.ActiveRecordPlugin.start(ActiveRecordPlugin.java:226)
at com.jfinal.core.Config.startPlugins(Config.java:128)
... 17 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'jboot-admin.usersinfo' doesn't exist
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2444)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1381)
at com.zaxxer.hikari.pool.ProxyStatement.executeQuery(ProxyStatement.java:111)
at com.zaxxer.hikari.pool.HikariProxyStatement.executeQuery(HikariProxyStatement.java)
at com.jfinal.plugin.activerecord.TableBuilder.doBuild(TableBuilder.java:71)
at com.jfinal.plugin.activerecord.TableBuilder.build(TableBuilder.java:47)
... 19 more
八月 02, 2018 8:07:17 上午 io.jboot.server.undertow.UnderTowServer error
严重: can not start undertow with port:9102
java.lang.IllegalArgumentException: UT000008: Handler cannot be null
at io.undertow.Handlers.handlerNotNull(Handlers.java:582)
at io.undertow.server.handlers.PathHandler.addPrefixPath(PathHandler.java:131)
at io.jboot.server.undertow.UnderTowServer.initUndertowServer(UnderTowServer.java:113)
at io.jboot.server.undertow.UnderTowServer.start(UnderTowServer.java:192)
at io.jboot.Jboot.startServer(Jboot.java:167)
at io.jboot.Jboot.start(Jboot.java:148)
at io.jboot.Jboot.run(Jboot.java:91)
at QuartzServiceStart.main(QuartzServiceStart.java:5)
jboot start fail!!!
3、两个service的jboot.properties基本一样,除了数据库连接参数。都参照jboot-admin进行的配置
#---------------------------------------------------------------------------------# # Generator Config # jboot.admin.serviceimpl.ge.entity.package: the entity package; # jboot.admin.serviceimpl.ge.servicepackage:service 接口 package # jboot.admin.serviceimpl.ge.serviceimplpackage:service 实现类 package # jboot.admin.serviceimpl.ge.localdev.removedtablenameprefixes: 需要移除表名前缀只留下后部分,多个逗号隔开 # jboot.admin.serviceimpl.ge.localdev.excludedtable: 生成时不包含表名列表,多个逗号隔开 # jboot.admin.serviceimpl.ge.excludedtableprefixes: 生成时不包含表前缀,多个逗号隔开 #---------------------------------------------------------------------------------# jboot.admin.serviceimpl.ge.modelpackage=io.jboot.quartz.service.entity.model jboot.admin.serviceimpl.ge.servicepackage=io.jboot.quartz.service.api jboot.admin.serviceimpl.ge.serviceimplpackage=io.jboot.quartz.service.provider jboot.admin.serviceimpl.ge.removedtablenameprefixes=sys_ jboot.admin.serviceimpl.ge.excludedtable= jboot.admin.serviceimpl.ge.excludedtableprefixes=temp_,v_ #---------------------------------------------------------------------------------# #jboot的开发模式 jboot.mode=dev jboot.bannerEnable=true jboot.bannerFile=banner.txt jboot.cron4jEnable=false jboot.cron4jFile=cron4j.properties #type default undertow (support:undertow) jboot.server.type=undertow jboot.server.host= jboot.server.port=9102 jboot.server.contextPath= #---------------------------------------------------------------------------------# #---------------------------------------------------------------------------------# #jboot.hystrix jboot.hystrix.url=/hystrix.stream jboot.hystrix.propertie jboot.hystrix.closeAutoHystrix=false #---------------------------------------------------------------------------------# #---------------------------------------------------------------------------------# #jboot.metrics jboot.metric.url=/metric.html jboot.metric.reporter=console #---------------------------------------------------------------------------------# #---------------------------------------------------------------------------------# jboot.tracing.type=zipkin jboot.tracing.serviceName=quartz-service jboot.tracing.url=http://127.0.0.1:9411/api/v2/spans #---------------------------------------------------------------------------------# #---------------------------------------------------------------------------------# jboot.datasource.type=mysql jboot.datasource.url=jdbc:mysql://127.0.0.1:3306/jboot-admin?characterEncoding=utf8&useSSL=true jboot.datasource.user=root jboot.datasource.password=ming768 jboot.datasource.maximumPoolSize = 5 jboot.datasource.sqlTemplatePath= jboot.datasource.sqlTemplate= jboot.datasource.table= jboot.datasource.excludeTable= #---------------------------------------------------------------------------------# #---------------------------------------------------------------------------------# jboot.model.cacheEnable=true #1小时 ,单位:秒 jboot.model.cacheTime=3600 jboot.model.scan jboot.model.hystrixEnable=true #1000 * 30; //单位:毫秒 jboot.model.hystrixTimeout=30000 #---------------------------------------------------------------------------------# #---------------------------------------------------------------------------------# #type default motan (support:local,motan,dubbo) #use motan + consul jboot.rpc.type = motan jboot.rpc.registryType = consul jboot.rpc.registryAddress = 127.0.0.1:8500 #use dubbo + zookeeper #jboot.rpc.type = dubbo #jboot.rpc.registryType = zookeeper #jboot.rpc.registryAddress = 127.0.0.1:2181 #jboot.rpc.dubbo.qosPort = 33333; jboot.rpc.requestTimeOut=5000 jboot.rpc.callMode=registry jboot.rpc.registryName=register jboot.rpc.registryUserName jboot.rpc.registryPassword #rpc service config jboot.rpc.host=127.0.0.1 jboot.rpc.defaultPort=9112 jboot.rpc.defaultGroup=quartz-service jboot.rpc.defaultVersion=1.0 jboot.rpc.proxy jboot.rpc.hystrixKeys= jboot.rpc.hystrixAutoConfig=true jboot.rpc.hystrixFallbackFactory jboot.rpc.serialization=fst #---------------------------------------------------------------------------------# #---------------------------------------------------------------------------------# # cache config : type default ehcache (support:ehcache,redis,ehredis) jboot.cache.type=redis jboot.cache.redis.host=127.0.0.1 jboot.cache.redis.password=123456 jboot.cache.redis.database=0 #---------------------------------------------------------------------------------# #---------------------------------------------------------------------------------# # mq config : type default redis (support: redis,activemq,rabbitmq,hornetq,aliyunmq ) jboot.mq.type=redis jboot.mq.redis.host=127.0.0.1 jboot.mq.redis.port=6379 jboot.mq.redis.password=123456 jboot.mq.redis.channel=message-channel #---------------------------------------------------------------------------------# #---------------------------------------------------------------------------------# # redis config jboot.redis.host=127.0.0.1 jboot.redis.password=123456 jboot.redis.database=0 #---------------------------------------------------------------------------------#
<p>这个并不是 “service内rpc调用其他service报错”,而是数据库没有对应的表。</p>
回复 <a class="referer" target="_blank">@理工男海哥</a> : 嗯 解决了,就是用jboot.datasource.table和jboot.datasource.excludeTable这两个参数来弄吧。有时间我去看看jboot源码,多谢
回复 <a class="referer" target="_blank">@flydoy</a> : 配置下这个看 jboot.datasource.excludeTable=
回复 <a class="referer" target="_blank">@理工男海哥</a> : 编译成jar包依赖也不行,海哥有没有啥解决方案
回复 <a class="referer" target="_blank">@理工男海哥</a> : 确实都有自己的jboot.properties.不知道为什么会出现这种情况。我想到的一个解决办法就是把其中一个编译成jar包,再引用。另一个就是把A服务的数据库链接与B服务区分开,按照多数据源的配置方式配置下
回复 <a class="referer" target="_blank">@flydoy</a> : B服务肯定不需要A服务的表的,可能是不是在编译的时候,两个服务共享一个jboot.properties配置文件了? 理论上每个服务都应该有自己的 jboot.properties
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。