解決程式中Error creating bean with name 'XXXXX‘ defined in class path resource [application的異常

程式碼潔癖症患者發表於2018-10-08

最近在專案中犯了一個低階的錯誤,很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.csdn.net/qq_38701478/article/details/82778431這篇部落格中有介紹過,有不明白的可以去看看。

在這裡如果我們用了value進行注入的話,Spring會以字串方式注入,因此會報型別不匹配的異常

好了,希望大家在寫程式的時候細心點,不要犯一些低階的錯誤。

相關文章