[SPRING] 데이터 읽기를위한 데이터베이스 트랜잭션이 필요합니까?
SPRING데이터 읽기를위한 데이터베이스 트랜잭션이 필요합니까?
적어도 데이터베이스에서 데이터를 읽으려고하면
((Session) em.getDelegate ()). createCriteria ()
트랜잭션이 존재하지 않는다는 예외가 발생합니다.
특수 효과를 추가 할 때 :
@Transactional(
value = SomeClass.TRANSACTIONAL_MANAGER,
propagation = Propagation.SUPPORTS,
readOnly = true
)
그것은 잘 작동합니다.
그러나 데이터를 읽거나 읽으려면 초당 읽기가 1 초에 수 백만 번 발생할 것이므로 불필요한 환경을 막으려 고합니다.
그렇지 않은 경우 읽기 전용 Propagation.Supports 트랜잭션을 만드는 비용은 얼마입니까?
Spring과 함께 트랜잭션없이 Hibernate Criteria Query를 생성 할 수 있습니까?
해결법
-
==============================
1.트랜잭션 경계 (BEGIN / COMMIT / ROLLBACK)를 명시 적으로 선언하지 않더라도 모든 데이터베이스 명령문은 실제 트랜잭션의 컨텍스트 내에서 실행됩니다.
트랜잭션 경계 (BEGIN / COMMIT / ROLLBACK)를 명시 적으로 선언하지 않더라도 모든 데이터베이스 명령문은 실제 트랜잭션의 컨텍스트 내에서 실행됩니다.
트랜잭션 경계를 선언하지 않으면 각 명령문은 별도의 트랜잭션 (자동 커밋 모드)에서 실행되어야합니다. 이것은 사용자 환경이 스레드 별 연결을 처리 할 수없는 경우 명령문마다 하나의 연결을 열고 닫을 수도 있습니다.
서비스를 @Transactional로 선언하면 전체 트랜잭션 기간 동안 하나의 연결이 제공되며 모든 명령문은 단일 격리 연결을 사용합니다. 이것은 우선 명시 적 트랜잭션을 사용하지 않는 것보다 낫습니다.
대형 응용 프로그램의 경우 동시 요청 수가 많을 수 있으므로 데이터베이스 연결 획득 요청 비율을 줄이면 전체 응용 프로그램 성능이 확실히 향상됩니다.
JPA는 읽기 작업에 트랜잭션을 적용하지 않습니다. 트랜잭션 컨텍스트를 시작하는 것을 잊어 버린 경우에만 쓰기가 필요하므로 트랜잭션 요구 예외가 발생합니다. 그럼에도 불구하고 읽기 전용 트랜잭션의 경우에도 트랜잭션 경계를 선언하는 것이 좋습니다 (Spring @Transactional에서는 읽기 전용 트랜잭션을 표시 할 수 있으므로 성능이 크게 향상됩니다).
이제 선언적 트랜잭션 경계 (예 : @Transactional)를 사용하는 경우 실행할 JDBC 문이있을 때까지 데이터베이스 연결 획득이 지연되는지 확인해야합니다. JTA에서는 이것이 기본 동작입니다. RESOURCE_LOCAL을 사용할 때 hibernate.connection.provider_disables_autocommit 구성 등록 정보를 설정하고 기본 연결 풀이 자동 확약 모드를 사용하지 않도록 설정되어 있는지 확인해야합니다.
-
==============================
2.J2EE에서 JPA 구현에 대한 나의 경험에 따라 데이터 무결성을 유지하기 위해 롤백을 보장함으로써 CRUD 작업 안전성을 수행하기 위해 트랜잭션 관리자가 항상 필요합니다.
J2EE에서 JPA 구현에 대한 나의 경험에 따라 데이터 무결성을 유지하기 위해 롤백을 보장함으로써 CRUD 작업 안전성을 수행하기 위해 트랜잭션 관리자가 항상 필요합니다.
그것을 정의 할 수 있습니다 :
Spring Data는 JPA 스펙 구현과 동일한 접근법을 따를 수 있습니다.
자세한 내용은 Java_Persistence / Transactions (Java_Persistence / Transactions) 문서를 참조하십시오.
from https://stackoverflow.com/questions/26327274/do-you-need-a-database-transaction-for-reading-data by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring에서 조롱 된 JNDI 데이터 소스를 테스트하는 방법은 무엇입니까? (0) | 2018.12.08 |
---|---|
[SPRING] junit 테스트 클래스 전체에서 스프링 응용 프로그램 컨텍스트 재사용 (0) | 2018.12.08 |
[SPRING] Spring 데이터 저장소의 커스텀 메소드 구현 및 REST를 통한 노출 (0) | 2018.12.08 |
[SPRING] Spring Data JPA GROUP BY 쿼리에서 커스텀 객체를 반환하는 방법 (0) | 2018.12.07 |
[SPRING] @Scope ( "prototype") 빈 범위는 새 빈을 생성하지 않습니다. (0) | 2018.12.07 |