Spring Boot Actuator的DataSourcesHealthIndicatorConfiguration无法找到dataSource bean

时间:2015-11-12 16:48:36

标签: java spring spring-mvc spring-boot spring-boot-actuator

我已将Actuator添加到现有的Spring Boot(v1.2.2)项目中。 我的目标是从/ health端点查看数据库信息。 目前该端点返回:

{
    "status": "UP",
    "diskSpace": {
        "status": "UP",
        "free": 400667607040,
        "threshold": 10485760
    }
}

我已将这些属性添加到项目的属性文件中:

management.health.db.enabled=true
endpoints.health.enabled=true
endpoints.health.sensitive=false

该项目已经有一个@Configuration类,可以创建一个DataSource bean,如下所示:

@Import({
    HealthIndicatorAutoConfiguration.class,
    ...
@Configuration
public class FooConfig {

    @Bean
    public DataSource dataSource() {
        final HikariConfig hikariConfig = new HikariConfig();
        ...
        return new HikariDataSource(hikariConfig);
    }

@EnableAutoConfiguration注释未在项目中的任何位置使用。

我可以看到' dataSource'来自bean端点的bean:

{
    "bean": "dataSource",
    "scope": "singleton",
    "type": "com.zaxxer.hikari.HikariDataSource",
    "resource": "com.example.FooConfig",
    "dependencies": []
},

/ configprops端点包含以下内容:

"healthEndpoint": {
    "prefix": "endpoints.health",
    "properties": {
        "timeToLive": 1000,
        "id": "health",
        "sensitive": false
    }
},

 "diskSpaceHealthIndicatorProperties": {
    "prefix": "management.health.diskspace",
    "properties": {
        "path": "/bar/foo/.",
        "threshold": 10485760
    }
}

但没有dataSource的迹象; ^(

这个项目正在使用MySql数据库,所以它确实正确响应了一个' SELECT 1'查询。

我想知道在构建HealthIndicators之后是否正在创建dataSource bean但是到目前为止我的Spring foo已经失败了。

我更愿意不必编写自定义的HealthIndicator,但如果必须的话。

我还将Actuator添加到示例项目中,不同之处在于它没有显式创建DataSource bean,而是使用了许多@ Repository标记的接口,这些接口使用H2 DB扩展了CrudRepository,而且它只是工作了,例如

    {
    "status": "UP",
    "diskSpace": {
        "status": "UP",
        "free": 400610689024,
        "threshold": 10485760
    },
    "db": {
        "status": "UP",
        "database": "H2",
        "hello": 1
    }
}

示例项目的/ configprops端点按预期返回dataSource& diskSpace属性:

"dataSource": {
    "prefix": "spring.datasource",
    "properties": {
        "connectionProperties": null,
        "propagateInterruptState": false,
        "validator": null,
        "useDisposableConnectionFacade": true,
        "defaultCatalog": null,
        "validationInterval": 30000,
        "jmxEnabled": true,
        "ignoreExceptionOnPreLoad": false,
        "logAbandoned": false,
        "commitOnReturn": false,
        "password": "******",
        "maxIdle": 100,
        "testWhileIdle": false,
        "removeAbandoned": false,
        "poolProperties": {
            "dbProperties": {
                "user": "sa",
                "password": "******"
            },
            "url": "jdbc:h2:~/test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE",
            "driverClassName": "org.h2.Driver",
            "defaultAutoCommit": null,
            "defaultReadOnly": null,
            "defaultTransactionIsolation": -1,
            "defaultCatalog": null,
            "connectionProperties": null,
            "initialSize": 10,
            "maxActive": 100,
            "maxIdle": 100,
            "minIdle": 10,
            "maxWait": 30000,
            "validationQuery": null,
            "validationQueryTimeout": -1,
            "validatorClassName": null,
            "validator": null,
            "testOnBorrow": false,
            "testOnReturn": false,
            "testWhileIdle": false,
            "timeBetweenEvictionRunsMillis": 5000,
            "numTestsPerEvictionRun": 0,
            "minEvictableIdleTimeMillis": 60000,
            "accessToUnderlyingConnectionAllowed": true,
            "removeAbandoned": false,
            "removeAbandonedTimeout": 60,
            "logAbandoned": false,
            "name": "Tomcat Connection Pool[1-1043530337]",
            "password": "******",
            "username": "sa",
            "validationInterval": 30000,
            "jmxEnabled": true,
            "initSQL": null,
            "testOnConnect": false,
            "jdbcInterceptors": null,
            "fairQueue": true,
            "useEquals": true,
            "abandonWhenPercentageFull": 0,
            "maxAge": 0,
            "useLock": false,
            "suspectTimeout": 0,
            "dataSource": null,
            "dataSourceJNDI": null,
            "alternateUsernameAllowed": false,
            "commitOnReturn": false,
            "rollbackOnReturn": false,
            "useDisposableConnectionFacade": true,
            "logValidationErrors": false,
            "propagateInterruptState": false,
            "ignoreExceptionOnPreLoad": false
        },
        "minIdle": 10,
        "abandonWhenPercentageFull": 0,
        "defaultReadOnly": null,
        "pool": {
            "poolProperties": {
                "dbProperties": {
                    "user": "sa",
                    "password": "******"
                },
                "url": "jdbc:h2:~/test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE",
                "driverClassName": "org.h2.Driver",
                "defaultAutoCommit": null,
                "defaultReadOnly": null,
                "defaultTransactionIsolation": -1,
                "defaultCatalog": null,
                "connectionProperties": null,
                "initialSize": 10,
                "maxActive": 100,
                "maxIdle": 100,
                "minIdle": 10,
                "maxWait": 30000,
                "validationQuery": null,
                "validationQueryTimeout": -1,
                "validatorClassName": null,
                "validator": null,
                "testOnBorrow": false,
                "testOnReturn": false,
                "testWhileIdle": false,
                "timeBetweenEvictionRunsMillis": 5000,
                "numTestsPerEvictionRun": 0,
                "minEvictableIdleTimeMillis": 60000,
                "accessToUnderlyingConnectionAllowed": true,
                "removeAbandoned": false,
                "removeAbandonedTimeout": 60,
                "logAbandoned": false,
                "name": "Tomcat Connection Pool[1-1043530337]",
                "password": "******",
                "username": "sa",
                "validationInterval": 30000,
                "jmxEnabled": true,
                "initSQL": null,
                "testOnConnect": false,
                "jdbcInterceptors": null,
                "fairQueue": true,
                "useEquals": true,
                "abandonWhenPercentageFull": 0,
                "maxAge": 0,
                "useLock": false,
                "suspectTimeout": 0,
                "dataSource": null,
                "dataSourceJNDI": null,
                "alternateUsernameAllowed": false,
                "commitOnReturn": false,
                "rollbackOnReturn": false,
                "useDisposableConnectionFacade": true,
                "logValidationErrors": false,
                "propagateInterruptState": false,
                "ignoreExceptionOnPreLoad": false
            }
        },
        "maxWait": 30000,
        "logValidationErrors": false,
        "name": "Tomcat Connection Pool[1-1043530337]",
        "driverClassName": "org.h2.Driver",
        "dataSource": null,
        "initSQL": null,
        "validationQueryTimeout": -1,
        "dbProperties": {
            "user": "sa",
            "password": "******"
        },
        "validationQuery": null,
        "rollbackOnReturn": false,
        "logWriter": null,
        "validatorClassName": null,
        "dataSourceJNDI": null,
        "alternateUsernameAllowed": false,
        "suspectTimeout": 0,
        "useEquals": true,
        "removeAbandonedTimeout": 60,
        "defaultAutoCommit": null,
        "loginTimeout": 30,
        "testOnConnect": false,
        "jdbcInterceptors": null,
        "initialSize": 10,
        "defaultTransactionIsolation": -1,
        "url": "jdbc:h2:~/test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE",
        "numTestsPerEvictionRun": 0,
        "testOnBorrow": false,
        "fairQueue": true,
        "minEvictableIdleTimeMillis": 60000,
        "timeBetweenEvictionRunsMillis": 5000,
        "maxAge": 0,
        "accessToUnderlyingConnectionAllowed": true,
        "testOnReturn": false,
        "useLock": false,
        "username": "sa",
        "maxActive": 100
    }
},
"diskSpaceHealthIndicatorProperties": {
    "prefix": "management.health.diskspace",
    "properties": {
        "path": "/foo/bar/.",
        "threshold": 10485760
    }
}

1 个答案:

答案 0 :(得分:1)

感谢一位出色的同事,将以下内容添加到FooConfig解决了我的问题:

@Bean
public DataSourceHealthIndicator dataSourceHealthIndicator() {
    return new DataSourceHealthIndicator(dataSource());
}

即。 / health端点现在返回:

{
    "status": "UP",
    "diskSpace": {
        "status": "UP",
        "free": 385221242880,
        "threshold": 10485760
    },
    "dataSource": {
        "status": "UP",
        "database": "MySQL",
        "hello": 1
    }
}