복붙노트

[SPRING] Spring의 데이터베이스 연결 관리

SPRING

Spring의 데이터베이스 연결 관리

Spring Framework를 사용할 때 데이터베이스 자원을 명시 적으로 관리해야합니까? 열려있는 모든 연결을 닫는 것을 좋아합니까?

나는 봄이 그런 보일러 플레이트 코딩에서 개발자를 구한다는 것을 읽었다.

이것은 Spring 웹 애플리케이션에 오류가 발생했을 때 대답하는 것입니다.

jdbcTemplate은 xml 파일에서 구성되며 DAO 구현은 데이터베이스를 쿼리하는 데 사용되는이 jdbcTemplate bean에 대한 참조를 갖습니다.

해결법

  1. ==============================

    1.JdbcTemplate과 같은 Spring 추상화를 사용하고 있다면 Spring이이를 처리하므로 해당 부분에 버그가 있다는 것은 거의 없습니다.

    JdbcTemplate과 같은 Spring 추상화를 사용하고 있다면 Spring이이를 처리하므로 해당 부분에 버그가 있다는 것은 거의 없습니다.

    이제 컨텍스트 (applicationContext.xml), 컨텍스트 (응용 프로그램 컨텍스트를 만드는 방법, 정확히 언제 발생합니까?)에 대한 추가 정보가 없으면 아무 것도 말하기 어렵습니다. 이것은 어둠의 한 장면입니다. 데이터 소스 구성에 destroy-method = "close"속성을 설정 했습니까? 그와 같은 것 :

     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    

    특정 상황에서는 파괴 방법을 다른 나쁜 습관과 함께 사용하지 않으면 결국 자원이 고갈 될 수 있습니다.

  2. ==============================

    2.연결이 닫히지 않았기 때문일 수 있습니다. 봄에 어떻게 접속하고 있습니까? JdbcTemplate을 사용하여 데이터베이스를 쿼리하고 있습니까? 아니면 그냥 봄부터 연결을 얻는거야?

    연결이 닫히지 않았기 때문일 수 있습니다. 봄에 어떻게 접속하고 있습니까? JdbcTemplate을 사용하여 데이터베이스를 쿼리하고 있습니까? 아니면 그냥 봄부터 연결을 얻는거야?

  3. ==============================

    3.그것은 어느 레벨의 스프링을 사용 하느냐에 달려 있습니다. JdbcTemplate은 여러 가지 다른 작업을 제공합니다. 일부 작업은 화재와 잊어 버림이 있으며 일부 작업에서는 JDBC 자원 (연결, 결과 집합, 명령문 등)을 올바르게 관리해야합니다. 어림짐작은 getConnection ()을 호출하는 경우, 어느 시점에서 releaseConnection ()도 호출해야한다는 것입니다.

    그것은 어느 레벨의 스프링을 사용 하느냐에 달려 있습니다. JdbcTemplate은 여러 가지 다른 작업을 제공합니다. 일부 작업은 화재와 잊어 버림이 있으며 일부 작업에서는 JDBC 자원 (연결, 결과 집합, 명령문 등)을 올바르게 관리해야합니다. 어림짐작은 getConnection ()을 호출하는 경우, 어느 시점에서 releaseConnection ()도 호출해야한다는 것입니다.

    연결 풀을 사용하고 있습니까? 그렇다면 데이터베이스가 처리 할 수있는 것보다 큰 최대 연결 수 (이 경우 150)로 구성되어 있지 않은지 확인하십시오. 연결 풀을 사용하고 있지 않다면 정말로, 정말로 있어야합니다.

  4. ==============================

    4."jdbcTemplate이 xml 파일에서 구성되었습니다."라고 말합니다. 일반적으로 jdbcTemplate의 새 인스턴스를 봄마다 관리하지 않고 각 사용법에 대해 만들어야합니다.

    "jdbcTemplate이 xml 파일에서 구성되었습니다."라고 말합니다. 일반적으로 jdbcTemplate의 새 인스턴스를 봄마다 관리하지 않고 각 사용법에 대해 만들어야합니다.

    나는 봄에 새로운 jdbcTemplate 빈을 요청할 때마다 데이터베이스에 새로운 연결로 새로운 것을 생성하고 있지만, 코드의 범위를 벗어나면 여전히 스프링의 applicationContext에 의해 참조된다. 연결을 닫지 마십시오.

  5. ==============================

    5.내 hosing 만 20 연결을 제공합니다. 나는 DB에 대한 모든 요청에 ​​대해 수동으로 연결을 닫았다. 나는 bean에서 destory-method를 선언하지 않았다. (이것은 "나는 모른다"는 이유가있다.)하지만 모든 요청 호출에서 다했다. (힌트 : Dao 클래스에서 JdbcDaoSupport를 확장).

    내 hosing 만 20 연결을 제공합니다. 나는 DB에 대한 모든 요청에 ​​대해 수동으로 연결을 닫았다. 나는 bean에서 destory-method를 선언하지 않았다. (이것은 "나는 모른다"는 이유가있다.)하지만 모든 요청 호출에서 다했다. (힌트 : Dao 클래스에서 JdbcDaoSupport를 확장).

    public void cleanUp() {
            try {
                if (!this.getJdbcTemplate().getDataSource().getConnection().isClosed()) {
                    this.getJdbcTemplate().getDataSource().getConnection().close();
                }
            } catch (Exception e) {
                Logger.getLogger(myDAOImpl.class.getName()).log(Level.SEVERE, null, e);
            }
        }
    
  6. from https://stackoverflow.com/questions/2249993/database-connection-management-in-spring by cc-by-sa and MIT license