From 6e6207747ece40843f71479add7b57b1982f40ba Mon Sep 17 00:00:00 2001 From: xwolf <2324808561@qq.com> Date: Fri, 2 Feb 2018 14:39:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=BA=90=E5=A4=9A=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xwolf/boot/config/DataSourceConfig.java | 97 +++++++++++++------ src/main/resources/application.yml | 80 +++++++++------ 2 files changed, 122 insertions(+), 55 deletions(-) diff --git a/src/main/java/com/xwolf/boot/config/DataSourceConfig.java b/src/main/java/com/xwolf/boot/config/DataSourceConfig.java index 41890a1..8e59260 100644 --- a/src/main/java/com/xwolf/boot/config/DataSourceConfig.java +++ b/src/main/java/com/xwolf/boot/config/DataSourceConfig.java @@ -4,16 +4,21 @@ import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import com.google.common.collect.Lists; -import org.springframework.boot.context.properties.ConfigurationProperties; +import com.google.common.collect.Maps; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; +import org.springframework.context.ApplicationContextException; +import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.jdbc.datasource.DataSourceTransactionManager; -import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.core.env.Environment; +import org.springframework.util.StringUtils; -import java.util.HashMap; +import javax.sql.DataSource; +import java.sql.SQLException; import java.util.Map; /** @@ -24,43 +29,79 @@ import java.util.Map; * @version 1.0.0 */ @Configuration -public class DataSourceConfig { +public class DataSourceConfig implements EnvironmentAware{ - @ConfigurationProperties(prefix = "datasource.druid") - @Bean(name="datasource",initMethod = "init",destroyMethod = "close") - public DruidDataSource getDataSource(){ - return new DruidDataSource(); + private static final Logger log = LoggerFactory.getLogger(DataSourceConfig.class); + + private RelaxedPropertyResolver prop; + + private Environment environment; + + @Override + public void setEnvironment(Environment environment) { + this.environment = environment; + this.prop = new RelaxedPropertyResolver(environment,"spring.datasource."); } - @Bean - public PlatformTransactionManager transactionManager(){ - return new DataSourceTransactionManager(getDataSource()); + /** + * 数据库连接池配置 + * @return + */ + @Bean(initMethod="init",destroyMethod="close",name="dataSource") + public DataSource dataSource(){ + log.info("数据库连接池配置中......"); + if (StringUtils.isEmpty(prop.getProperty("url"))) { + throw new ApplicationContextException("数据库连接池url配置错误."); + }else{ + DruidDataSource druid=new DruidDataSource(); + druid.setUrl(prop.getProperty("url")); + druid.setUsername(prop.getProperty("username")); + druid.setPassword(prop.getProperty("password")); + druid.setDriverClassName(prop.getProperty("driverClassName")); + druid.setInitialSize(Integer.valueOf(prop.getProperty("druid.initialSize"))); + druid.setMinIdle(Integer.valueOf(prop.getProperty("druid.minIdle"))); + druid.setMaxActive(Integer.valueOf(prop.getProperty("druid.maxActive"))); + druid.setMaxWait(Integer.valueOf(prop.getProperty("druid.maxWait"))); + druid.setTimeBetweenConnectErrorMillis(Long.valueOf(prop.getProperty("druid.timeBetweenEvictionRunsMillis"))); + druid.setMinEvictableIdleTimeMillis(Long.valueOf(prop.getProperty("druid.minEvictableIdleTimeMillis"))); + druid.setValidationQuery(prop.getProperty("druid.validationQuery")); + druid.setTestWhileIdle(Boolean.parseBoolean(prop.getProperty("druid.testWhileIdle"))); + druid.setTestOnBorrow(Boolean.parseBoolean(prop.getProperty("druid.testOnBorrow"))); + druid.setTestOnReturn(Boolean.parseBoolean(prop.getProperty("druid.testOnReturn"))); + druid.setConnectionProperties(prop.getProperty("druid.connectionProperties")); + try { + druid.setFilters(prop.getProperty("druid.filter")); + } catch (SQLException e) { + log.error("druid数据库连接池初始化异常"); + } + return druid; + } } - // 指定环境下dev 开启监控 + /** + * 静态资源过滤 + * @return + */ @Bean - @Profile("dev") - public FilterRegistrationBean druidFilter() { - FilterRegistrationBean registration = new FilterRegistrationBean(); - registration.setFilter(new WebStatFilter()); - Map intParams = new HashMap<>(); - intParams.put("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); - registration.setName("DruidWebStatFilter"); - registration.setUrlPatterns(Lists.newArrayList("/*")); - registration.setInitParameters(intParams); - return registration; + public FilterRegistrationBean filterRegistrationBean() { + FilterRegistrationBean fr = new FilterRegistrationBean(); + fr.setFilter(new WebStatFilter()); + fr.addUrlPatterns("/*"); + fr.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); + return fr; } - //数据源监控 + /** + * 数据源监控 + */ @Bean - @Profile("dev") public ServletRegistrationBean servletRegistrationBean() { ServletRegistrationBean registration = new ServletRegistrationBean(); registration.setServlet(new StatViewServlet()); - registration.setName("druid"); + registration.setName("druidMonitor"); registration.setUrlMappings(Lists.newArrayList("/druid/*")); //自定义添加初始化参数 - Map intParams = new HashMap<>(); + Map intParams = Maps.newHashMap(); intParams.put("loginUsername","druid"); intParams.put("loginPassword","druid"); registration.setName("DruidWebStatFilter"); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e8456b8..f40755a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,7 +1,6 @@ spring: application: name: boot - http: encoding: force: true @@ -15,32 +14,6 @@ spring: date-format: YYYY-MM-DD joda-date-time-format: YYYY-MM-DD HH:mm:ss -datasource: - druid: - url: jdbc:mysql://127.0.0.1:3306/wifi2?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&createDatabaseIfNotExist=true - username: eop - password: eop@eop - filters: stat,slf4j - initialSize: 10 - maxActive: 100 - maxWait: 60000 - minIdle: 5 - timeBetweenEvictionRunsMillis: 60000 - minEvictableIdleTimeMillis: 300000 - validationQuery: SELECT 'x' - testWhileIdle: true - testOnBorrow: false - testOnReturn: false - poolPreparedStatements: true - maxPoolPreparedStatementPerConnectionSize: 20 - -server: - port: 8082 - session: - timeout: 30 - - - mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.xwolf.boot.entity @@ -49,3 +22,56 @@ mybatis: logging: config: classpath:logback.xml + +server: + port: 8082 + session: + timeout: 1800 + connection-timeout: 60000 + display-name: Boot Application + +--- +spring: + profiles: dev + datasource: + driver-class-name: com.mysql.jdbc.Driver + username: eop + url: jdbc:mysql://127.0.0.1:3306/wifi2?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&createDatabaseIfNotExist=true + password: eop@eop + type: com.alibaba.druid.pool.DruidDataSource + druid: + filters: config + maxActive: 50 + initialSize: 10 + maxWait: 60000 + minIdle: 1 + timeBetweenEvictionRunsMillis: 60000 + minEvictableIdleTimeMillis: 300000 + validationQuery: select 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + connectionProperties: config.decrypt=false;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMBqy+oGF0DhV2jiHyilb4mowR4mgQL4FSE0+GvlstTqYanSnJXYHmAffYVNO7lsAq4KU0K3Xh9e6qtGdAevFq0CAwEAAQ== + +--- +spring: + profiles: test + datasource: + driver-class-name: com.mysql.jdbc.Driver + username: eop + url: jdbc:mysql://127.0.0.1:3306/wifi2?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&createDatabaseIfNotExist=true + password: eop@eop + type: com.alibaba.druid.pool.DruidDataSource + druid: + filters: config + maxActive: 50 + initialSize: 10 + maxWait: 60000 + minIdle: 1 + timeBetweenEvictionRunsMillis: 60000 + minEvictableIdleTimeMillis: 300000 + validationQuery: select 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + connectionProperties: config.decrypt=false;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMBqy+oGF0DhV2jiHyilb4mowR4mgQL4FSE0+GvlstTqYanSnJXYHmAffYVNO7lsAq4KU0K3Xh9e6qtGdAevFq0CAwEAAQ== \ No newline at end of file