package org.apereo.cas.monitor.config; import org.apereo.cas.configuration.CasConfigurationProperties; import org.apereo.cas.configuration.model.core.monitor.MonitorProperties; import org.apereo.cas.configuration.support.Beans; import org.apereo.cas.monitor.JdbcDataSourceMonitor; import org.apereo.cas.monitor.Monitor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.concurrent.ThreadPoolExecutorFactoryBean; import javax.sql.DataSource; import java.util.concurrent.ExecutorService; /** * This is {@link CasJdbcMonitorConfiguration}. * * @author Misagh Moayyed * @since 5.0.0 */ @Configuration("casJdbcMonitorConfiguration") @EnableConfigurationProperties(CasConfigurationProperties.class) public class CasJdbcMonitorConfiguration { @Autowired private CasConfigurationProperties casProperties; @Autowired @Bean @RefreshScope public Monitor dataSourceMonitor(@Qualifier("pooledJdbcMonitorExecutorService") final ExecutorService executor) { final MonitorProperties.Jdbc jdbc = casProperties.getMonitor().getJdbc(); return new JdbcDataSourceMonitor(executor, Long.valueOf(jdbc.getMaxWait()).intValue(), monitorDataSource(), jdbc.getValidationQuery()); } @Lazy @Bean public ThreadPoolExecutorFactoryBean pooledJdbcMonitorExecutorService() { return Beans.newThreadPoolExecutorFactoryBean(casProperties.getMonitor().getJdbc().getPool()); } @ConditionalOnMissingBean(name = "monitorDataSource") @Bean @RefreshScope public DataSource monitorDataSource() { return Beans.newDataSource(casProperties.getMonitor().getJdbc()); } }