Browse Source

配置Druid 数据库连接池

huxz 8 years ago
parent
commit
b4516f25d3

+ 133 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/config/DruidConfiguration.java

@@ -0,0 +1,133 @@
+package com.uas.sso.sso.backend.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.support.http.StatViewServlet;
+import com.alibaba.druid.support.http.WebStatFilter;
+import java.sql.SQLException;
+import javax.sql.DataSource;
+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;
+
+/**
+ * Configurations for druid data source.
+ *
+ * @author huxz
+ */
+@Configuration
+@SuppressWarnings("Duplicates")
+public class DruidConfiguration {
+
+    private Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);
+
+    @Value("${app.datasource.url}")
+    private String url;
+
+    @Value("${app.datasource.username}")
+    private String username;
+
+    @Value("${app.datasource.password}")
+    private String password;
+
+    @Value("${app.datasource.driverClassName}")
+    private String driverClassName;
+
+    @Value("${app.datasource.initialSize}")
+    private int initialSize;
+
+    @Value("${app.datasource.minIdle}")
+    private int minIdle;
+
+    @Value("${app.datasource.maxActive}")
+    private int maxActive;
+
+    @Value("${app.datasource.maxWait}")
+    private int maxWait;
+
+    @Value("${app.datasource.timeBetweenEvictionRunsMillis}")
+    private int timeBetweenEvictionRunsMillis;
+
+    @Value("${app.datasource.minEvictableIdleTimeMillis}")
+    private int minEvictableIdleTimeMillis;
+
+    @Value("${app.datasource.validationQuery}")
+    private String validationQuery;
+
+    @Value("${app.datasource.testWhileIdle}")
+    private boolean testWhileIdle;
+
+    @Value("${app.datasource.testOnBorrow}")
+    private boolean testOnBorrow;
+
+    @Value("${app.datasource.testOnReturn}")
+    private boolean testOnReturn;
+
+    @Value("${app.datasource.timeBetweenLogStatsMillis}")
+    private int timeBetweenLogStatsMillis;
+
+    @Value("${app.datasource.poolPreparedStatements}")
+    private boolean poolPreparedStatements;
+
+    @Value("${app.datasource.maxPoolPreparedStatementPerConnectionSize}")
+    private int maxPoolPreparedStatementPerConnectionSize;
+
+    @Value("${app.datasource.filters}")
+    private String filters;
+
+    @Value("${app.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;
+    }
+
+}