2016-07-30 4 views
13

웹 응용 프로그램에서 spring-boot를 사용하고 spring-jpa를 사용하여 데이터베이스에서 읽고 쓸 수 있습니다. 그것은 잘 작동하지만 데이터베이스 연결을 관리하는 방법을 알고 싶습니다. 사용자가 내 봄 응용 프로그램에 요청을하면spring jpa에서 데이터베이스 연결 풀을 관리하는 방법은 무엇입니까?

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 

내가 500에 최대 연결을 설정, 데이터베이스 연결이 그를 위해 열립니다 : 다음은 데이터베이스 내 속성 구성이다. 요청을 완료하면 spring이이 연결을 닫을까요? 그렇지 않은 경우 언제 사용하지 않는 연결을 닫습니까?

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/에서 spring jpa 참조 문서를 읽었습니다. 그러나 연결에 대해서는 언급하지 않았습니다.

답변

8

DB 연결 풀링을 사용하는 경우 sqlconnection.close()을 호출해도 데이터베이스에 대한 중량 연결이 반드시 닫히지는 않지만 대부분의 경우 풀에서 재사용 가능한 연결이 해제됩니다. 따라서 클라이언트 측 연결 풀을 활용할 때 최대한 빨리 연결시 close()을 호출하는 것이 좋습니다.

구성에서 풀에는 최대 500 개의 연결이 포함됩니다 (maxIdle, minIdleminEvictableIdleTimeMillis을 구성하여 사용 준비가 된 연결 수를 조정하고 해당 연결을 해제하는 빈도를 조정하는 것이 좋습니다. 사용되지 않음).

당신은 이미 당신은 모든 가능한 속성 here을 찾을 수 application.properties 에서이를 구성 할 수 있습니다 것으로 나타났습니다 here

+0

문제는 데이터베이스를 읽거나 쓸 때 jpa 저장소 이름 규칙을 사용하고 있다는 것입니다. 어떻게 sqlconnection 인스턴스를 얻을 수 있습니까? –

8

좀 더 문서.

스프링 부트 1.4부터 봄과 통합되는 모든 데이터 소스 벤더에 대해 데이터 소스 속성이 있음을 알 수 있습니다. spring.datasource.dbcp.*, spring.datasource.tomcat.* 등이 있습니다. 1.4 docs

만약 이것이 충분하지 않고 매우 구체적인 것이 필요하다면 직접 데이터 소스 빈을 선언 할 수 있습니다. 다음은 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

어디에서 이러한 속성 설명을 찾을 수 있습니까? 나는 단지 선언을 발견했다. 그러나 상세한 설명은 설명하지 않는다. –

+1

API를 파헤 쳐야합니다. https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/pool/DataSource.html –

관련 문제