今天拉同事代码,启动发现报错dataSource无法实例化,第一印象以为数据库配置有问题,排查半天。结果发现主角是后面的 Missing for class: Script3
......
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is groovy.lang.MissingPropertyException: No such property: Missing for class: Script3
Caused by: groovy.lang.MissingPropertyException: No such property: Missing for class: Script3
Possible solutions: binding
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)
at Script3.run(Script3.groovy:1)
at org.apache.shardingsphere.core.util.InlineExpressionParser.evaluate(InlineExpressionParser.java:109)
at org.apache.shardingsphere.core.util.InlineExpressionParser.evaluate(InlineExpressionParser.java:96)
at org.apache.shardingsphere.core.util.InlineExpressionParser.splitAndEvaluate(InlineExpressionParser.java:74)
at org.apache.shardingsphere.core.rule.TableRule.<init>(TableRule.java:99)
at org.apache.shardingsphere.core.rule.ShardingRule.createTableRules(ShardingRule.java:95)
at org.apache.shardingsphere.core.rule.ShardingRule.<init>(ShardingRule.java:81)
at org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory.createDataSource(ShardingDataSourceFactory.java:50)
at org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration.dataSource(SpringBootConfiguration.java:95)
at org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration$$EnhancerBySpringCGLIB$$80a7ec27.CGLIB$dataSource$0(<generated>)
at org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration$$EnhancerBySpringCGLIB$$80a7ec27$$FastClassBySpringCGLIB$$ec6a3296.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
at org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration$$EnhancerBySpringCGLIB$$80a7ec27.dataSource(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 38 more
点进来看一下,发现有个 script.run()方法,先打个断点
重启一下
发现这个ds0,这不是我配置的数据库名吗
放行看一下,果然是
再放行,突然发现一个奇怪的东西
再放行果然直接报错了。
反应过来了,赶紧去看下配置文件数据库配置策略
果然有段奇怪的东西,删了,重启
果然正常了👀