JPA 配置多数据源

来源:互联网 发布:网络主播公司经营范围 编辑:程序博客网 时间:2024/05/18 04:00

1. META-INF/persistence.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_2_0.xsd" version="2.0">  <persistence-unit name="localdb" transaction-type="RESOURCE_LOCAL">      <provider>org.hibernate.ejb.HibernatePersistence</provider>      <properties>         <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>         <property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver"/>         <property name="hibernate.connection.username" value="sa"/>         <property name="hibernate.connection.password" value="123"/>         <property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://localhost:1433/CollectionDB;instance="/>         <property name="hibernate.max_fetch_depth" value="3"/>         <property name="hibernate.format_sql" value="false" />         <property name="hibernate.hbm2ddl.auto" value="none"/>         <property name="javax.persistence.validation.mode" value="none"/>         <!-- validate -->      </properties>       </persistence-unit>  <persistence-unit name="remotedb" transaction-type="RESOURCE_LOCAL">      <provider>org.hibernate.ejb.HibernatePersistence</provider>      <properties>         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>         <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/>         <property name="hibernate.connection.username" value="root"/>         <property name="hibernate.connection.password" value="123"/>         <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/futures?useUnicode=true&amp;characterEncoding=UTF-8"/>         <property name="hibernate.max_fetch_depth" value="3"/>         <property name="hibernate.format_sql" value="false" />         <property name="hibernate.hbm2ddl.auto" value="none"/>         <property name="javax.persistence.validation.mode" value="none"/>      </properties>  </persistence-unit></persistence>

 

2. spring-jpa-hibernate.xml

 

<?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:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.2.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.2.xsd"><!-- scan all beans and inject dependence --><context:component-scan base-package="com.myproject" /><bean id="defaultPersistenceUnitManager"class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"><property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" /><!-- comment dataSourceLooup to use jndi --><property name="dataSourceLookup"><beanclass="org.springframework.jdbc.datasource.lookup.BeanFactoryDataSourceLookup" /></property></bean><!-- 整合localjpa --><bean id="localEntityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="persistenceUnitManager" ref="defaultPersistenceUnitManager"></property><property name="persistenceUnitName" value="localdb"></property><property name="jpaVendorAdapter"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"><property name="showSql" value="false"></property><property name="database" value="SQL_SERVER"></property></bean></property></bean><bean id="localtransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="localEntityManagerFactory" /><qualifier value="localEM" /></bean><tx:annotation-driven transaction-manager="localtransactionManager"proxy-target-class="false" /><!-- 整合remotejpa --><bean id="remoteEntityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="persistenceUnitManager" ref="defaultPersistenceUnitManager"></property><property name="persistenceUnitName" value="remotedb"></property><property name="jpaVendorAdapter"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"><property name="showSql" value="false"></property><property name="database" value="MYSQL"></property></bean></property></bean><bean id="remotetransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="remoteEntityManagerFactory" /><qualifier value="remoteEM" /></bean><tx:annotation-driven transaction-manager="remotetransactionManager"proxy-target-class="false" /></beans>

 

 

3. StockAccountEntity.java

package com.myproject.example.vo;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name = "stockaccount", schema = "")@SuppressWarnings("serial")public class StockAccountEntity implements java.io.Serializable {@Id@Column(name ="ID",nullable=false,length=40)private java.lang.String id;@Column(name ="USERNAME",nullable=true,length=40)private java.lang.String username;public java.lang.String getId(){return this.id;}public void setId(java.lang.String id){this.id = id;}public java.lang.String getUsername(){return this.username;}public void setUsername(java.lang.String username){this.username = username;}}

 

 

 

4. StockAccountDao.java

package com.myproject.example.dao;import java.util.List;import com.myproject.example.dao.common.MyCriteriaBuilder;import com.myproject.example.vo.StockAccountEntity;public interface StockAccountDao {public List<StockAccountEntity> query(MyCriteriaBuilder cb, int maxResult);public void update(StockAccountEntity entity);public void insert(StockAccountEntity entity);public void delete(StockAccountEntity entity);public StockAccountEntity queryById(int id);}

 

5.StockAccountDaoBean.java

package com.myproject.example.dao.jpa;import java.util.List;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import javax.persistence.Query;import org.springframework.stereotype.Repository;import com.myproject.example.dao.StockAccountDao;import com.myproject.example.dao.common.MyCriteriaBuilder;import com.myproject.example.vo.StockAccountEntity;@Repositorypublic class StockAccountDaoBean implements StockAccountDao{@PersistenceContext(unitName="localdb")EntityManager em;@Overridepublic List query(MyCriteriaBuilder cb, int maxResult) {String hql = "select a from StockAccountEntity a" + cb.getCriteriaString();Query q = em.createQuery(hql);for(String key : cb.getCriteriaParams().keySet()){q.setParameter(key, cb.getCriteriaParams().get(key));}if(maxResult!=0) q.setMaxResults(maxResult);return q.getResultList();}@Overridepublic void update(StockAccountEntity entity) {em.merge(entity);}@Overridepublic void insert(StockAccountEntity entity) {em.persist(entity);}@Overridepublic void delete(StockAccountEntity entity) {em.remove(entity);}@Overridepublic StockAccountEntity queryById(int id) {return em.find(StockAccountEntity.class, id);}}

 

6.StockAccountService.java

package com.myproject.example.service;import java.util.Date;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import com.myproject.example.dao.StockCashFlowDao;import com.myproject.example.dao.common.MyCriteria;import com.myproject.example.dao.common.MyCriteriaBuilder;import com.myproject.example.vo.StockCashFlowEntity;@Service@Transactional(value="localEM")public class StockAccountService {@Resourceprivate StockAccountDao stockAccountDaoBean; public List<StockAccountEntity> queryByTradecodeTradedate(String tradeCode, Date lastTradeDate, Date tradeDate){MyCriteriaBuilder accountCB = new MyCriteriaBuilder();cashFlowCB.put(MyCriteria.Type_Equil, "tradecode", tradeCode);cashFlowCB.put(MyCriteria.Type_Bigger, "tradedate", "tradedate1", lastTradeDate);cashFlowCB.put(MyCriteria.Type_SmallerEquil, "tradedate", "tradedate2", tradeDate);List<StockAccountEntity> cashFlowList =  stockAccountDaoBean.query(accountCB, 0);return accountList;}}

 

 

原创粉丝点击