Cannot load JDBC driver class '${jdbc.mysql.driverClassName}',繼承mybatis,讀取屬性配置文件失敗。

 在集成mybatis的時候,數據庫的用戶名、密碼等相關信息是配置在屬性文件中,當調用的時候獲取屬性文件的值失敗,具體錯誤信息如下:

### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class '${jdbc.mysql.driverClassName}'
### The error may exist in class path resource [com/weshare/security/domain/mybatis/sysUserMapper.xml]
### The error may involve com.weshare.security.dao.mybatis.SysUserDao.selectSysUsers
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class '${jdbc.mysql.driverClassName}'] with root cause
java.lang.ClassNotFoundException: ${jdbc.mysql.driverClassName}
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1945)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1788)
    at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1420)
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)

 錯誤的配置方式:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/-->
    <!-- 注入sqlSessionFactoy -->
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    <property name="basePackage" value="com.weshare.security.dao.mybatis"/>
</bean>

 

正確的配置方式:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    <!--property name="sqlSessionFactory" ref="sqlSessionFactory" /-->
    <property name="basePackage" value="com.weshare.security.dao.mybatis"/>
</bean>

 原因:

原因分析:是因爲配置了class="org.mybatis.spring.mapper.MapperScannerConfigurer",而這句代碼會在數據源加載前就執行了,之後就把表達式${jdbc.driverClassName}當成字符串執行了。

參考: https://blog.csdn.net/xuan_lu/article/details/80280276

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章