0

MyBatis-Spring-Boot-Starterでは、MyBatisをSpringBootと簡単に統合することができます。これは1つのデータソースに対して完全に機能します。しかし、プロジェクトに余分なデータソースを追加したいと思いますが、残念ながらそれは容易ではないようです。 MyBatisの公式ドキュメントで 、私は、次の内容を参照してください。Spring起動時に複数のMyBatisデータソースを設定するには?

MyBatisの-春ブーツ・スターターます:

  • 自動検出、既存のデータソース。
  • そのDataSourceを入力として渡すSqlSessionFactoryBeanのインスタンスを作成して登録します。
  • SqlSessionFactoryBeanから取り出したSqlSessionTemplateのインスタンスを作成して登録します。

MyBatisの-春ブーツ-スターターはこの時点で一つだけのデータソースをサポートしているように見えます。では、Sping Bootに複数のMyBatisデータソースを設定する方法がありますか?

+0

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

答えて

0

このような何かこれをあなたの春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

タイムリーな応答に感謝しますが、これは春の起動スタイルではありません。春のブートの最大の魔法の一つは自動設定ですが、私はまだそれを動作させるために最低限の設定を使用しようとしています。 – qianlei

0

あなたはMyBatisの+ Spring統合のために必要とされる3つの豆を概説。これらは、単一のデータソースに対して自動的に作成されます。

2つのデータソースが必要な場合は、各データソースに対して3つのBeanを明示的に作成する必要があります。つまり、6つのBean(DataSource型のうち2つ、SqlSessionFactoryBean型の2つ、SqlSessionFactoryBean型の2つ)を作成します。

特定のデータソースでDAOをバインドするには、sqlSessionTemplateRefまたはsqlSessionFactoryRefというパラメータを@MapperScan注釈の使用する必要があります。

また、XML地獄を下ることはお勧めしません。私は、PRODでこの方法で2つのデータソースを使用していましたが、さまざまなプロジェクトで醜いXML設定を使用することはありませんでした。また、SQLクエリに注釈が付けられました。

MyBatisのドキュメントは素晴らしいものではなく、XMLのほとんどの例があります。

+0

あなたの即刻のお返事ありがとうございます。 '@ MapperScan'アノテーションの' sqlSessionTemplateRef'と 'sqlSessionFactoryRef'パラメータを使用することをお勧めしますが、私はまだspring-bootの自動設定スタイルに固執したいと考えています – qianlei

+0

2つのデータソースがあります。 Springブート自動設定は、1つのデータソースでうまく動作します。 Spring Bootは主にマイクロサービスの世界をターゲットにしています。ここでは、2つのデータソースがアンチパターンです。 – luboskrnac

関連する問題