/ / Come configurare più origini dati MyBatis in Spring Boot? - spring-boot, origine dati, database multipli, spring-mybatis

Come configurare più origini dati MyBatis in Spring Boot? - spring-boot, datasource, multiple-databases, spring-mybatis

Con MyBatis-Spring-Boot-Starter, possiamo facilmenteintegrare MyBatis con Spring Boot, funziona perfettamente per una fonte di dati. Tuttavia, ora vorremmo aggiungere un'ulteriore fonte di dati nel nostro progetto, purtroppo non sembra facile. Nella documentazione ufficiale di MyBatis, vedo il seguente contenuto:

MyBatis-Spring-Boot-Starter:

  • Rilevamento automatico di un'origine dati esistente.
  • Creerà e registrerà un'istanza di un SqlSessionFactoryBean passando tale DataSource come input.
  • Creerà e registrerà un'istanza di SqlSessionTemplate estratta da SqlSessionFactoryBean.

Sembra che MyBatis-Spring-Boot-Starter al momento supporti solo una fonte di dati. Quindi, la domanda è: come configurare più origini dati MyBatis in Sping Boot?

risposte:

0 per risposta № 1

Qualcosa del genere alla tua primavera 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 per risposta № 2

Hai delineato 3 bean necessari per l'integrazione di MyBatis + Spring. Questi vengono creati automaticamente per una singola origine dati.

Se sono necessarie due origini dati, è necessario creare3 bean per ogni origine dati esplicitamente. Quindi creerai 6 bean (2 di tipo DataSource, 2 di tipo SqlSessionFactoryBean e 2 di tipo SqlSessionFactoryBean).

Per associare DAO a determinate origini dati, è necessario utilizzare sqlSessionTemplateRef o sqlSessionFactoryRef parametro di @MapperScan annotazione.

Inoltre non consiglio di andare giù per l'inferno XML. Lo stavo usando in questo modo in PROD, con due fonti di dati, senza brutte configurazioni XML su vari progetti. Anche le query SQL erano annotate.

Peccato che la documentazione di MyBatis non sia eccezionale e che la maggior parte degli esempi siano in XML.