1. 问题描述
Spring boot 项目从Mysql迁移到SUNDB数据库启动应用程序报错。
error: Org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator: DataSource health check failed
Cause by : SqlException: syntax error : select 1

2. 问题原因
项目使用了 Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。
应用程序使用的 spring-boot-actuator 版本为2.1.3.RELEASE 此版本数据库健康检查代码部分如下:
包名:org.springframework.boot.actuate.jdbc
类名:DataSourceHealthIndicator.class

由以上代码可知首先判断数据库是否为DatabaseDriver 定义支持的数据库类型如不是则使用 select 1 进行数据源健康检查
而DatabaseDriver 为 org.springframework.boot.jdbc 包下的 DatabaseDriver.class 其中并未定义SUNDB,所以使用select 1 语句但SUNDB 不支持此种语法导致报错

3. 解决方案
3.1 在springboot 配置文件中关闭数据源检查功能
management.health.db.enabled=false

验证 :

3.2 升级 Spring Boot Actuator 版本到 2.3.1.RELEASE 以上版本,因为2.3.1.RELEASE 对判断代码进行了修改不在使用 default_query 而是使用固定值“isValid()”

spring boot 配置信息:

验证 :

最后修改时间:2023-07-17 14:49:12
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




