복붙노트

[SPRING] 봄 - 트랜잭션 읽기 전용

SPRING

봄 - 트랜잭션 읽기 전용

Spring을위한 선언적 트랜잭션 관리에 대한 전문가 의견을 원했습니다. 여기 내 설정입니다 :

위의 설정으로 문제가 해결됩니다. 그러나 get *, readonly = true라고 말하면 로그 파일에 데이터베이스 연결이 읽기 전용으로 표시 될 수 없다는 오류가 표시됩니다. 이것은 서비스 레이어의 모든 get * 메소드에서 발생합니다.

이제 내 질문은 :

A. get *을 읽기 전용으로 설정해야합니까? 내 모든 get * 메서드는 순수한 읽기 DB 작업입니다. 나는 어떤 트랜잭션 컨텍스트에서 그들을 실행하고 싶지 않습니다. 위의 오류가 얼마나 심각한가요?

B. get * 구성을 제거하면 오류가 표시되지 않습니다. 그 밖에도 모든 간단한 get * 작업은 트랜잭션없이 수행됩니다. 이게 가야 할 길인가?

C. 왜 누군가는 트랜잭션 방식을 readonly = true로하고 싶습니까? 이 구성의 실제적인 의미가 있습니까?

고맙습니다! 언제나 그렇듯이 귀하의 답변은 높이 평가됩니다!

해결법

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

    1.이 게시물은 동작 또는 readOnly 플래그가 지속성 메커니즘에 따라 다르다는 것을 나타냅니다.

    이 게시물은 동작 또는 readOnly 플래그가 지속성 메커니즘에 따라 다르다는 것을 나타냅니다.

    C. 예, 최대 절전 모드를 사용할 때 플러시 모드를 FLUSH_NEVER로 설정하면 성능 이점을 얻을 수 있습니다 (링크 된 게시물에 설명 된대로)

    B. 예, JDBC 호출에는 트랜잭션이 필요하지 않습니다 (최대 절전 모드가 필요합니다). @Transactional 구성을 제거하면 모든 트랜잭션 관리가 트림됩니다.

    A. 나는 spring이 connection.setReadOnly (true)를 호출하고 있다고 가정하고 싶지만 JDBC 드라이버는 이것을 지원하지 않습니다.

    결론은 일반 JDBC와 읽기 전용 트랜잭션을 사용하지 않는다는 것입니다.

    트랜잭션은 여러 쿼리에 걸쳐 있어야합니다. 너무 세분화 된 거래를하지 마십시오. 그것들을 일의 단위로 삼으십시오.

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

    2.실제로 트랜잭션의 컨텍스트에서 모든 get ()을 실행하여 일관된 읽기를 얻고 싶을 수도 있습니다. 반면에이 문제에 관심이 없다면 그에 따라 트랜잭션 수준을 설정할 수 있습니다.

    실제로 트랜잭션의 컨텍스트에서 모든 get ()을 실행하여 일관된 읽기를 얻고 싶을 수도 있습니다. 반면에이 문제에 관심이 없다면 그에 따라 트랜잭션 수준을 설정할 수 있습니다.

  3. from https://stackoverflow.com/questions/2562865/spring-transaction-readonly by cc-by-sa and MIT license