Frühling und Mybatis mehr Datenquellen-Setup
-
13-10-2019 - |
Frage
Meine Anwendungen verwendet Spring3 + MyBatis3. Ich versuche, für die es mehrere Datenquelle einrichten. Setup aussieht wie:
<!-- db1 setup-->
<bean id="db1SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
p:configLocation="WEB-INF/mybatis/sqlMapConfig.xml"
p:dataSource-ref="db1DataSource" />
<bean id="db1SqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="db1SqlSessionFactory"/>
</bean>
<!-- db2 setup -->
<bean id="db2SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
p:configLocation="WEB-INF/mybatis/sqlMapConfig.xml"
p:dataSource-ref="db2DataSource" />
<bean id="db2SqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="db2SqlSessionFactory"/>
</bean>
In den Protokollen, ich habe diese Nachricht gefunden:
No unique bean of type [org.apache.ibatis.session.SqlSessionFactory] is defined: expected single matching bean but found 2: [db1SqlSessionFactory, db2SqlSessionFactory]
ich gegoogelt und in Mybatis Handbücher sah, konnte aber nicht Art und Weise, wie die Einrichtung mehrere Datenquellen mit Mybatis finden. Irgendwelche Ideen?
Lösung 2
gelöst, das Problem war, dass ich direkt Referenz angeben muß sqlSessionFactory
<bean id="myDao" class="org.mybatis.spring.mapper.MapperFactoryBean"
p:sqlSessionTemplate-ref="db1SqlSessionTemplate"
p:mapperInterface="my.project.domain.dao.MyDao"
p:sqlSessionFactory-ref="db1SqlSessionFactory"/>
Andere Tipps
auch gelöst! Referenz nur Ihre Fabrik Bohne in MapperScannerConfigurer: sqlSessionFactoryBeanName
Erste Datenquelle >>>>>>>
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource1"/>
</bean>
<bean id="MapperScannerConfigurer1" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.package.p1"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory1"/>
</bean>
Zweite Datenquelle >>>>>>
<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource2"/>
</bean>
<bean id="MapperScannerConfigurer1" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.package.p2"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory2"/>
</bean>
In einer DAO Implementierung Verwendung SqlSessionTemplate
statt SqlSessionDaoSupport
. Inject Bohne db1SqlSessionTemplate
oder db2SqlSessionTemplate
.
@Repository
public class TestDaoImpl implements TestDao{
@Autowired
private SqlSession db1SqlSessionTemplate;
...
db1SqlSessionTemplate.selectList("testSelect");
...
}
Wenn SqlSessionDaoSupport
Verlängerung der Kontext Frühling nicht wissen, dass Sie SqlSession
verwenden.