最近在项目中犯了一个低级的错误,很low的错误,首先贴出我自己程序的报错信息,信息如下:
Error creating bean with name 'sqlSessionFactory' defined in class path resource [applicationContext.xml]:
Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException:
Failed to convert property value of type 'java.lang.String' to required type 'javax.sql.DataSource' for property 'dataSource';
nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'javax.sql.DataSource'
for property 'dataSource': no matching editors or conversion strategy found
从上述的错误信息中我们可以知道,报错的原因就是因为创建名称为'sqlSessionFactory'的bean时出错,即创建mybatis的sqlSessionFactory失败,失败的原因是无法将你的datasource里配置的字符串转换成javax.sql.DataSource对象,导致SessionFactory无法完成。
到这里我们就可以明确的知道datasource配置肯定有误,因此我们要去检查我们在applicationContext.xml文件中配置的数据源,
打开applicationContext.xml文件,我发现我自己写的配置数据源的代码是这样的:
<property name="dataSource" value="dataSource">
看,在这里我居然写的是value!我居然写的是value!!我居然写的是value!!!心态有点崩,
于是就把上面一句中的value改成了ref,如下:
<property name="dataSource" ref="dataSource"/>
这里解释一下,ref和value是有区别的,value对应的是给属性赋值是基本数据类型和string类型的。ref是对应的当前xml文件中配置过的bean类型。这个概念在我的https://blog.youkuaiyun.com/qq_38701478/article/details/82778431这篇博客中有介绍过,有不明白的可以去看看。
在这里如果我们用了value进行注入的话,Spring会以字符串方式注入,因此会报类型不匹配的异常
好了,希望大家在写程序的时候细心点,不要犯一些低级的错误。