Springboot集成Druid方案:一個是在POM中直接配置druid-spring-boot-starter,不用寫任何代碼;一個是配置druid,寫幾行代碼,可以加入;在方案一基礎上加入stat、wall后進行驗證登錄。
測試環境是:SpringBoot2.1.4.RELEASE。
一、直接使用druid-spring-boot-starter
1、POM配置
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> <!--自啟動Druid管理后台--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency>
2、application.properties配置
### db config ### spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driverClassName=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://localhost:5432/XXX?useUnicode=true&characterEncoding=utf8¤tSchema=public spring.datasource.username=postgres spring.datasource.password=XXX spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.hbm2ddl.auto=update #config druid #連接池的設置 #初始化時建立物理連接的個數 spring.datasource.druid.initial-size=5 #最小連接池數量 spring.datasource.druid.min-idle=5 #最大連接池數量 maxIdle已經不再使用 spring.datasource.druid.max-active=20 #獲取連接時最大等待時間,單位毫秒 spring.datasource.druid.max-wait=60000 #申請連接的時候檢測,如果空閑時間大於timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。 spring.datasource.druid.test-while-idle=true #既作為檢測的間隔時間又作為testWhileIdel執行的依據 spring.datasource.druid.time-between-eviction-runs-millis=60000 #銷毀線程時檢測當前連接的最后活動時間和當前時間差大於該值時,關閉當前連接 spring.datasource.druid.min-evictable-idle-time-millis=30000 #用來檢測連接是否有效的sql 必須是一個查詢語句 #mysql中為 select 'x' #oracle中為 select 1 from dual spring.datasource.druid.validation-query=select 'x' #申請連接時會執行validationQuery檢測連接是否有效,開啟會降低性能,默認為true spring.datasource.druid.test-on-borrow=false #歸還連接時會執行validationQuery檢測連接是否有效,開啟會降低性能,默認為true spring.datasource.druid.test-on-return=false #當數據庫拋出不可恢復的異常時,拋棄該連接 spring.datasource.druid.exception-sorter=true #是否緩存preparedStatement,mysql5.5+建議開啟 #spring.datasource.druid.pool-prepared-statements=true #當值大於0時poolPreparedStatements會自動修改為true spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20 #配置擴展插件 spring.datasource.druid.filters=stat,wall #通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500 #合並多個DruidDataSource的監控數據 spring.datasource.druid.use-global-data-source-stat=true #設置訪問druid監控頁的賬號和密碼,默認沒有 #spring.datasource.druid.stat-view-servlet.login-username=admin #spring.datasource.druid.stat-view-servlet.login-password=admin ### mybatis config ### mybatis.config-locations=classpath:mybatis/mybatis-config.xml mybatis.mapper-locations=classpath:mybatis/mapper/*.xml mybatis.type-aliases-package=com.jrsc.supervisor.model ### log config ### logging.config=classpath:logback-spring.xml
3、輸入http://localhost:9091/druid/webapp.html后,即可看到Druid監控面板
PS:廣告無處不在
二、使用代碼,可驗證登錄的方案
1、POM配置,刪除:druid-spring-boot-starter
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> <!--自啟動Druid管理后台--> <!-- <dependency>--> <!-- <groupId>com.alibaba</groupId>--> <!-- <artifactId>druid-spring-boot-starter</artifactId>--> <!-- <version>1.1.10</version>--> <!-- </dependency>-->
2、application.properties配置不變
3、新建一個類:DruidConfig,注意包的引入,特別是:
package com.jrsc.supervisor.druid;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
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 javax.sql.DataSource;
3、DruidConfig具體實現如下:
@Configuration public class DruidConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource getDataSource() { return new DruidDataSource(); } @Bean public ServletRegistrationBean druidStatViewServlet() { //ServletRegistrationBean提供類的進行注冊 ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); //添加初始化參數:initParams //白名單: servletRegistrationBean.addInitParameter("allow", "127.0.0.1"); //IP黑名單(同時存在時,deny優先於allow) //如果滿足deny,就提示:sorry,you are not permitted to view this page servletRegistrationBean.addInitParameter("deny", "192.168.1.73"); //登錄查看信息的賬號和密碼 servletRegistrationBean.addInitParameter("loginUsername", "admin"); servletRegistrationBean.addInitParameter("loginPassword", "123456"); servletRegistrationBean.addInitParameter("resetEnable", "false"); return servletRegistrationBean; } @Bean public FilterRegistrationBean druidStatFilter() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); //添加過濾規則 filterRegistrationBean.addUrlPatterns("/*"); //添加需要忽略的格式信息 filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif," + "*.jpg,*.png, *.css,*.ico,/druid/*"); return filterRegistrationBean; }
4、對於SpringBoot的啟動類,加入注解:@ServletComponentScan
5、輸入:http://localhost:9091/druid/sql.html,觀察Druid監控面板
三、通過在方案一基礎上加入如下代碼,實現驗證登錄
#設置訪問druid監控頁的賬號和密碼,默認沒有 ## Druid WebStatFilter配置,說明請參考Druid Wiki,配置_配置WebStatFilter spring.datasource.druid.web-stat-filter.enabled=true spring.datasource.druid.web-stat-filter.url-pattern=/* spring.datasource.druid.web-stat-filter.exclusions=*.gif,*.png,*.jpg,*.html,*.js,*.css,*.ico,/druid/* # Druid StatViewServlet配置,說明請參考Druid Wiki,配置_StatViewServlet配置 spring.datasource.druid.stat-view-servlet.enabled=true spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* spring.datasource.druid.stat-view-servlet.reset-enable=true spring.datasource.druid.stat-view-servlet.login-username=admin spring.datasource.druid.stat-view-servlet.login-password=123456 spring.datasource.druid.stat-view-servlet.allow= spring.datasource.druid.stat-view-servlet.deny=
四、測試