博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis-spring 启动报错ClassNotFoundException ${jdbc.driverClassName}
阅读量:4677 次
发布时间:2019-06-09

本文共 11472 字,大约阅读时间需要 38 分钟。

昨天按照教程,将mybatis-spring整合到原来的spring-jdbc项目,启动时报错ClassNotFoundException

严重: dataSource init errorjava.sql.SQLException: ${slave.jdbc.driverClassName}    at com.alibaba.druid.util.JdbcUtils.createDriver(JdbcUtils.java:520)    at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:583)    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.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1833)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1776)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1704)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:581)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503)    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.lambda$resolveManagedMap$1(BeanDefinitionValueResolver.java:426)    at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedMap(BeanDefinitionValueResolver.java:424)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:167)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1611)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1363)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:580)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503)    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1611)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1363)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:580)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503)    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1611)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1363)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:580)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503)    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:116)    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:694)    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:409)    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291)    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4643)    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5109)    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:742)    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:718)    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:703)    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1141)    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1876)    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)    at java.util.concurrent.FutureTask.run(FutureTask.java:266)    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1053)    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:428)    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1585)    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:308)    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:424)    at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:367)    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:966)    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:839)    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1427)    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1417)    at java.util.concurrent.FutureTask.run(FutureTask.java:266)    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943)    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:258)    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:770)    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)    at org.apache.catalina.startup.Catalina.start(Catalina.java:682)    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.apache.catalina.startup.Bootstrap.start(Bootstrap.java:350)    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)Caused by: java.lang.ClassNotFoundException: ${slave.jdbc.driverClassName}    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309)    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1138)    at java.lang.Class.forName0(Native Method)    at java.lang.Class.forName(Class.java:264)    at com.alibaba.druid.util.JdbcUtils.createDriver(JdbcUtils.java:518)    ... 95 more

 

看样子是加载不了properties里面的值

项目中applicationContext.xml的mybatis是如下配置

  

在slaveDataSource配置中使用了properties中的值,这里没有加载进去。

参考了网上的很多方法,例如是否多加了空格造成的问题,还是使用了MapperScannerConfigurer过时的SqlSessionFactory属性,发现都不是。

在和官网一一对照代码时发现,在上面的MapperScannerConfigurer配置中指定SqlSessionFactoryName时使用了ref而不是value,改为value之后完美解决了此问题。

因为自己刚入手java和spring,对bean的理解不够。ref的作用是将目标bean定义的实例注入到属性或构造器中,一般作用于对象类型,而SqlSessionFactoryName是字符串类型,应该使用value。

上面就是过早的实例化SqlSessionFactory,然后在还没导入properties值时实例化dataSource时导致的错误。

关于使用SqlSessionFactoryName而不使用SqlSessionFactory可以参考

官网有MapperScannerConfigurer的使用说明,自己没有看仔细,官网介绍如下

 

 

关于java中bean的用法还需要仔细研究才行。

转载于:https://www.cnblogs.com/AceZhai/p/9334308.html

你可能感兴趣的文章
Flume 示例
查看>>
Designing for Performance
查看>>
HTML属性的应用
查看>>
HEAP CORRUPTION DETECTED
查看>>
Android URI简单介绍
查看>>
蒙板 模态对话框
查看>>
pythong中的全局变量的调用和嵌套函数中变量的使用
查看>>
【POJ - 3009】Curling 2.0 (dfs+回溯)
查看>>
Windows下载安装良心教程
查看>>
浅析商业银行“业务连续性管理体系”的构建
查看>>
【分享】从《水浒传》中反思什么是真正的执行力
查看>>
java中的static
查看>>
5.侧边栏逻辑
查看>>
评论博客
查看>>
用户代理字符串识别工具源码与slf4j日志使用
查看>>
算法导论第6部分图算法,第22章图的基本算法
查看>>
提示框第三方库之MBProgressHUD
查看>>
C语言 10-字符和字符串常用处理函数
查看>>
C++ 表达式语句 海伦的故事
查看>>
32位汇编学习笔记(1)
查看>>