package com.uas.sso; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; import java.sql.SQLException; @Configuration public class DruidDBConfiguration { private Logger logger = LoggerFactory.getLogger(DruidDBConfiguration.class); @Value("${datasource.url}") private String url; @Value("${datasource.username}") private String username; @Value("${datasource.password}") private String password; @Value("${datasource.driverClassName}") private String driverClassName; @Value("${datasource.initialSize}") private int initialSize; @Value("${datasource.minIdle}") private int minIdle; @Value("${datasource.maxActive}") private int maxActive; @Value("${datasource.maxWait}") private int maxWait; @Value("${datasource.timeBetweenEvictionRunsMillis}") private int timeBetweenEvictionRunsMillis; @Value("${datasource.minEvictableIdleTimeMillis}") private int minEvictableIdleTimeMillis; @Value("${datasource.validationQuery}") private String validationQuery; @Value("${datasource.testWhileIdle}") private boolean testWhileIdle; @Value("${datasource.testOnBorrow}") private boolean testOnBorrow; @Value("${datasource.testOnReturn}") private boolean testOnReturn; @Value("${datasource.timeBetweenLogStatsMillis}") private int timeBetweenLogStatsMillis; @Value("${datasource.poolPreparedStatements}") private boolean poolPreparedStatements; @Value("${datasource.maxPoolPreparedStatementPerConnectionSize}") private int maxPoolPreparedStatementPerConnectionSize; @Value("${datasource.filters}") private String filters; @Value("${datasource.connectionProperties}") private String connectionProperties; @Bean @Primary public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setDriverClassName(driverClassName); // configuration dataSource.setInitialSize(initialSize); dataSource.setMinIdle(minIdle); dataSource.setMaxActive(maxActive); dataSource.setMaxWait(maxWait); dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); dataSource.setValidationQuery(validationQuery); dataSource.setTestWhileIdle(testWhileIdle); dataSource.setTestOnBorrow(testOnBorrow); dataSource.setTestOnReturn(testOnReturn); dataSource.setTimeBetweenLogStatsMillis(timeBetweenLogStatsMillis); dataSource.setPoolPreparedStatements(poolPreparedStatements); dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize); try { dataSource.setFilters(filters); } catch (SQLException e) { logger.error("数据源初始化失败: setFilters", e); } dataSource.setConnectionProperties(connectionProperties); return dataSource; } @Bean public ServletRegistrationBean servletRegistrationBean() { return new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); } @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter()); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.bmp,*.css,*.ico,*.html,/druid/*"); return filterRegistrationBean; } }