두 개의 다른 데이터베이스 인스턴스를 처리하는 프로젝트가 있습니다. 데이터베이스에 대한 각 액세스는 트랜잭션이지만 database1의 트랜잭션은 database2의 트랜잭션에 링크 할 필요가 없습니다.두 개의 다른 세션에 대해 두 개의 최대 절전 모드 transactionManager를 구성하는 방법
나는 Hibernate와 spring-tx 4.0.3 Release, spring Ioc4와 hibernate4를 사용하고있다.
내 DAO 서비스에 @Transactional
주석을 사용합니다.
그래서 두 개의 데이터 소스 빈, 두 개의 sessionFactory 빈과 두 개의 HibernateTransactionManager 빈을 설정한다.
TransactionAspectSupport.determineTransactionManager
은 PlatformTransactionManager
인터페이스를 구현하는 클래스 인스턴스를 하나만 찾으려고하므로 UniqueBeanException
이 표시됩니다.
내 Java 구성 클래스가 TransactionManagementConfigurer
을 구현할 수 있음을 알았 기 때문에 사용할 트랜잭션 관리자 빈을 구체적으로 알 수 있었고 ProxyTransactionManager
을 구현하여 각 해당 트랜잭션 관리자에 위임 할 수있었습니다. 데이터베이스에서 현재 호출을 수행해야합니다.
문제는 이러한 ProxyPlatformTransactionManager
방법을 구현하고 있으며, 어떤 데이터베이스가 액세스되고 있는지 또는 어떤 SessionFactory
에 액세스하고 있는지 알 수 있습니까? 그렇지 않으면 어떤 PlatformTransactionManager
을 사용해야할지 모릅니다.
그런 유형의 문제에 아직 직면 한 사람이 있습니까?
감사합니다,
멜 응용 프로그램의 맥락에서
을 한정자를 사용하여 코드에서 여러 sessionFactories에 액세스 할 수 있습니다 docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html # value--) 관리자는 tx 관리자가 적용되며 봄은 사용자를 위해 수행 할 것입니다. 추가 수업이 필요 없습니다. –
감사합니다 Deinum, 나는 그것에 대해 생각해 보았습니다 :)하지만 불행히도, 내 Hibernate 객체 중 일부는 일부 jar 라이브러리에 정의되어 있습니다. 그래서이 접근법을 사용한다면 적절한 tx 관리자를 입력하기 위해 모든 클래스를 해킹해야합니다. 기본 tx 관리자를 bean 중 하나로 설정하는 방법이 없으면 어쩌면? – Melanie