一、问题描述

在 Spring 容器中通过配置 xml 加载和读取 properties 配置文件的方式时,遇到错误!

<context:property-placeholder location="classpath:/jdbc.properties"/> 

调用 properties 数据源配置文件时出现这样的错误:

Access denied for user ‘Administrator’@‘localhost’ (using password: YES) 错误!!!!

截图:

二、问题原因:

properties 中不能用 username 作为变量,这种方式会注入自己的系统环境变量的 用户名,本来是 root ,不应是那个 windows 用户名

真让人脑壳疼

错误的 Properties 配置(使用 username 作为变量名):

dirver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/mydb1
username=root
password=admin

Spring基本配置(完成注入):

<!--加载属性配置文件-->
<context:property-placeholder location="classpath*:jdbcConfig.properties"/>

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
</bean>

三、解决方案:

方案一:

将 properties 文件中的 username 换成 user 或其他就字符串就可以成功获取连接访问数据库。建议:username 时敏感词汇,为了安全起见还是尽量不要使用username。

正确的 Properties 配置:

dirver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/mydb1
user=root
password=admin

Spring基本配置(完成注入):

<!--加载属性配置文件-->
<context:property-placeholder location="classpath*:jdbcConfig.properties"/>

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${user}"/>
        <property name="password" value="${password}"/>
</bean>

方案二:

在Spring配置文件中修改成:

<context:property-placeholder location="classpath*:/jdbc.properties" system-properties-mode="FALLBACK/NEVER"/>   

添加一个 system-properties-mode 属性

该属性有三个值:

  • FALLBACK  — 默认值,不存在时覆盖

  • NEVER    — 不覆盖

  • OVERRIDE  — 覆盖

更多爬坑记录

支持博主

我正在参加 CSDN 2018 年博客之星评选,希望大家能支持我,
我是【No. 001】号 肖朋伟 ,感谢大家宝贵的一票 ^_^/
投票地址:https://bss.csdn.net/m/topic/blog_star2018/index

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐