是否可以改变弹簧执行器执行健康脉冲的频率?

时间:2018-06-18 17:56:54

标签: spring actuator

我试图环顾四周,看看如何修改我的执行器终点(特别是健康状况)以限制其频率。我想看看我是否可以将其设置为每分钟触发一次特定数据集(例如邮件),但留给其他人使用?

到目前为止,我似乎无法在任何地方找到这种逻辑。我能想到的唯一已知方法是创建自己的运行状况服务器:

@Component
@RefreshScope
public class HealthCheckService implements HealthIndicator, Closeable {
@Override
public Health health() {
    // check if things are stale
    if (System.currentTimeMillis() - this.lastUpdate.get() > this.serviceProperties.getMonitorFailedThreshold()) {
        String errMsg = '[' + this.serviceName + "] health status has not been updated in over ["
                + this.serviceProperties.getMonitorFailedThreshold() + "] milliseconds.  Last updated: ["
                + this.lastUpdate.get() + ']';
        log.error(errMsg);
        return Health.down().withDetail(this.serviceName, errMsg).build();
    }

    // trace level since this could be called a lot.

    if (this.detailMsg != null) {
        Health.status(this.status);
    }

    Health.Builder health = Health.status(this.status); 

    return health.build();
}

/**
 * Scheduled, low latency health check.
 */
@Scheduled(fixedDelayString = "${health.update-delay:60000}")
public void healthUpdate() {
    if (this.isRunning.get()) {
        if (log.isDebugEnabled()) {
            log.debug("Updating Health Status of [" + this.serviceName + "].  Last Status = ["
                    + this.status.getCode() + ']');
        }

        // do some sort of checking and update the value appropriately.
        this.status = Status.UP;
        this.lastUpdate.set(System.currentTimeMillis());

        if (log.isDebugEnabled()) {
            log.debug("Health Status of [" + this.serviceName + "] updated to [" + this.status.getCode() + ']');
        }
    }
}

我不确定是否有办法在Spring中专门设置它作为配置,或者唯一的方法是构建自定义HealthIndicator?

0 个答案:

没有答案