我已经在/health 下设置了 spring boot 以显示数据源状态。不过,我得到了这个 JSON:
"dataSource" : {
"status" : "DOWN",
"database" : "MySQL",
"error" : "org.springframework.dao.TransientDataAccessResourceException: StatementCallback; SQL [SELECT 1]; Conversion not supported for type java.lang.Object; nested exception is java.sql.SQLException: Conversion not supported for type java.lang.Object"
},
正如你所看到的,我的数据库是 mysql,我在 Windows8 上运行它。我确实尝试了“select 1”查询,它确实在 mysql 命令行中返回了 1。知道问题出在哪里吗?
最佳答案
DataSourceHealthIndicator
通过调用 JdbcTemplate
运行其配置的查询(默认为 SELECT 1
):
this.jdbcTemplate.queryForObject(query, Object.class)
在 Java 6 上,这最终会导致调用 ResultSet.getObject(index)
并且一切按预期工作。在 Java 7 上,调用的是 ResultSet.getObject(index, Object.class)
(getObject 的此重载是 Java 7 中的新功能)。在其默认配置中,MySQL JDBC 驱动程序无法创建并返回 java.lang.Object 的实例,因此它会抛出问题中描述的异常。
您可以更改 MySQL 的行为,并通过启用自动反序列化让它返回适合该列的任何实例:
spring.datasource.url: jdbc:mysql://localhost/test?autoDeserialize=true
我还打开了Spring boot issue这样我们就可以进行更改,以便无需启用自动反序列化。
关于mysql - Spring Boot 数据源异常关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25002294/