Spring读取properties文件却总是读取到系统变量值

1.问题描述

1.1 PropertySourcesPlaceholderConfigurer的bug

今天在配置spring读取properties文件时,遇到奇葩问题

  1. 首先我采用了网上的 PropertyPlaceholderConfigurer进行读取properties文件是能够正常进行读取的,而且可以运行,配置如下:

    db.properties文件:

    image-20200925100332713

    spring配置文件如下:只贴上了关键部分

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:db.properties</value>
            </list>
        </property>
    </bean>
    
    。。。。
    <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${driver}"/>
            <property name="url"
                      value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
        </bean>
    
    

    但是使用PropertyPlaceholderConfigurer会提示已经被弃用,于是我去网上查找了其他的替代,发现现在使用的是 PropertySourcesPlaceholderConfigurer,然后改用这个之后就出现错误了

  2. 使用 PropertySourcesPlaceholderConfigurer配置如下:

    <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <property name="location" value="db.properties"/>
    </bean>
    
    Caused by: java.sql.SQLException: Access denied for user 'wanglin'@'localhost' (using password: YES)
    Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'wanglin'@'localhost' (using password: YES)
    

    这个错误我就很好奇,我明明使用的是root账户,怎么会连接数据库时是wanglin这个我win10系统的账户呢

2. 解决过程

开始Google了很多,但是就是没有找到对应的解决方案,因为大多数网上还是使用的是废弃的PropertyPlaceholderConfigurer的教程,关于这个的很少,虽然网上说这两种方式使用几乎一样,但是这次我却一直被这种奇怪的错误困扰。

2.1 分析

后来仔细分析了下原因,怀疑是配置文件中的username的问题,和系统的重名了,导致读取到了当前系统的账户名。于是我将db.properties中的关于账户的键改成了 usernameL,果然解决了问题,程序能够正常的运行了。

3. 总结

最终的原因竟然是配置文件中username的原因,可能和spring中的相关名称冲突了,奇怪的知识增加了,暂时不知道具体的原因,只是找到了解决方法。

image-20200925100332713

将图片中的username改成其他不同于username的键应该就解决了问题

保持对优秀的热情
原文地址:https://www.cnblogs.com/luckforefforts/p/13728591.html