解决:Access denied for user ‘Administrator’@‘localhost’ (using password: YES)
一、问题描述
在 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 — 覆盖
原文:https://blog.csdn.net/qq_40147863/article/details/86498386