Java Druid連接池


介紹

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);
  }

}

監控頁面地址:http://localhost:8080/druid/sql.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM