介紹
Druid是阿里出品的Java 數據庫連接池,在性能,穩定性,擴展性和監控方面做得比較好,是國內流行的數據庫連接池。
SpringBoot整合
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
</dependency>
application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/user_demo?serverTimezone=Asia/Shanghai
username: root
password: password
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 初始化連接數
initial-size: 1
# 最小連接數
min-idle: 1
# 最大連接數
max-active: 20
# 連接最大等待時間
max-wait: 60000
# 定時檢查並銷毀空閑連接:如果連接空閑時間超過min-evictable-idle-time-millis則進行銷毀
# 這里每60s檢查一次,如果連接空閑時間超過300s則進行銷毀
time-between-eviction-runs-millis: 60000
# 保持空閑而不被銷毀的最小時間
min-evictable-idle-time-millis: 300000
# 測試連接是否有效,要求是select語句
validation-query: SELECT 1 FROM DUAL
# 申請連接時如果連接空閑時間超過time-between-eviction-runs-millis則進行檢測
# 這里如果連接空閑時間超過60s則使用validation-query語句進行檢查
test-while-idle: true
# 申請連接時測試連接是否有效(開啟會降低性能)
test-on-borrow: false
# 歸還連接時測試連接是否有效(開啟會降低性能)
test-on-return: false
# 是否緩存preparedStatement即PSCache,Mysql不支持
pool-prepared-statements: false
# 如果>0則pool-prepared-statements自動為true
max-pool-prepared-statement-per-connection-size: -1
# 配置擴展插件(攔截器):stat 用於監控統計 config 用於數據庫密碼加密 wall 用於防止SQL注入 slf4j 用於記錄日志
filters: stat,config,wall,slf4j
# druid.stat.mergeSql=true 合並統計相同的SQL(避免因為參數不同而統計多條SQL)
# druid.stat.slowSqlMillis=5000 統計慢查詢SQL
connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
jpa:
hibernate:
ddl-auto: create-drop
show-sql: true
open-in-view: false
實體類
@Entity
@Table(name = "user")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@Column(updatable = false)
@CreationTimestamp
private Date createTime;
@UpdateTimestamp
private Date updateTime;
}
開啟控制台
Druid默認不開啟監控頁面,在SpringBoot中可以使用ServletRegistrationBean對象注入對應的Servlet。
@SpringBootApplication
public class DemoApplication {
@Bean
public ServletRegistrationBean<StatViewServlet> druidStatViewServlet() {
ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
registrationBean.addInitParameter("allow", "127.0.0.1");// IP白名單 (沒有配置或者為空,則允許所有訪問)
registrationBean.addInitParameter("deny", "");// IP黑名單 (同時存在時,deny優先於allow)
registrationBean.addInitParameter("loginUsername", "admin");
registrationBean.addInitParameter("loginPassword", "password");
registrationBean.addInitParameter("resetEnable", "false"); // 是否允許計數器清零(對應控制台的重置按鈕)
return registrationBean;
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}