ERROR com.alibaba.druid.pool.DruidDataSource - create connection SQLException

Spring配置druid数据库连接池时报错:

[main] INFO com.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
[Druid-ConnectionPool-Create-1572127577] ERROR com.alibaba.druid.pool.DruidDataSource - create connection SQLException, url: jdbc:mysql://localhost:3306/test, errorCode 1045, state 28000
java.sql.SQLException: Access denied for user 'userName'@'127.0.0.1' (using password: YES)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:829)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:449)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:242)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
    at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1657)
    at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723)
    at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2838)

从错误报告中可以发现是用户名不合法而无法登录,但仔细检查配置文件发现没有出错。
数据库连接池配置文件druid.properties为:

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root

Spring配置文件beans.xml文件为:

<bean id="druidConfig"
          class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <property name="location" value="classpath:druid.properties"></property>
    </bean>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName"
                  value="${driverClassName}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${username}"></property>
        <property name="password" value="${password}"></property>
    </bean>

查阅资料后发现这个问题依然是配置文件中的问题,Spring在读取配置文件时获取了JVM中的部分信息,读取到了用户userName(一般为电脑配置的个人用户名)而非配置的root,所以提示错误Access denied for user 'userName'@'127.0.0.1' (using password: YES)。想要按照配置文件中配置的用户名和密码登录数据库,需要在两个配置文件中加入前缀信息,按照配置信息登录数据库。
修改后的数据库连接池配置文件druid.properties为:

jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=mysql

Spring配置文件beans.xml对应修改为:

<bean id="druidConfig"
          class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <property name="location" value="classpath:druid.properties"></property>
    </bean>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName"
                  value="${jdbc.driverClassName}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

修改后运行错误修复。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容