0

Mit Mybatis-Spring-Boot-Starter, können wir Mybatis mit Frühlings-Stiefel, es funktioniert perfekt für eine Datenquelle leicht integrieren. Jetzt möchten wir jedoch eine zusätzliche Datenquelle in unserem Projekt hinzufügen, leider scheint es nicht einfach. In Mybatis offiziellen Dokumentation, sehe ich die folgenden Inhalt:Wie konfiguriere ich mehrere MyBatis-Datenquellen im Spring Boot?

Mybatis-Spring-Boot-Starter wird:

  • Autodetect eine bestehende Datasource.
  • Wird eine Instanz eines SqlSessionFactoryBean erstellen und registrieren, die Datasource als Eingabegeben.
  • erstellen und eine Instanz eines SqlSessionTemplate registrieren stieg aus dem SqlSessionFactoryBean.

Es sieht aus wie Mybatis-Spring-Boot-Starter nur eine Datenquelle in diesem Moment unterstützt. Also, die Frage ist, wie mehrere MyBatis Datenquellen in Sping Boot zu konfigurieren?

+0

http://stackoverflow.com/questions/40743889/spring-boot-with-multiple-datasources-oracle-and-h2/40754500#40754500 – k19421

Antwort

0

Etwas so wie diese zu Ihrem Frühjahr servlet.xml:

<bean id="db2dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
      <property name="driverClassName"><value>${db2.database.driver}</value></property> 
      <property name="url"><value>${db2.database.url}</value></property> 
      <property name="username"><value>${db2.database.username}</value></property> 
      <property name="password"><value>${db2.database.password}</value></property> 
      <property name="maxActive"><value>${db2.database.maxactiveconnections}</value></property> 
      <property name="maxIdle"><value>${db2.database.idleconnections}</value></property> 
      <property name="initialSize"><value>${db2.database.initialSize}</value></property> 

    </bean> 

    <bean id="db2SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
     <property name="dataSource" ref="db2dataSource" /> 
     <property name="configLocation" value="/WEB-INF/mybatis-config.xml"/> 
    </bean> 

    <bean id="db2Dao" class="org.mybatis.spring.mapper.MapperFactoryBean"> 
     <property name="sqlSessionFactory" ref="db2SqlSessionFactory"/> 
     <property name="mapperInterface" value="com.dao.db2Dao" /> 
    </bean> 

     <bean id="oracledataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
      <property name="driverClassName"><value>${oracle.database.driver}</value></property> 
      <property name="url"><value>${oracle.database.url}</value></property> 
      <property name="username"><value>${oracle.database.username}</value></property> 
      <property name="password"><value>${oracle.database.password}</value></property> 
      <property name="maxActive"><value>${oracle.database.maxactiveconnections}</value></property> 
      <property name="maxIdle"><value>${oracle.database.idleconnections}</value></property> 
      <property name="initialSize"><value>${oracle.database.initialSize}</value></property> 

    </bean> 
    <bean id="oracleSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
     <property name="dataSource" ref="oracledataSource" /> 
     <property name="configLocation" value="/WEB-INF/mybatis-config.xml"/> 
    </bean> 
    <bean id="oracleoardDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> 
     <property name="sqlSessionFactory" ref="oracleSqlSessionFactory"/> 
     <property name="mapperInterface" value="com.lodige.clcs.dao.oracleoardDao" /> 
    </bean> 
+0

danke für Ihre rechtzeitige Antwort, aber das ist nicht Spring-Boot-Stil, Eine der großartigsten magischen Eigenschaften von Spring-Boot ist die automatische Konfiguration. Ich versuche immer noch die minimale Konfiguration zu verwenden, um es zum Laufen zu bringen. – qianlei

0

Sie skizzierte 3 Bohnen, die für Mybatis + Feder Integration benötigt werden. Diese werden automatisch für einzelne Datenquellen erstellt.

Wenn Sie zwei Datenquellen benötigen, müssen Sie explizit drei Beans für jede Datenquelle erstellen. Sie erstellen also 6 Beans (2 vom Typ DataSource, 2 vom Typ SqlSessionFactoryBean und 2 vom Typ SqlSessionFactoryBean).

Um ein DAO mit einer bestimmten Datenquelle zu verbinden, müssen Sie sqlSessionTemplateRef oder sqlSessionFactoryRef Parameter von @MapperScan Annotation verwenden.

Auch ich empfehle nicht, die XML-Hölle zu gehen. Ich benutzte es so in PROD, mit zwei Datenquellen, ohne hässliche XML-Konfigurationen in verschiedenen Projekten. Auch SQL-Abfragen wurden kommentiert.

Schade ist, dass MyBatis Dokumentation nicht großartig ist und die meisten Beispiele gibt es in XML.

+0

danke für Ihre schnelle Antwort, es ist eine gute Idee, 'sqlSessionTemplateRef' und' sqlSessionFactoryRef' Parameter der '@ MapperScan' Annotation zu verwenden, aber ich hoffe immer noch, ich könnte bei Spring-Boot-Autokonfiguration Stil bleiben – qianlei

+0

Ich glaube, es ist nicht möglich, wenn Sie haben zwei Datenquellen. Spring Boot Autoconfig funktioniert hervorragend mit einer Datenquelle. Spring Boot zielt hauptsächlich auf die Microservice-Welt, wo zwei Datenquellen Anti-Pattern sind. – luboskrnac