복붙노트

[SPRING] 여러 데이터베이스를 사용하여 최대 절전 모드로 전환

SPRING

여러 데이터베이스를 사용하여 최대 절전 모드로 전환

누군가가 최대 절전 모드 설정에서 또 다른 데이터 소스를 추가하는 방법을 알고 있으며 DAO에서 데이터 소스에 자동 시작을 설정하는 방법을 알고 있습니까?

이것은 완벽하게 실행되는 하나의 데이터 소스 코드입니다.하지만 다른 데이터 소스를 추가하는 방법을 모르겠습니다. 실제 데이터베이스와 다른 테이블을 가진 데이터베이스 인 다른 데이터 소스를 추가하려고합니다.

HIBERNATE CONF

 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="url" value="jdbc:mysql://localhost/personal"/>
        <property name="username" value="root"/>
        <property name="password" value="mysql"/>
    </bean>


    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource">
            <ref local="dataSource"/>
        </property>
        <property name="packagesToScan">
            <list>
                <value>com.app.personal.model</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">false</prop>
            </props>
        </property>
    </bean>

    <tx:annotation-driven/>
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref local="sessionFactory"/>
        </property>
    </bean>

DAO 예제

@Repository
public class ModuloDAOHibernate extends HibernateTemplate implements ModuloDAO {

    @Autowired
    public ModuloDAOHibernate(SessionFactory sessionFactory) {
        super(sessionFactory);
    }

    public List<Modulo> getAllGrupoModuloDAO() {
        Criteria criteriaList = this.getSession().createCriteria(Modulo.class);
        criteriaList.addOrder(Order.asc("orden"));
        return criteriaList.list();
    }

해결법

  1. ==============================

    1.나는 당신이 dataSource1과 적절한 sessionFactory1을 사용해야하는 DAO 세트를 가지고 있다고 가정하고, 다른 것들은 dataSource2를 기반으로하는 다른 dataSouce2와 sessionFactory2를 사용해야한다고 가정합니다. 물론 두 번째 dataSource와 다른 bean을 선언 할 필요가있다. 이미 가지고있는 설정을 복사하고 충돌하지 않도록 bean id를 변경하기 만하면된다. 를 제외하고는 모두 미러링되어야합니다.

    나는 당신이 dataSource1과 적절한 sessionFactory1을 사용해야하는 DAO 세트를 가지고 있다고 가정하고, 다른 것들은 dataSource2를 기반으로하는 다른 dataSouce2와 sessionFactory2를 사용해야한다고 가정합니다. 물론 두 번째 dataSource와 다른 bean을 선언 할 필요가있다. 이미 가지고있는 설정을 복사하고 충돌하지 않도록 bean id를 변경하기 만하면된다. 를 제외하고는 모두 미러링되어야합니다.

    <bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!-- ... -->
    </bean>
    
    <bean id="sessionFactory1" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource1"/>
        <!-- ... -->
    </bean>
    
    <bean id="transactionManager1" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory1"/>
        <!-- ... -->
    </bean>
    
    
    <bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!-- ... -->
    </bean>
    
    <bean id="sessionFactory2" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource2"/>
        <!-- ... -->
    </bean>
    
    <bean id="transactionManager2" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory2"/>
        <!-- ... -->
    </bean>
    
    <tx:annotation-driven transaction-manager="transactionManager1"/>
    

    실제 문제는 여기에 있습니다. 이제 서로 다른 세션 팩토리에 바인드 된 두 개의 트랜잭션 관리자가 있습니다. 다른 세션 팩토리는 여러 데이터 소스로 차례로 전달됩니다. 그러나 @Transactional 어노테이션은 항상 하나의 트랜잭션 관리자 만 사용합니다 (기본적으로 transactionManager1을 명시 적으로 나타냅니다. 즉, 두 번째 데이터 소스를 사용하는 DAO는 첫 번째 데이터 소스 내에서 시작된 트랜잭션에 참여합니다. 이는 의도 한 것이 아닙니다.

    @Transactional 어노테이션 (명시 적으로 시도하지 않았 음) 또는 TransactionTemplate을 사용하여 명시 적으로 트랜잭션 관리자 이름을 정의하는 것과 같은 몇 가지 해결 방법이 있지만 문제를 잘 이해해야합니다.

    autowiring에 관해서 - 이름으로 autowire하는 경우, 세션 팩토리 나 데이터 소스 ID와 같은 필드의 이름을 지정하면 작동하지만 실제로는 가장 작은 문제입니다.

  2. ==============================

    2.승인. 나는 또 다른 해결책을 발견하고 이것과 같은 방법을 사용하고있다 : 다른 dataSource와 SessionFactory를 추가한다. 다음은 DAO의 method 인 sessionFactory를 추가한다. @Qualifier anottation withe에 sessionFactory의 속성이 필요하다.

    승인. 나는 또 다른 해결책을 발견하고 이것과 같은 방법을 사용하고있다 : 다른 dataSource와 SessionFactory를 추가한다. 다음은 DAO의 method 인 sessionFactory를 추가한다. @Qualifier anottation withe에 sessionFactory의 속성이 필요하다.

      @Autowired 
        public ProgramaSgteDAOHibernate(@Qualifier("sessionFactory3") SessionFactory sessionFactory) { 
         super(sessionFactory); 
        }
    
  3. ==============================

    3.나는이 같은 문제가 있었다. 나는 이것을 만들어서 해결했다. applicationContext.xml

    나는이 같은 문제가 있었다. 나는 이것을 만들어서 해결했다. applicationContext.xml

    <!-- dataSource properies -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:dataSource.properties" />
    </bean>
    
    <!-- MySQL -->
    <bean id="mySQLdataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${mySql.driverClassName}" />
        <property name="url" value="${mySql.url}" />
        <property name="username" value="${mySql.username}" />
        <property name="password" value="${mySql.password}" />
    </bean>
    <bean id="mySQLsessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="mySQLdataSource" />
        <property name="packagesToScan" value="com.victor.entity" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${mySql.dialect}</prop>
            </props>
        </property>
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>
    </bean>
    
    <bean id="mySQLtransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="mySQLsessionFactory" />
    </bean>
    <tx:annotation-driven proxy-target-class="true"
        transaction-manager="mySQLtransactionManager" />
    
    <!-- ORACLE -->
    <bean id="oracleDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${oracle.driverClassName}" />
        <property name="url" value="${oracle.url}" />
        <property name="username" value="${oracle.username}" />
        <property name="password" value="${oracle.password}" />
    </bean>
    <bean id="oracleSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="oracleDataSource" />
        <property name="packagesToScan" value="com.victor.entity" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${oracle.dialect}</prop>
            </props>
        </property>
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>
    </bean>
    <tx:annotation-driven proxy-target-class="true"
        transaction-manager="oracleTransactionManager" />
    <bean id="oracleTransactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="oracleSessionFactory" />
    </bean>
    

    Dao에서는 sessionFactory에 한정자 주석을 삽입했습니다. 제 경우에는 일반 BaseEnity가 있습니다 :

    public abstract class BaseEntityDAOImpl<T extends BaseEntity> implements BaseEntityDAO<T> {
    
    private Class<T> persistentClass;
    @Autowired
    @Qualifier("oracleSessionFactory")
    SessionFactory sessionFactory;
    }
    

    주석을 사용하는 서비스 빈에서 :

    @Service
    @Transactional(propagation = Propagation.REQUIRED, readOnly = true, value = "oracleTransactionManager")
    public class UserService {
    
    @Autowired
    private UserDAO dao;
    }
    

    모든 것이 잘 작동합니다.

  4. ==============================

    4.나는 똑같은 문제가 있었다. 나는 이것을 다음과 같이 풀었다.

    나는 똑같은 문제가 있었다. 나는 이것을 다음과 같이 풀었다.

    우선, 서로 다른 데이터베이스에 대해 서로 다른 cfg.xml 파일이 있어야합니다. 그런 다음 두 번째 데이터베이스에 연결할 때마다 Hibernate의 Configuration 객체를 사용하면됩니다.

    Configuration config = new Configuration().configure("<complete path to your cfg.xml file>");
    SessionFactory sessionFactory = config.buildSessionFactory();
    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    

    나는 이것을 여기에서 발견했다 : http://www.coderanch.com/t/468821/ORM/java/If-hibernate-cfg-xml-has

    나는 이것이 2 개 이상의 데이터베이스로 확장 될 수 있다고 확신한다. 희망이 도움이됩니다.

  5. ==============================

    5.나는 응답에 늦었다는 것을 알고있다. 그러나 나는 문제를 해결했다. (봄과 최대 절전 모드를 사용하는 다중 데이터베이스를 연결하는 방법)이 방법으로 도움이되기를 바란다. :)

    나는 응답에 늦었다는 것을 알고있다. 그러나 나는 문제를 해결했다. (봄과 최대 절전 모드를 사용하는 다중 데이터베이스를 연결하는 방법)이 방법으로 도움이되기를 바란다. :)

    NOTE: I have added the relevant code, kindly make the dao and rest with the help of impl I used in the below mentioned code.
    
    **web.xml**
    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        id="WebApp_ID" version="3.0">
        <display-name>MultipleDatabaseConnectivityInSpring</display-name>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
         <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
             <load-on-startup>1</load-on-startup>
        </servlet>
         <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener> 
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/dispatcher-servlet.xml
            </param-value>
        </context-param>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>*.htm</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>30</session-timeout>
        </session-config>
    </web-app>
    
    
    **persistence.xml**
    
    
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0"
        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_1_0.xsd">
        <persistence-unit name="localPersistenceUnitOne"
            transaction-type="RESOURCE_LOCAL">
            <provider>org.hibernate.ejb.HibernatePersistence</provider>
            <class>in.india.entities.CustomerDetails</class>
            <exclude-unlisted-classes />
            <properties>
                <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
                <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
                <property name="hibernate.jdbc.batch_size" value="0" />
                <property name="hibernate.show_sql" value="false" />
                <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/shankar?sslmode=require" />
                <property name="hibernate.connection.username" value="username" />
                <property name="hibernate.connection.password" value="password" />
                <property name="hibernate.hbm2ddl.auto" value="update" />
            </properties>
        </persistence-unit>
        <persistence-unit name="localPersistenceUnitTwo"
            transaction-type="RESOURCE_LOCAL">
            <provider>org.hibernate.ejb.HibernatePersistence</provider>
            <class>in.india.entities.CompanyDetails</class>
            <exclude-unlisted-classes />
            <properties>
                <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
                <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
                <property name="hibernate.jdbc.batch_size" value="0" />
                <property name="hibernate.show_sql" value="false" />
                <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/shankarTwo?sslmode=require" />
                <property name="hibernate.connection.username" value="username" />
                <property name="hibernate.connection.password" value="password" />
                <property name="hibernate.hbm2ddl.auto" value="update" />
            </properties>
        </persistence-unit>
    </persistence>
    
    
    **dispatcher-servlet**
    
    
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:task="http://www.springframework.org/schema/task" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
        default-autowire="byName"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd  
          http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
          http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc 
          http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
        <!-- Configure messageSource -->
    
        <mvc:annotation-driven />
        <context:component-scan base-package="in.india.*" />
        <bean id="messageResource"
            class="org.springframework.context.support.ResourceBundleMessageSource"
            autowire="byName">
            <property name="basename" value="messageResource"></property>
        </bean>
    
        <bean
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix">
                <value>/WEB-INF/jsp/</value>
            </property>
            <property name="suffix">
                <value>.jsp</value>
            </property>
        </bean>
    
    
    
        <bean id="entityManagerFactoryOne"
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
            autowire="constructor">
            <property name="persistenceUnitName" value="localPersistenceUnitOne" />
        </bean>
    
        <bean id="messageSource"
            class="org.springframework.context.support.ResourceBundleMessageSource"
            autowire="byName">
            <property name="basename" value="messageResource" />
        </bean>
    
        <bean id="entityManagerFactoryTwo"
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
            autowire="constructor">
            <property name="persistenceUnitName" value="localPersistenceUnitTwo" />
        </bean>
    
        <bean id="manager1" class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="entityManagerFactory" ref="entityManagerFactoryOne" />
        </bean>
    
        <bean id="manager2" class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="entityManagerFactory" ref="entityManagerFactoryTwo" />
        </bean>
    
        <tx:annotation-driven transaction-manager="manager1" />
        <tx:annotation-driven transaction-manager="manager2" />
    
        <!-- declare dependies here -->
    
        <bean class="in.india.service.dao.impl.CustomerServiceImpl" />
        <bean class="in.india.service.dao.impl.CompanyServiceImpl" />
    
        <!-- Configure MVC annotations -->
        <bean
            class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
        <bean
            class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
        <bean
            class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
    </beans>
    
    
    
    **java class to persist into one database**
    
    
    package in.india.service.dao.impl;
    
    import in.india.entities.CompanyDetails;
    import in.india.service.CompanyService;
    
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    
    import org.springframework.transaction.annotation.Transactional;
    
    public class CompanyServiceImpl implements CompanyService {
    
        @PersistenceContext(unitName = "entityManagerFactoryTwo")
        EntityManager entityManager;
    
        @Transactional("manager2")
        @Override
        public boolean companyService(CompanyDetails companyDetails) {
    
            boolean flag = false;
            try 
            {
                entityManager.persist(companyDetails);
                flag = true;
            } 
            catch (Exception e)
            {
                flag = false;
            }
    
            return flag;
        }
    
    }
    
    
    **java class to persist in another database** 
    
    package in.india.service.dao.impl;
    
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    
    import org.springframework.transaction.annotation.Transactional;
    
    import in.india.entities.CustomerDetails;
    import in.india.service.CustomerService;
    
    public class CustomerServiceImpl implements CustomerService {
    
        @PersistenceContext(unitName = "localPersistenceUnitOne")
        EntityManager entityManager;
    
        @Override
        @Transactional(value = "manager1")
        public boolean customerService(CustomerDetails companyData) {
    
            boolean flag = false;
            entityManager.persist(companyData);
            return flag;
        }
    }
    
    
    **customer.jsp**
    
    <%@page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
        <center>
            <h1>SpringWithMultipleDatabase's</h1>
        </center>
        <form:form method="GET" action="addCustomer.htm"  modelAttribute="customerBean" >
            <table>
                <tr>
                    <td><form:label path="firstName">First Name</form:label></td>
                    <td><form:input path="firstName" /></td>
                </tr>
                <tr>
                    <td><form:label path="lastName">Last Name</form:label></td>
                    <td><form:input path="lastName" /></td>
                </tr>
                <tr>
                    <td><form:label path="emailId">Email Id</form:label></td>
                    <td><form:input path="emailId" /></td>
                </tr>
                <tr>
                    <td><form:label path="profession">Profession</form:label></td>
                    <td><form:input path="profession" /></td>
                </tr>
                <tr>
                    <td><form:label path="address">Address</form:label></td>
                    <td><form:input path="address" /></td>
                </tr>
                <tr>
                    <td><form:label path="age">Age</form:label></td>
                    <td><form:input path="age" /></td>
                </tr>
                <tr>
                    <td><input type="submit" value="Submit"/></td>
                 </tr>
            </table>
        </form:form>
    </body>
    </html>
    
    
    **company.jsp**
    
    
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>ScheduleJobs</title>
    </head>
    <body>
     <center><h1>SpringWithMultipleDatabase's</h1></center>
     <form:form method="GET" action="addCompany.htm"  modelAttribute="companyBean" >
     <table>
        <tr>
            <td><form:label path="companyName">Company Name</form:label></td>
            <td><form:input path="companyName" /></td>
        </tr>
        <tr>
            <td><form:label path="companyStrength">Company Strength</form:label></td>
            <td><form:input path="companyStrength" /></td>
        </tr>
        <tr>
            <td><form:label path="companyLocation">Company Location</form:label></td>
            <td><form:input path="companyLocation" /></td>
        </tr>
         <tr>
            <td>
                <input type="submit" value="Submit"/>
            </td>
        </tr>
     </table>
     </form:form>
    </body>
    </html>
    
    **index.jsp**
    
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Home</title>
    </head>
    <body>
     <center><h1>Multiple Database Connectivity In Spring sdfsdsd</h1></center>
    
    <a href='customerRequest.htm'>Click here to go on Customer page</a>
    <br>
    <a href='companyRequest.htm'>Click here to go on Company page</a>
    </body>
    </html>
    
    **success.jsp**
    
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>ScheduleJobs</title>
    </head>
    <body>
     <center><h1>SpringWithMultipleDatabase</h1></center>
        <b>Successfully Saved</b>
    </body>
    </html>
    
    **CompanyController**
    
    package in.india.controller;
    
    import in.india.bean.CompanyBean;
    import in.india.entities.CompanyDetails;
    import in.india.service.CompanyService;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    public class CompanyController {
    
        @Autowired
        CompanyService companyService;
    
        @RequestMapping(value = "/companyRequest.htm", method = RequestMethod.GET)
        public ModelAndView addStudent(ModelMap model) {
            CompanyBean companyBean = new CompanyBean();
            model.addAttribute(companyBean);
            return new ModelAndView("company");
        }
    
        @RequestMapping(value = "/addCompany.htm", method = RequestMethod.GET)
        public ModelAndView companyController(@ModelAttribute("companyBean") CompanyBean companyBean, Model model) {
            CompanyDetails  companyDetails = new CompanyDetails();
            companyDetails.setCompanyLocation(companyBean.getCompanyLocation());
            companyDetails.setCompanyName(companyBean.getCompanyName());
            companyDetails.setCompanyStrength(companyBean.getCompanyStrength());
            companyService.companyService(companyDetails);
            return new ModelAndView("success");
    
        }
    }
    
    **CustomerController**
    
    
    package in.india.controller;
    
    import in.india.bean.CustomerBean;
    import in.india.entities.CustomerDetails;
    import in.india.service.CustomerService;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    public class CustomerController {
    
        @Autowired
        CustomerService customerService;
    
        @RequestMapping(value = "/customerRequest.htm", method = RequestMethod.GET)
        public ModelAndView addStudent(ModelMap model) {
            CustomerBean customerBean = new CustomerBean();
            model.addAttribute(customerBean);
            return new ModelAndView("customer");
        }
    
        @RequestMapping(value = "/addCustomer.htm", method = RequestMethod.GET)
        public ModelAndView customerController(@ModelAttribute("customerBean") CustomerBean customer, Model model) {
            CustomerDetails customerDetails = new CustomerDetails();
            customerDetails.setAddress(customer.getAddress());
            customerDetails.setAge(customer.getAge());
            customerDetails.setEmailId(customer.getEmailId());
            customerDetails.setFirstName(customer.getFirstName());
            customerDetails.setLastName(customer.getLastName());
            customerDetails.setProfession(customer.getProfession());
            customerService.customerService(customerDetails);
            return new ModelAndView("success");
    
        }
    }
    
    
    **CompanyDetails Entity**
    
    
    package in.india.entities;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.SequenceGenerator;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "company_details")
    public class CompanyDetails {
    
        @Id
        @SequenceGenerator(name = "company_details_seq", sequenceName = "company_details_seq", initialValue = 1, allocationSize = 1)
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "company_details_seq")
        @Column(name = "company_details_id")
        private Long companyDetailsId;
        @Column(name = "company_name")
        private String companyName;
        @Column(name = "company_strength")
        private Long companyStrength;
        @Column(name = "company_location")
        private String companyLocation;
    
        public Long getCompanyDetailsId() {
            return companyDetailsId;
        }
    
        public void setCompanyDetailsId(Long companyDetailsId) {
            this.companyDetailsId = companyDetailsId;
        }
    
        public String getCompanyName() {
            return companyName;
        }
    
        public void setCompanyName(String companyName) {
            this.companyName = companyName;
        }
    
        public Long getCompanyStrength() {
            return companyStrength;
        }
    
        public void setCompanyStrength(Long companyStrength) {
            this.companyStrength = companyStrength;
        }
    
        public String getCompanyLocation() {
            return companyLocation;
        }
    
        public void setCompanyLocation(String companyLocation) {
            this.companyLocation = companyLocation;
        }
    }
    
    
    **CustomerDetails Entity**
    
    package in.india.entities;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.SequenceGenerator;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "customer_details")
    public class CustomerDetails {
    
        @Id
        @SequenceGenerator(name = "customer_details_seq", sequenceName = "customer_details_seq", initialValue = 1, allocationSize = 1)
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "customer_details_seq")
        @Column(name = "customer_details_id")
        private Long customerDetailsId;
        @Column(name = "first_name ")
        private String firstName;
        @Column(name = "last_name ")
        private String lastName;
        @Column(name = "email_id")
        private String emailId;
        @Column(name = "profession")
        private String profession;
        @Column(name = "address")
        private String address;
        @Column(name = "age")
        private int age;
        public Long getCustomerDetailsId() {
            return customerDetailsId;
        }
    
        public void setCustomerDetailsId(Long customerDetailsId) {
            this.customerDetailsId = customerDetailsId;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
        public String getEmailId() {
            return emailId;
        }
    
        public void setEmailId(String emailId) {
            this.emailId = emailId;
        }
    
        public String getProfession() {
            return profession;
        }
    
        public void setProfession(String profession) {
            this.profession = profession;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    
  6. ==============================

    6.잘. 마침내 나는이 방법으로 내 문제를 해결했다.

    잘. 마침내 나는이 방법으로 내 문제를 해결했다.

    첫째, 다른 dataSource와 sessionFactory를 추가하십시오.

    둘째 : 또 다른 sessionFactory (implicit another dataSource)를 사용하는 모든 DAO에 bean을 hibernate conf의 끝에 추가하십시오. 이렇게 :

    <bean id="courseDAO" class="com.app.CourseDAOHibernate">
            <property name="sessionFactory" ref="sessionFactory2"/>
        </bean>
    

    "sessionFactory"를 사용하는 모든 DAO는 자동으로 주입되지만, 다른 데이터 소스를 사용하는 다른 DAO의 경우에는 그 예제처럼 명시 적으로 주입해야합니다.

    결국 그것이 성공적인 해결책인지는 모르겠지만 그것이 나를 위해 일하고 있습니다.

  7. ==============================

    7.나는 나의 예를 너무 추가 할 것이다. 어쩌면 한 데이터베이스의 데이터를 가져 와서 EntityManager로 다른 데이터베이스에 쓰는 것과 같은 다른 상황에 유용 할 것입니다.

    나는 나의 예를 너무 추가 할 것이다. 어쩌면 한 데이터베이스의 데이터를 가져 와서 EntityManager로 다른 데이터베이스에 쓰는 것과 같은 다른 상황에 유용 할 것입니다.

    그래서 내 applicationContext.xml :

    <context:annotation-config />
    <tx:annotation-driven transaction-manager="transactionManager" />
    
    <!-- Connection 1 -->
    
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
      <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="persistenceUnitName" value="unitRemote" />
      <property name="packagesToScan" value="business.domain" />
    </bean>
    
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
      <property name="url" value="jdbc:oracle:thin:@remote_host:1521:xe" />
      <property name="username" value="USER" />
      <property name="password" value="PASSWORD" />
    </bean>
    
    
    <!-- Connection 2 -->
    
    <bean id="transactionManagerLocal" class="org.springframework.orm.jpa.JpaTransactionManager">
      <property name="entityManagerFactory" ref="entityManagerFactoryLocal" />
    </bean>
    
    <bean id="entityManagerFactoryLocal" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource" ref="dataSourceLocal" />
      <property name="persistenceUnitName" value="unitLocal" />
      <property name="packagesToScan" value="local.business.domain" />
    </bean>
    
    <bean id="dataSourceLocal" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
      <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
      <property name="username" value="USER_LOC" />
      <property name="password" value="PASSWORD_LOC" />
    </bean>
    

    business.domain 패키지에는 원격 연결을위한 엔티티 클래스가 있습니다.

    local.business.domain 패키지에는 로컬 연결을위한 엔터티가 있습니다.

    엔티티에는 열과 관계에 대한 주석 매핑이 있습니다.

    그런 다음 2 DAO 수업 :

    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import org.springframework.stereotype.Repository;
    import org.springframework.transaction.annotation.Transactional;
    
    @Repository
    public class RemoteDao {
    
      @PersistenceContext(unitName="unitRemote")
      protected EntityManager em;
    
      // ...
    
    }
    

    import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @저장소 @ 트랜잭션 (value = "transactionManagerLocal") public class LocalDao {   @PersistenceContext (unitName = "unitLocal")   보호 된 EntityManager em;   // ... } 이것으로 @Autowired를 사용하여 JUnit 테스트에 DAO를 삽입 할 수 있습니다. import org.junit.Test; import org.junit.runner.RunWith; org.springframework.beans.factory.annotation.Autowired를 가져 오십시오. org.springframework.test.context.ContextConfiguration 가져 오기 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (locations = { "/config/applicationContext.xml"}) 공용 클래스 DaoTest {   @Autowired   개인 RemoteDao remoteDao;   @Autowired   개인 LocalDao localDao;   @테스트   공개 무효 daoTest () {     엔티티 엔티티 = remoteDao.find (id);     localDao.persist (엔터티);   } } 따라서 간단한 애플리케이션, 테스트 또는 DB 마이그레이션 스크립트에 필요한 경우 서비스없이 DAO를 사용할 수 있습니다.

  8. ==============================

    8.나는 아래와 같이 이것을 할 수 있었다.

    나는 아래와 같이 이것을 할 수 있었다.

                         기본 세션 팩토리에 대한 transactionManger는 기본적으로 사용 가능하며 (기본값은 primary = true로 인한 것임) 다른 트랜잭션 요구 사항은 Transactional annotation에서 지정해야합니다. @Service ( "ABCRead") @ 트랜잭션 (값 = "abcTransactionManager") 공용 클래스 ABCRead {   @Autowired   AbcImpl abcImpl; // abcSessionFactory에 연결합니다.   @Autowired   XYZImpl xyzImpl; // oracleSessionFactory에 연결합니다. @서비스 @저장소 @ 트랜잭션 ( "abcTransactionManager") 공용 클래스 AbcImpl {   @Autowired   private SessionFactory sessionFactory; @서비스 공용 클래스 XYZImpl {   @Autowired   private SessionFactory sessionFactory;

  9. from https://stackoverflow.com/questions/5843953/hibernate-using-multiple-databases by cc-by-sa and MIT license