Spring Legacy JPAマルチDB連動~!


仕事に慣れて忘れられた私のブログ.これからも少しずつ文章を書きます.
作業中に2つの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>
注:堅持する.xmlでpersistence-unitnameを定義する必要があります.
2.Entity Manager bean設定
使用するデータソースを2回入力します.
<?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
コメントリンク