package sample; import org.springframework.boot.actuate.health.*; import org.springframework.boot.actuate.health.Health.Builder; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.*; import sample.context.*; import sample.context.actor.ActorSession; import sample.context.audit.AuditHandler; import sample.context.audit.AuditHandler.AuditPersister; import sample.context.lock.IdLockHandler; import sample.context.mail.MailHandler; import sample.context.report.ReportHandler; import sample.model.BusinessDayHandler; /** * アプリケーションにおけるBean定義を表現します。 * <p>クラス側でコンポーネント定義していない時はこちらで明示的に記載してください。 */ @Configuration public class ApplicationConfig { /** インフラ層 ( context 配下) のコンポーネント定義を表現します */ @Configuration static class PlainConfig { @Bean Timestamper timestamper() { return new Timestamper(); } @Bean ActorSession actorSession() { return new ActorSession(); } @Bean ResourceBundleHandler resourceBundleHandler() { return new ResourceBundleHandler(); } @Bean AppSettingHandler appSettingHandler() { return new AppSettingHandler(); } @Bean AuditHandler auditHandler() { return new AuditHandler(); } @Bean AuditPersister auditPersister() { return new AuditPersister(); } @Bean IdLockHandler idLockHandler() { return new IdLockHandler(); } @Bean MailHandler mailHandler() { return new MailHandler(); } @Bean ReportHandler reportHandler() { return new ReportHandler(); } @Bean DomainHelper domainHelper() { return new DomainHelper(); } } /** 拡張ヘルスチェック定義を表現します。 */ @Configuration static class HealthCheckConfig { /** 営業日チェック */ @Bean @ConditionalOnBean(BusinessDayHandler.class) HealthIndicator dayIndicator(final Timestamper time, final BusinessDayHandler day) { return new AbstractHealthIndicator() { @Override protected void doHealthCheck(Builder builder) throws Exception { builder.up(); builder.withDetail("day", day.day()) .withDetail("dayMinus1", day.day(-1)) .withDetail("dayPlus1", day.day(1)) .withDetail("dayPlus2", day.day(2)) .withDetail("dayPlus3", day.day(3)); } }; } } }