Spring Legacy JPA multi-DB 연동~!
일에 적응한다고 잊혀진 나의 벨로그. 이제부터라도 조금씩 글을 써나가 본다.
일을 하다 보니 DB를 두개 연동해야할 때가 있었다.
Spring Legacy에서 DB연동을 하는데 하루 종일 걸렸다.
다음에 다시 하게되면 오늘 같이 시간낭비를 하지 않을 것이다.
1. Persistance.xml파일 설정
#1. Main DB Persistance.xml
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence.xsd">
<persistence-unit name="MainDB" transaction-type="RESOURCE_LOCAL">
<description>Persistence Unit</description>
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
## Main DB와 연결된 class
<class>com.main.db1.MainDB</class>
<properties>
<property name="hibernate.archive.autodetection" value="class" />
</properties>
</persistence-unit>
</persistence>
#2. Sub DB Persistance.xml
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence.xsd">
<persistence-unit name="subDB">
<description>Persistence Unit</description>
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
## Sub DB와 연결된 class
<class>com.cogeni.main.db2.SubDB</class>
<properties>
<property name="hibernate.archive.autodetection" value="class" />
</properties>
</persistence-unit>
</persistence>
참고: persistance.xml에 persistence-unit name을 정의해야한다.
2. EntityManager Bean 설정
#1. Main DB Persistance.xml
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence.xsd">
<persistence-unit name="MainDB" transaction-type="RESOURCE_LOCAL">
<description>Persistence Unit</description>
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
## Main DB와 연결된 class
<class>com.main.db1.MainDB</class>
<properties>
<property name="hibernate.archive.autodetection" value="class" />
</properties>
</persistence-unit>
</persistence>
#2. Sub DB Persistance.xml
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence.xsd">
<persistence-unit name="subDB">
<description>Persistence Unit</description>
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
## Sub DB와 연결된 class
<class>com.cogeni.main.db2.SubDB</class>
<properties>
<property name="hibernate.archive.autodetection" value="class" />
</properties>
</persistence-unit>
</persistence>
참고: persistance.xml에 persistence-unit name을 정의해야한다.
사용할 DataSource를 두번 입력한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<!-- EntityManagerSetting -->
<!-- MainDB-->
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceXmlLocation" value="classpath:inote-data-persistence.xml" />
<property name="persistenceUnitName" value="MainDB" />
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
<prop key="hibernate.jdbc.use_streams_for_binary">false</prop>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
</props>
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl"><value>${hibernate.generate.ddl}</value></property>
<property name="showSql"><value>false</value></property>
</bean>
</property>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="emf" />
</bean>
<!-- Sub DB -->
<bean id="emfOracle" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSourceOracle" />
<property name="persistenceXmlLocation" value="classpath:sub-data-persistence.xml" />
<property name="persistenceUnitName" value="subDB" />
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
<prop key="hibernate.jdbc.use_streams_for_binary">false</prop>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
</props>
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl"><value>true</value></property>
<property name="showSql"><value>false</value></property>
</bean>
</property>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
</bean>
<bean id="transactionManagerOra" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="emfOracle" />
</bean>
<!-- Main DB-->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/databaseName" />
<property name="username" value=""/>
<property name="password" value=""/>
<property name="maxTotal" value="" />
<property name="maxIdle" value="" />
<property name="validationQuery" value="" />
<property name="testOnBorrow" value="" />
</bean>
<!-- Sub DB -->
<bean id="dataSourceOracle" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value=""/>
<property name="password" value=""/>
<property name="maxTotal" value="" />
<property name="maxIdle" value="" />
<property name="validationQuery" value="" />
<property name="testOnBorrow" value="" />
</bean>
</beans>
3. Code
// MainDB
// SubDB
// MainDB
// SubDB
Author And Source
이 문제에 관하여(Spring Legacy JPA multi-DB 연동~!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ln1992/Spring-Legacy-JPA-multi-DB-연동저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)