spring boot 配置 Druid
阿新 • • 發佈:2019-01-01
Druid是阿里託管於GitHub的開源的資料庫連結池工具,他封裝提供並聚合了各種統計,通過簡單的配置就可以實現sql防火牆和防注入功能,是當下最強大,功能最全的資料庫連線池工具。
因專案需要,配置了連線池,現專案上線,特此記錄下,方便以後使用。
相關環境版本:jdk版本1.8,springboot版本1.5.10,druid版本
首先引入maven配置
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency>
接下類是Druid的配置檔案,配置檔案的寫法有兩種,bean載入和基於註解,我所使用的是bean的方式
import javax.sql.DataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; 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 org.springframework.context.annotation.Primary; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; /** * ClassName: DruidConfiguration * Description: * @date 2018年7月20日 */ @Configuration public class DruidConfiguration { private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class); @Bean public ServletRegistrationBean druidServlet() { logger.info("init Druid Servlet Configuration "); ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); // IP白名單 servletRegistrationBean.addInitParameter("allow", "192.168.2.25,127.0.0.1"); // IP黑名單(共同存在時,deny優先於allow) servletRegistrationBean.addInitParameter("deny", "192.168.1.100"); //控制檯管理使用者 servletRegistrationBean.addInitParameter("loginUsername", "admin"); servletRegistrationBean.addInitParameter("loginPassword", "admin"); //是否能夠重置資料 禁用HTML頁面上的“Reset All”功能 servletRegistrationBean.addInitParameter("resetEnable", "false"); return servletRegistrationBean; } @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; } @Bean //宣告其為Bean例項 @Primary //在同樣的DataSource中,首先使用被標註的DataSource @ConfigurationProperties(prefix = "spring.datasource") public DataSource datasource(){ return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build(); } }
三個bean依次為:Druid監控頁面的配置(包含黑白名單),過濾器的配置,和連線池的yml檔案配置讀取,載入
下面是yml檔案的配置:
spring: datasource: url: jdbc:mysql://10.200.200.6:3306/scauth?useUnicode=true&allowMultiQueries=true&characterEncoding=utf8&noAccessToProcedureBodies=true&zeroDateTimeBehavior=convertToNull password: username: driver-class-name: com.mysql.jdbc.Driver platform: mysql # 下面為連線池的補充設定,應用到上面所有資料來源中 type: com.alibaba.druid.pool.DruidDataSource # 初始化大小,最小,最大 initialSize: 1 minIdle: 3 maxActive: 20 # 配置獲取連線等待超時的時間 maxWait: 60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一個連線在池中最小生存的時間,單位是毫秒 minEvictableIdleTimeMillis: 30000 validationQuery: select 'x' testWhileIdle: true testOnBorrow: false testOnReturn: false # 開啟PSCache,並且指定每個連線上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆 filters: stat,wall,slf4j # 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合併多個DruidDataSource的監控資料 #useGlobalDataSourceStat: true
Druid支援多資料來源配置,不過上面的配置方式只是單資料來源的,
就能看到登入頁
輸入賬戶/密碼:admin/admin 登入成功,跳轉首頁。在此提示,登入賬戶密碼可以不設定,不設定的話訪問連結直接跳轉首頁
首頁展示的是專案的概要包括驅動,路徑,jdk版本,引用的jar等。除此之外還有各種統計。特別要記住的是,Druid的統計不會持久儲存,專案每次重啟會清零所以如果有需要儲存的資料 最好自己儲存一份