十分想念顺店杂可。。。

在 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

注意事项:

  1. 引号必须是英文半角引号' 或 "),不能用中文引号(‘’ 或 “”),否则会导致解析失败。
  2. 若使用配置中心(如 Nacos、Apollo)或环境变量注入密码,特殊字符的处理方式可能略有不同,需结合具体工具的规则(通常也支持引号包裹)。

通过上述方式,即可安全处理包含特殊字符的数据库密码,避免 YAML 解析错误。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐