diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DataSourceHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DataSourceHealthIndicator.java index 72cb16a2694..54fe1dab902 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DataSourceHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DataSourceHealthIndicator.java @@ -17,6 +17,8 @@ package org.springframework.boot.actuate.health; import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; @@ -24,8 +26,12 @@ import java.util.Map; import javax.sql.DataSource; import org.springframework.dao.DataAccessException; +import org.springframework.dao.support.DataAccessUtils; +import org.springframework.jdbc.IncorrectResultSetColumnCountException; import org.springframework.jdbc.core.ConnectionCallback; import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.support.JdbcUtils; import org.springframework.util.StringUtils; /** @@ -34,6 +40,7 @@ import org.springframework.util.StringUtils; * * @author Dave Syer * @author Christian Dupuis + * @author Andy Wilkinson * @since 1.1.0 */ public class DataSourceHealthIndicator extends AbstractHealthIndicator { @@ -86,8 +93,23 @@ public class DataSourceHealthIndicator extends AbstractHealthIndicator { String query = detectQuery(product); if (StringUtils.hasText(query)) { try { - builder.withDetail("hello", - this.jdbcTemplate.queryForObject(query, Object.class)); + builder.withDetail("hello", DataAccessUtils + .requiredSingleResult(this.jdbcTemplate.query(query, + new RowMapper() { + + @Override + public Object mapRow(ResultSet rs, int rowNum) + throws SQLException { + ResultSetMetaData rsmd = rs.getMetaData(); + int nrOfColumns = rsmd.getColumnCount(); + if (nrOfColumns != 1) { + throw new IncorrectResultSetColumnCountException( + 1, nrOfColumns); + } + return JdbcUtils.getResultSetValue(rs, 1); + } + + }))); } catch (Exception ex) { builder.down(ex);