java.sql.SQLException: Access denied for user 'wqh'@'localhost' (using password: YES)

在利用Spring+SpringMVC+Mybatis搭建web系統時,出現了上述bug,一直想不通。

數據庫鏈接參數設置爲(jdbc.properties文件):

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/seckill
username=root
password=seuwqh

在整合spring和mybtais中的配置文件中

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!--配置連接池屬性-->
        <property name="driverClass" value="${driver}" />

        <!-- 基本屬性 url、user、password -->
        <property name="jdbcUrl" value="${url}" />
        <property name="user" value="${username}" />
        <property name="password" value="${password}" />

連接池中的具體屬性的值通過${數據庫參數名稱}來獲取,然後運行項目是就會出現以下bug提示:

java.sql.SQLException: Access denied for user 'wqh'@'localhost' (using password: YES)

數據庫拒絕訪問,我表示很蛋疼,因爲數據庫的用戶名爲root,而且也經過測試,通過root是可以連接到數據庫的,爲什麼出來的是本機名wqh?

後來經過查詢,在Spring完成注入時是用 "${..}"  方式獲取值完成注入的。而通過這種表達式也能直接獲取到JVM系統屬性。

因爲在系統中也有個username屬性,這時系統變量覆蓋了Properties中的值,這時取得username的值爲系統的用戶名Administrator(wqh),密碼爲properties中的password去查詢數據庫,此時用戶名名和密碼並不匹配就會報錯。

解決辦法:

1、將jdbc.properties文件中的username名稱換爲其他不衝突的字符,比如user。

2、在Spring配置文件中修改成:<context:property-placeholder location="classpath:/jdbc.properties" system-properties-mode="FALLBACK / NEVER"/>   

      添加一個system-properties-mode屬性

      該屬性有三個值:FALLBACK  --- 默認值,不存在時覆蓋

              NEVER      --- 不覆蓋

              OVERRIDE  --- 覆蓋

非常感謝這位大兄弟:https://www.cnblogs.com/tongxuping/p/7081656.html

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