激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot開發案例之配置Druid數據庫連接池的示例

SpringBoot開發案例之配置Druid數據庫連接池的示例

2021-04-12 09:35小柒 Java教程

本篇文章主要介紹了SpringBoot開發案例之配置Druid數據庫連接池的示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

好久沒有更新Spring Boot系列文章,你說忙么?也可能是,前段時間的關注點也許在其他方面了,最近項目中需要開發小程序,正好采用Spring Boot實現一個后端服務,后面會把相關的代碼案例分享出來,不至于大家做小程序后端服務的時候一頭霧水。

在Spring Boot下默認提供了若干種可用的連接池(dbcp,dbcp2, tomcat, hikari),當然并不支持Druid,Druid來自于阿里系的一個開源連接池,它提供了非常優秀的監控功能,下面跟大家分享一下如何與Spring Boot集成。

版本環境

Spring Boot 1.5.2.RELEASE、Druid 1.1.6、JDK1.7

系統集成

添加pom.xml依賴:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- Jpa -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySql -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.1.6</version>
</dependency>

配置application.properties:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#數據源
spring.datasource.url=jdbc:mysql://192.168.1.66:3306/spring_boot?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 初始化大小,最小,最大
spring.datasource.initialSize=1
spring.datasource.minIdle=3
spring.datasource.maxActive=20
# 配置獲取連接等待超時的時間
spring.datasource.maxWait=60000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一個連接在池中最小生存的時間,單位是毫秒
spring.datasource.minEvictableIdleTimeMillis=30000
spring.datasource.validationQuery=select 'x'
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打開PSCache,并且指定每個連接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用于防火墻
spring.datasource.filters=stat,wall,slf4j
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

配置yml文件(與上二選一)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
spring:
 datasource:
   url: jdbc:mysql://192.168.1.66:3306/spring-boot?useUnicode=true&characterEncoding=utf-8&useSSL=false
   username: root
   password: root
   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

配置Druid的監控統計功能

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
import java.sql.SQLException;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
/**
 * 阿里數據庫連接池 Druid配置
 * 創建者 柒
 * 創建時間  2018年3月15日
 */
@Configuration
public class DruidConfiguration {
  private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);
  private static final String DB_PREFIX = "spring.datasource";
  @Bean
  public ServletRegistrationBean druidServlet() {
    logger.info("init Druid Servlet Configuration ");
    ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
    // IP白名單 (沒有配置或者為空,則允許所有訪問)
    servletRegistrationBean.addInitParameter("allow", "");
    // 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;
  }
  @ConfigurationProperties(prefix = DB_PREFIX)
  class IDataSourceProperties {
    private String url;
    private String username;
    private String password;
    private String driverClassName;
    private int initialSize;
    private int minIdle;
    private int maxActive;
    private int maxWait;
    private int timeBetweenEvictionRunsMillis;
    private int minEvictableIdleTimeMillis;
    private String validationQuery;
    private boolean testWhileIdle;
    private boolean testOnBorrow;
    private boolean testOnReturn;
    private boolean poolPreparedStatements;
    private int maxPoolPreparedStatementPerConnectionSize;
    private String filters;
    private String connectionProperties;
    @Bean
    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.setPoolPreparedStatements(poolPreparedStatements);
      datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
      try {
        datasource.setFilters(filters);
      } catch (SQLException e) {
        System.err.println("druid configuration initialization filter: " + e);
      }
      datasource.setConnectionProperties(connectionProperties);
      return datasource;
    }
    public String getUrl() {
      return url;
    }
    public void setUrl(String url) {
      this.url = url;
    }
    public String getUsername() {
      return username;
    }
    public void setUsername(String username) {
      this.username = username;
    }
    public String getPassword() {
      return password;
    }
    public void setPassword(String password) {
      this.password = password;
    }
    public String getDriverClassName() {
      return driverClassName;
    }
    public void setDriverClassName(String driverClassName) {
      this.driverClassName = driverClassName;
    }
    public int getInitialSize() {
      return initialSize;
    }
    public void setInitialSize(int initialSize) {
      this.initialSize = initialSize;
    }
    public int getMinIdle() {
      return minIdle;
    }
    public void setMinIdle(int minIdle) {
      this.minIdle = minIdle;
    }
    public int getMaxActive() {
      return maxActive;
    }
    public void setMaxActive(int maxActive) {
      this.maxActive = maxActive;
    }
    public int getMaxWait() {
      return maxWait;
    }
    public void setMaxWait(int maxWait) {
      this.maxWait = maxWait;
    }
    public int getTimeBetweenEvictionRunsMillis() {
      return timeBetweenEvictionRunsMillis;
    }
    public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) {
      this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
    }
    public int getMinEvictableIdleTimeMillis() {
      return minEvictableIdleTimeMillis;
    }
    public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) {
      this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
    }
    public String getValidationQuery() {
      return validationQuery;
    }
    public void setValidationQuery(String validationQuery) {
      this.validationQuery = validationQuery;
    }
    public boolean isTestWhileIdle() {
      return testWhileIdle;
    }
    public void setTestWhileIdle(boolean testWhileIdle) {
      this.testWhileIdle = testWhileIdle;
    }
    public boolean isTestOnBorrow() {
      return testOnBorrow;
    }
    public void setTestOnBorrow(boolean testOnBorrow) {
      this.testOnBorrow = testOnBorrow;
    }
    public boolean isTestOnReturn() {
      return testOnReturn;
    }
    public void setTestOnReturn(boolean testOnReturn) {
      this.testOnReturn = testOnReturn;
    }
    public boolean isPoolPreparedStatements() {
      return poolPreparedStatements;
    }
    public void setPoolPreparedStatements(boolean poolPreparedStatements) {
      this.poolPreparedStatements = poolPreparedStatements;
    }
    public int getMaxPoolPreparedStatementPerConnectionSize() {
      return maxPoolPreparedStatementPerConnectionSize;
    }
    public void setMaxPoolPreparedStatementPerConnectionSize(int maxPoolPreparedStatementPerConnectionSize) {
      this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
    }
    public String getFilters() {
      return filters;
    }
    public void setFilters(String filters) {
      this.filters = filters;
    }
    public String getConnectionProperties() {
      return connectionProperties;
    }
    public void setConnectionProperties(String connectionProperties) {
      this.connectionProperties = connectionProperties;
    }
  }
}

啟動應用,訪問地址:http://localhost:8080/druid/, 輸入配置的賬號密碼登錄之后,即可查看數據源及SQL統計等監控。效果圖如下:

SpringBoot開發案例之配置Druid數據庫連接池的示例

當然,阿里巴巴也提供了Druid的SpringBoot集成版(druid-spring-boot-starter),可參考以下鏈接。

參考:

https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

https://github.com/alibaba/druid/wiki

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.52itstyle.com/archives/2544

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: a级欧美| 欧美成网站 | 免费国产a| av在线等 | 成年人网站视频免费 | av成人一区二区 | 成人不卡一区二区 | 国产毛片视频 | 精品一区二区三区欧美 | 在线观看视频日本 | 亚洲一区二区中文字幕在线观看 | 一级黄色毛片a | 中国7777高潮网站 | 海角在线观看91一区二区 | 欧美爱爱一区二区 | 国产亚洲高清在线精品不卡 | 国产女厕一区二区三区在线视 | 成人毛片免费 | 一本色道久久综合亚洲精品小说 | 99seav| 久久精品一区二区三区不卡牛牛 | 中文字幕在线观看成人 | 免费久久久久 | 黄视频网站免费在线观看 | 久久探花 | 成人一级毛片 | 欧美毛片 | 九九黄色 | 竹内纱里奈和大战黑人 | 久久精品一二三区白丝高潮 | 精品久久久91 | 亚洲第一视频在线 | 成人黄色免费视频 | 国产免费黄色 | 欧美毛片在线观看 | 一区二区免费看 | 国产精品一区二区三区在线看 | 欧美男女爱爱视频 | 国产成人av一区 | 欧美在线观看禁18 | 中国字幕av |