2016-07-30 17 views
13

Tôi đang sử dụng khởi động mùa xuân trong ứng dụng web của mình và sử dụng spring-jpa để đọc/ghi từ/đến cơ sở dữ liệu của tôi. Nó hoạt động rất tốt nhưng tôi muốn hiểu cách quản lý các kết nối cơ sở dữ liệu. Dưới đây là cấu hình tài sản của tôi cho cơ sở dữ liệu:Làm thế nào để quản lý hồ bơi kết nối cơ sở dữ liệu trong jpa mùa xuân?

spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8 
spring.datasource.username=user 
spring.datasource.password=pwd 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 
spring.datasource.max-active=500 

tôi đã thiết lập các kết nối tối đa đến 500. Khi một người dùng thực hiện một yêu cầu về ứng dụng xuân của tôi, một kết nối cơ sở dữ liệu sẽ được mở ra cho anh ta. Sau khi hoàn thành yêu cầu, sẽ jpa mùa xuân đóng kết nối này? Nếu không, khi nào nó sẽ đóng các kết nối không sử dụng?

Tôi đã đọc qua tài liệu tham chiếu jpa mùa xuân từ http://docs.spring.io/spring-data/jpa/docs/current/reference/html/. Nhưng nó không đề cập đến bất cứ điều gì về các kết nối.

Trả lời

8

Khi sử dụng kết nối kết nối DB, cuộc gọi đến sqlconnection.close() sẽ không nhất thiết phải đóng kết nối hạng nặng vào cơ sở dữ liệu, thay vào đó thường sẽ giải phóng kết nối là có thể sử dụng lại trong hồ bơi. Đó là lý do tại sao nó được khuyến khích để gọi các close() về kết nối càng sớm càng tốt khi tận dụng một hồ bơi kết nối phía khách hàng.

Trong cấu hình của bạn, hồ bơi sẽ chứa số lượng tối đa 500 kết nối (cũng sẽ tốt để định cấu hình maxIdle, minIdleminEvictableIdleTimeMillis để điều chỉnh số lượng kết nối sẵn sàng sử dụng và tần suất phát hành khi không được sử dụng).

Một số doc hơn here

+0

vấn đề là tôi đang sử dụng quy ước tên kho lưu trữ jpa để đọc/ghi cơ sở dữ liệu. Làm thế nào tôi có thể nhận được ví dụ sqlconnection? –

8

Bạn đã phát hiện ra rằng bạn có thể cấu hình này từ application.properties Bạn có thể tìm thấy tất cả các thuộc tính có thể here.

Lưu ý rằng từ Spring Boot 1.4 có các thuộc tính nguồn dữ liệu cho mọi nhà cung cấp nguồn dữ liệu mà mùa xuân tích hợp với, ra khỏi hộp. Có spring.datasource.dbcp.*, spring.datasource.tomcat.* và cứ tiếp tục như vậy. Xem 1.4 docs

Nếu điều đó không đủ, và bạn cần một cái gì đó rất cụ thể, bạn có thể tự khai báo bean nguồn dữ liệu. Dưới đây là ví dụ về nguồn dữ liệu Tomcat:

@Bean 
public DataSource dataSource(){ 
    PoolProperties p = new PoolProperties(); 
      p.setUrl("jdbc:mysql://localhost:3306/mysql"); 
      p.setDriverClassName("com.mysql.jdbc.Driver"); 
      p.setUsername("root"); 
      p.setPassword("password"); 
      p.setJmxEnabled(true); 
      p.setTestWhileIdle(false); 
      p.setTestOnBorrow(true); 
      p.setValidationQuery("SELECT 1"); 
      p.setTestOnReturn(false); 
      p.setValidationInterval(30000); 
      p.setTimeBetweenEvictionRunsMillis(30000); 
      p.setMaxActive(100); 
      p.setInitialSize(10); 
      p.setMaxWait(10000); 
      p.setRemoveAbandonedTimeout(60); 
      p.setMinEvictableIdleTimeMillis(30000); 
      p.setMinIdle(10); 
      p.setLogAbandoned(true); 
      p.setRemoveAbandoned(true); 
      p.setJdbcInterceptors(
      "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+ 
      "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"); 
      DataSource datasource = new DataSource(); 
      datasource.setPoolProperties(p); 
      return datasource ; 
} 
+0

nơi tôi có thể tìm thấy tất cả các giải thích thuộc tính này? Tôi chỉ tìm thấy tuyên bố nhưng không giải thích chi tiết. –

+1

Bạn phải tìm hiểu về API https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/pool/DataSource.html –

Các vấn đề liên quan