Tối ưu Nguồn Dữ liệu Druid: Quản lý Kết nối, Bộ Lọc và Giám sát

Tham số cốt lõi cho bộ quản lý kết nối

Druid cung cấp các thiết lập chi tiết để tối ưu hiệu năng và độ ổn định:

  • connectionUri: Chuỗi kết nối đặc thù cho hệ quản trị CSDL (ví dụ: jdbc:mysql://127.0.0.1:3306/app_db?useSSL=false)
  • credential: Thông tin xác thực bao gồm usersecret (mật khẩu được mã hóa bằng Jasypt)
  • poolCapacity:
    • minCapacity: Số kết nối tối thiểu duy trì sẵn sàng
    • maxCapacity: Ngưỡng kết nối tối đa cho phép
    • initialCapacity: Số lượng kết nối khởi tạo khi ứng dụng khởi động
  • validationQuery: Câu truy vấn kiểm tra sức khỏe kết nối (ví dụ: SELECT 1 cho MySQL)
  • idleCheckInterval: Tần suất quét kết nối không hoạt động (ms), kết hợp với minEvictableIdleTime để loại bỏ kết nối lỗi
  • statementCacheSize: Kích thước bộ nhớ đệm prepared statements (đặt 0 để tắt, nên kích hoạt cho Oracle)
  • connectionTimeout: Thời gian chờ tối đa khi yêu cầu kết nối (ms), kích hoạt khóa không công bằng qua useUnfairLock=true để cải thiện hiệu năng

Cấu hình tích hợp Spring Boot

Sử dụng starter chuyên dụng với cấu trúc tối giản:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.11</version>
</dependency>

Cấu hình trong application.yml với thiết lập tối ưu:

spring:
  datasource:
    druid:
      connection-uri: jdbc:postgresql://localhost:5432/app_data
      user: app_user
      secret: ENC(abc123xyz) # Mật khẩu mã hóa
      min-capacity: 3
      max-capacity: 15
      idle-check-interval: 30000
      validation-query: SELECT 1
      use-unfair-lock: true
      filters: stat,wall,slf4j

Cấu hình cho Spring Framework cổ điển

Triển khai bean datasource với binding thuộc tính:

@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties("app.datasource")
    public DataSource appDataSource() {
        return new DruidDataSource();
    }
}

Tệp cấu hình application.properties:

app.datasource.driver-class-name=org.postgresql.Driver
app.datasource.max-wait=5000
app.datasource.min-evictable-idle-time=180000
app.datasource.pool-prepared-statements=true
app.datasource.max-pool-prepared-statement-per-connection-size=25
app.datasource.connection-properties=druid.stat.slowSqlMillis:1000

Thiết lập giám sát thời gian thực

Thêm các thành phần sau để kích hoạt dashboard:

@Bean
public ServletRegistrationBean<StatViewServlet> monitoringServlet() {
    ServletRegistrationBean<StatViewServlet> bean = 
        new ServletRegistrationBean<>(new StatViewServlet(), "/monitoring/*");
    
    Map<String, String> params = new HashMap<>();
    params.put("loginUsername", "admin_ops");
    params.put("loginPassword", "secure!2024");
    params.put("allow", "192.168.1.0/24"); // Chỉ cho phép mạng nội bộ
    bean.setInitParameters(params);
    
    return bean;
}

@Bean
public FilterRegistrationBean<WebStatFilter> monitoringFilter() {
    FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>();
    bean.setFilter(new WebStatFilter());
    bean.addUrlPatterns("/*");
    bean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,/monitoring/*");
    return bean;
}

Truy cập giao diện quản trị qua đường dẫn http://[host]:[port]/monitoring với thông tin đăng nhập đã cấu hình.

Thẻ: Druid spring-boot connection-pool sql-monitoring log4j

Đăng vào ngày 8 tháng 9 lúc 23:22