Spring Boot集成Azure SQL启动报错 排查YML配置或数据库问题
故障定位结论
故障100%来自application.yml配置文件的语法错误,和Azure SQL Database服务端无关。从报错栈的org.yaml.snakeyaml.scanner.ScannerException就能确认:项目启动时还没执行到数据库连接逻辑,在最开始加载解析配置文件的阶段就直接中断了。
具体配置错误明细
- 顶层配置项缩进错误:配置里最开头的
spring:前面多了4个前置空格,YAML要求顶层配置项必须顶格书写,同层级配置缩进量必须统一,错误缩进会直接打乱解析器的层级识别逻辑。 - 键值对缺少强制空格:YAML语法规定,配置键和值之间的冒号后必须跟1个半角空格,你的
url配置写的是url:jdbc:sqlserver://...,冒号后直接连了值,没有空格,这是触发本次报错的直接原因——解析器识别到url行的非法格式后,把后续的username行判定为非法映射值,才会把报错位置标在username行,属于典型的前面行格式错误带崩后续解析的情况。 - JDBC URL前缀重复:url值里多写了一层
jdbc:,写成了jdbc:jdbc:sqlserver://,就算YAML格式修好,这个错误也会导致JDBC驱动无法识别连接地址,需要删掉重复的前缀。 - JPA方言配置层级错误:你把
dialect配置放在了spring.jpa.hibernate节点下,Spring Boot无法识别到这个配置,正确层级应该放在spring.jpa.properties.hibernate下。
修正后的可用application.yml配置
spring: datasource: url: jdbc:sqlserver://xxxx.database.windows.net:1433;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30; username: xxxx password: xxxxxxxx jpa: show-sql: true hibernate: ddl-auto: update properties: hibernate: dialect: org.hibernate.dialect.SQLServer2012Dialect server: port: 9191
其他需要修正的代码问题
- 实体类文件名和类名不匹配:标注的文件名是
Employer.java,但文件里定义的公共类是Employee,Java要求公共类名必须和文件名完全一致,否则会编译失败,需要把文件名改成Employee.java。 - pom.xml存在冗余依赖:不需要单独引入
javax.persistence:persistence-api,也不需要手动指定spring-data-jpa的版本,Spring Boot父依赖已经对这些组件做了版本适配和统一管理,手动指定版本反而容易引发依赖冲突,直接替换成spring-boot-starter-data-jpa依赖即可。
内容的提问来源于stack exchange,提问作者tricks. com
相关产品推荐
相关产品推荐

