복붙노트

[SPRING] DataSourceUtils.getConnection 대 ​​DataSource.getConnection

SPRING

DataSourceUtils.getConnection 대 ​​DataSource.getConnection

스프링 컨텍스트에서 초기화 된 데이터 소스 Bean이 있습니다. 어떤 방법으로 사용해야하는지 궁금합니다. 왜 난 그냥 dataSource.getConnection () 쓸 수 없습니까?

해결법

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

    1.중요한 차이점 하나가 있습니다. dataSource.getConnection ()은 항상 dataSource 또는 연결 풀에서 가져온 새 연결을 반환합니다. DataSourceUtils.getConnection ()은 현재 스레드에 대한 활성 트랜잭션이 있는지 확인합니다. 있을 경우이 트랜잭션과의 연결을 반환합니다. 아무 것도 없으면 dataSource.getConnection ()과 똑같은 방식으로 작동합니다.

    중요한 차이점 하나가 있습니다. dataSource.getConnection ()은 항상 dataSource 또는 연결 풀에서 가져온 새 연결을 반환합니다. DataSourceUtils.getConnection ()은 현재 스레드에 대한 활성 트랜잭션이 있는지 확인합니다. 있을 경우이 트랜잭션과의 연결을 반환합니다. 아무 것도 없으면 dataSource.getConnection ()과 똑같은 방식으로 작동합니다.

    DataSourceUtils.getConnection ()을 사용할 때는주의해야합니다. 활성 트랜잭션에 대한 연결이 반환되면 트랜잭션을 연 사람의 책임이므로 다른 사람이 트랜잭션을 종료 함을 의미합니다. 반면에, 새로운 커넥션을 dataSource로부터 리턴한다면 그것은 커밋 / 롤백 / 종료해야하는 사용자입니다.

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

    2.DataSourceUtils # getConnection ()은 왜 이것을 사용하고 싶어하는지 명확하게 문서화합니다 : 특히 원시 SQL 예외와 달리 Spring JDBC 예외 계층을 사용하며 Spring의 트랜잭션 관리 기능에 참여합니다. 이 두 가지 기능 중 하나가 필요하지 않으면 DataSource # getConnection ()을 사용하고 코드를 사용하면됩니다.

    DataSourceUtils # getConnection ()은 왜 이것을 사용하고 싶어하는지 명확하게 문서화합니다 : 특히 원시 SQL 예외와 달리 Spring JDBC 예외 계층을 사용하며 Spring의 트랜잭션 관리 기능에 참여합니다. 이 두 가지 기능 중 하나가 필요하지 않으면 DataSource # getConnection ()을 사용하고 코드를 사용하면됩니다.

  3. from https://stackoverflow.com/questions/9642643/datasourceutils-getconnection-vs-datasource-getconnection by cc-by-sa and MIT license