[SPRING] Spring + Hibernate 애플리케이션에 2 개의 데이터 소스를 주입하면 트랜잭션이 발생하지 않습니다. 진행 중 오류가 발생했습니다.
SPRINGSpring + Hibernate 애플리케이션에 2 개의 데이터 소스를 주입하면 트랜잭션이 발생하지 않습니다. 진행 중 오류가 발생했습니다.
나는 Spring + JPA (Hibernate) 프로젝트를 가지고 있는데,이 프로젝트에서 MsSQL 데이터베이스에 연결한다. 이제는 새로운 연결을 열 필요가 있지만 이번에는 MySQL을위한 것이다. XML 구성을 사용하고 있습니다.
<bean id="hibernateJpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${spring.datasource.driverClassName}" />
....
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource" p:packagesToScan="com.wsg.admin.api.model"
p:jpaVendorAdapter-ref="hibernateJpaVendorAdapter">
<property name="jpaProperties">
<props>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
....
</props>
</property>
<property name="persistenceUnitName" value="dataSourcePU" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- Configure the MySQL connection -->
<bean id="enduserDataSource" class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${enduser.db.driver}" />
....
</bean>
<bean id="enduserEntityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="enduserDataSource" p:packagesToScan="com.wsg.admin.api.model"
p:jpaVendorAdapter-ref="hibernateJpaVendorAdapter">
<property name="jpaProperties">
<props>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
....
</props>
</property>
<property name="persistenceUnitName" value="enduserDataSourcePU" />
</bean>
<tx:annotation-driven transaction-manager="enduserTransactionManager" />
<bean id="enduserTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="enduserEntityManagerFactory" />
</bean>
그런 다음 조각을 사용하여 entityManager를 주입하려고합니다.
@PersistenceContext(unitName="dataSourcePU")
EntityManager entityManager;
@PersistenceContext(unitName="enduserDataSourcePU")
EntityManager endUserEntityManager;
첫 번째 데이터베이스에서만 작동하지만 두 번째 데이터베이스에서 지속하려고하면 오류가 반환됩니다.
javax.persistence.TransactionRequiredException: no transaction is in progress
@Transactional ( "transactionManager") 한 번만 사용하고 @Transactional (value = "enduserTransactionManager") 다른 시간에 두 번째 entityManager는 항상 동일한 예외를 throw하는 메서드 (persist () 호출을 포함)에 주석을 추가하려했습니다.
persist () 호출을 다른 메소드로 분리하려고 시도하고 @Transactional ( "transactionManager") 및 @Transactional (value = "enduserTransactionManager")의 두 메소드에 주석을 달았지만 여전히 동일한 오류가 발생합니다.
@Transactional(value = "enduserTransactionManager")
private void createNewBrandMySQL(Brand newBrand) {
과
@Transactional("transactionManager")
public Integer createNewBrand(Brand newBrand) throws EntityDoesntExistException {
//this method calls createNewBrandMySQL
해결법
-
==============================
1.entityManagerFactory를 사용하여 다른 컨테이너를 직접 주입하여 고정
entityManagerFactory를 사용하여 다른 컨테이너를 직접 주입하여 고정
@PersistenceContext(unitName = "dataSourcePU") EntityManager entityManager; @Autowired @Qualifier("enduserEntityManagerFactory") EntityManagerFactory endUserEntityManagerFactory; EntityManager endUserEntityManager; @PostConstruct public void init() { endUserEntityManager = endUserEntityManagerFactory.createEntityManager(); }
from https://stackoverflow.com/questions/47430321/inject-2-data-sources-into-springhibernate-application-always-throw-no-transact by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 멀티 파트 파일로 휴식 서비스 테스트를 시도합니다. (0) | 2019.05.23 |
---|---|
[SPRING] 어떤 엔티티가 참조인지에 따라 @JsonBackReference와 @JsonManagedReference를 바꾸는 방법 (0) | 2019.05.23 |
[SPRING] Spring 애플리케이션을 Tomcat에 전개 할 수 없다 : applicationContext의 문제점은 무엇인가? (0) | 2019.05.23 |
[SPRING] spring-ws 클라이언트를 사용하는 동안 Jboss에서 스프링 클래스 로더 문제 (0) | 2019.05.23 |
[SPRING] jsp에서 일반적인 연결, 변수 및 경로 (0) | 2019.05.23 |