`
明天会更浩
  • 浏览: 5845 次
  • 性别: Icon_minigender_1
社区版块
存档分类

java.lang.ClassNotFoundException: ${driverClass} 解决方案

 
阅读更多

我的项目中用到了spring3.2.5+mybatis3.1.1+mybatis-spring1.2.1,我把数据库连接信息写在配置文件里,然后在spring配置文件中加上<context:property-placeholder location="file:D:\foxking\taobao.properties" /> 来引入,dataSource配置如下:

 

    程序一运行就报:java.lang.ClassNotFoundException: ${driverClass} ............等一大堆错误,spring 配置检查了N多遍,没发现问题,让我很郁闷。于是不停的百度、Google,不停的改配置、测试,问题依然没有解决。后来终于找到了解决方法。

    先说一下问题的原因所在:

    在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。 但如果不设置sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,否则就无法自动注入。又或者直接定义 MapperFactoryBean ,再或者放弃自动代理接口方式。 

    出问题的原因找到了,现在再找方法解决问题,方法如下:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  

<property name="basePackage" value="com.xxxx.dao.mapper" /> 

<property name="sqlSessionFactoryBeanName" value="sf1" />

 <!-- <property name="sqlSessionFactory" ref="sf1"></property> -->

 </bean>

    改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,非bean,所以不会引发提前初始化问题。

    本文参考自http://www.oschina.net/question/188964_32305?sort=default&p=1#answers

分享到:
评论

相关推荐

    使用IDEA启动项目遇见ClassNotFoundException的解决方案

    使用IDEA启动项目遇见ClassNotFoundException的解决方案 在使用IDEA启动项目时,可能会遇见ClassNotFoundException的错误,导致项目无法启动。本文将详细介绍使用IDEA启动项目遇见ClassNotFoundException的正确解决...

    jsp 连接sql server 2021 连接不上的解决方法.docx

    在开发过程中,有时会遇到使用JSP连接SQL Server 2021时出现连接问题,本文将详细解析这些问题及其解决方案。 首先,让我们了解基础概念。JSP(JavaServer Pages)是一种基于Java技术的动态网页开发工具,它允许...

    spark mac 版本

    - `java.lang.ClassNotFoundException`: 确保你的类路径包含了所有依赖库。 - `SPARK_HOME`未设置:检查环境变量是否正确设置。 - 内存不足:如果遇到内存问题,可以尝试降低`--executor-memory`或`--driver-...

    JDBC 导入MYSQL驱动方法

    但在实际操作过程中,可能会遇到一个常见的异常:“Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver”。这个异常主要是由于Java环境未能找到对应的MySQL数据库驱动类导致的。...

    java 连接sql数据库时的心得

    根据提供的标题、描述以及部分代码内容,我们可以总结出...通过以上内容,我们可以了解到使用Java连接SQL Server数据库的基本步骤、常见问题及其解决方案。在实际开发过程中,还需要根据具体的环境和需求来进行调整。

    spring mvc 项目错误,和一些配置

    根据提供的文档信息,我们可以归纳总结出一系列与Spring MVC框架相关的常见问题及解决方案。这些问题主要集中在配置错误、依赖缺失以及常见的异常处理等方面。 ### Spring MVC 项目常见错误与配置 #### 1. Java....

    mysql_jdbc连接数据库-错误提示.pdf

    ### MySQL JDBC连接数据库常见错误及解决方案 #### 一、引言 在使用Java进行数据库操作时,通过JDBC(Java Database Connectivity)连接MySQL数据库是非常常见的做法。然而,在实际开发过程中,经常会遇到各种连接...

    J2EE编程(错误之注册信息无法写进数据库)

    `java.lang.ClassNotFoundException: com.mysql.jdbc.Driver`这个异常表明程序在尝试使用`Class.forName()`方法加载数据库驱动时,找不到对应的类。这通常是因为缺少了mysql-connector-java驱动库。在Java项目中,...

Global site tag (gtag.js) - Google Analytics