• 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的键应该就解决了问题

    保持对优秀的热情
  • 相关阅读:
    原创【cocos2d-x】CCMenuItemToggle 在lua中的使用
    SQL Server之LEFT JOIN、RIGHT LOIN、INNER JOIN的区别
    VS的IISExpress配置通过IP访问程序
    SQLServer执行大脚本文件时,提示“无法执行脚本没有足够的内存继续执行程序 (mscorlib)”
    jqGrid中multiselect: true 操作checkbox
    display:table的几个用法(元素平分宽度,垂直居中)
    ASP.NET中 前后台方法的相互调用
    AspxGridView使用手记
    大量文本框非空判断,如何提高灵活性?
    Mysql安装、配置、优化
  • 原文地址:https://www.cnblogs.com/luckforefforts/p/13728591.html
Copyright © 2020-2023  润新知