springboot yml文件数据库密码有特殊字符
·
十分想念顺店杂可。。。
在 Spring Boot 的application.yml配置文件中,当数据库密码包含特殊字符(如@、#、$、!、&、:、空格等)时,直接配置可能会导致 YAML 解析器报错或解析异常(例如#会被识别为注释开始,导致密码截断)。
解决方法:使用引号包裹密码
最可靠的方式是用 ** 单引号'或双引号"** 将包含特殊字符的密码包裹起来,避免 YAML 解析器误解特殊字符。
具体示例:
假设数据库密码为 P@ssw0rd#2023!(包含@、#、!等特殊字符),正确的配置方式如下:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
username: root
# 用单引号包裹密码(推荐,单引号会原样保留内容,不解析转义字符)
password: 'P@ssw0rd#2023!'
driver-class-name: com.mysql.cj.jdbc.Driver
单引号与双引号的区别:
-
单引号
':会原样保留密码中的所有字符,不解析任何转义字符(如\n不会被识别为换行,而是作为普通字符\和n)。
示例:password: 'a\nb'解析后为a\nb(原样保留)。 -
双引号
":会解析转义字符(如\n会被识别为换行)。
示例:password: "a\nb"解析后为a换行b(转义生效)。
特殊情况处理:
如果密码中本身包含引号(如密码是 user'pass 或 user"pass),需注意:
- 若密码含单引号
',用双引号包裹:password: "user'pass" - 若密码含双引号
",用单引号包裹:password: 'user"pass' - 若密码同时含单引号和双引号,需在对应引号前加转义符
\(此时建议用双引号包裹,因为单引号内无法转义单引号):password: "user'\"pass"(解析后为user'"pass)
注意事项:
- 引号必须是英文半角引号(
'或"),不能用中文引号(‘’或“”),否则会导致解析失败。 - 若使用配置中心(如 Nacos、Apollo)或环境变量注入密码,特殊字符的处理方式可能略有不同,需结合具体工具的规则(通常也支持引号包裹)。
通过上述方式,即可安全处理包含特殊字符的数据库密码,避免 YAML 解析错误。
更多推荐
所有评论(0)