To configure multiple data sources using Spring 3 and MyBatis 3
Make Following Changes In applicationContext.xml
Step 1: Configure the data source beans
<!-- DataSource 1 -->
<bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db1" />
<property name="username" value="username1" />
<property name="password" value="password1" />
</bean>
<!-- DataSource 2 -->
<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db2" />
<property name="username" value="username2" />
<property name="password" value="password2" />
</bean>
Step 2: Configure the SqlSessionFactory beans
<!-- SqlSessionFactory for DataSource 1 -->
<bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource1" />
<property name="mapperLocations" value="classpath:mappers1/*.xml" />
</bean>
<!-- SqlSessionFactory for DataSource 2 -->
<bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource2" />
<property name="mapperLocations" value="classpath:mappers2/*.xml" />
</bean>
Step 3: Configure the MapperScannerConfigurer beans
<!-- MapperScannerConfigurer for DataSource 1 -->
<bean id="mapperScannerConfigurer1" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper1" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory1" />
</bean>
<!-- MapperScannerConfigurer for DataSource 2 -->
<bean id="mapperScannerConfigurer2" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper2" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory2" />
</bean>
Step 4: Now You can configured above things in your code as per
requirements
@Component
public class MyComponent {
private SqlSessionFactory sqlSessionFactory;
private MyMapper myMapper;
@Autowired
public MyComponent(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory,
@Qualifier("myMapper1") MyMapper myMapper) {
this.sqlSessionFactory = sqlSessionFactory;
this.myMapper = myMapper;
}
// Use the sqlSessionFactory and myMapper in your component's methods
// ...
}
Note:
Create separate mapper interfaces and XML files for each data source, corresponding to the basePackage values used in step 3