728x90

EnableTransactionManagement 3

(@Scheduled 관련) 스케쥴러 관련 메소드안에 JPA 저장하는 메서드가 같이 있을 경우 저장이 안되는 오류

스케쥴러 메소드안에 JPA 저장하는 메서드가 같이 있을 경우, 저장이 안되는 오류가 발생하였다. 스케쥴러가 돌면서 JPA의 프록시에 있는 값에 영향을 준다(프록시 초기화)고 한다. 또한, 트랜잭션 매니저가 @EnableTransactionManagement를 통해 DataSourceTransactionManager로 구성된 경우, 하이버네이트의 begin() 메소드가 AbstractTransactionImpl을 부르지 않는다고 한다. 해결 → @Scheduled 클래스와 @Transacional이 있는 xxService를 분리하여 해결한다. //예제 class schedule { @Schedule go() { service.call(); } } @Transactional class xxService { ..

Spring 2023.08.24

3) JPA 다중 스키마 설정

JPA 다중 스키마 설정 아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. JPA 구조 Persistence: EntityManagerFactory 인스턴스를 얻기 위한 정적 메서드를 포함하는 클래스이다. EntityManagerFactory: EntityManager의 팩토리 클래스입니다. EntityManager의 여러 인스턴스를 생성하고 관리한다. EntityManager: 개체에 대한 지속성 작업을 제어하는 인터페이스이다. 쿼리 인스턴스에서 작동합니다. Entity 엔터티는 데이터베이스에 레코드로 저장되는 persistence 개체입니다. Persistence Unit: 모든 엔터티 클래스 집합을 정의합니다. 애플리케이션에..

2) MyBatis 3.0 다중 스키마 설정

MyBatis 3.0 다중 스키마 설정 아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. 우리가 사용하는 Spring와 하이버네이트에서 제공해주는 @Transactional는 알아서 트랜잭션을 관리해주는 마법의 키워드가 아니다. 추상화해서 사용할 뿐이지 실제는 위와같이 JDBC 트랜잭션을 사용하여 구현한다. DAO에서 Database에 접근하기 위해서는 Spring-jdbc가 필요하고, 이는 DataSource 정보로부터 구할 수 있다. 또한, 스프링은 트랜잭션 처리를 TranscationManager 객체를 통해 처리한다. 구현체는 갈아끼울 수 있게 인터페이스인 PlatformTranscationManager가 주입되어 사용된다..

728x90