在一些项目中需要同时操作两个数据库,比如定时给数据库做数据同步,将A数据库中的数据复制到B中。
spring: datasource: db1: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=db_EQMSData username: sa password: rollshop db2: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=db_EQMSData_02 username: sa password: rollshop
sqlite数据库配置
<dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.21.0.1</version> </dependency>
driver-class-name: org.sqlite.JDBC url: jdbc:sqlite::resource:static/sqlite/db_C808_spot_check_test_sqlite.db username: password:
db1数据库(主库)
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration @MapperScan(basePackages = "com.electric.dao.db1", sqlSessionTemplateRef = "db01SqlSessionTemplate") public class DataSource01Config { @Bean(name = "db01DataSource") @ConfigurationProperties(prefix = "spring.datasource.db1") @Primary public DataSource db01DataSource() { return DruidDataSourceBuilder.create().build(); } @Bean(name = "db01SqlSessionFactory") @Primary public SqlSessionFactory db01SqlSessionFactory(@Qualifier("db01DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); // 注意,这里是getResources()方法,不是getResource() bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/temp/dao/db1/*.xml")); return bean.getObject(); } @Bean(name = "db01TransactionManager") @Primary public DataSourceTransactionManager db01TransactionManager(@Qualifier("db01DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "db01SqlSessionTemplate") @Primary public SqlSessionTemplate db01SqlSessionTemplate(@Qualifier("db01SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } }
db2数据库(从库)
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.type.JdbcType; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.boot.autoconfigure.MybatisProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; import java.io.IOException; import java.util.Optional; import java.util.stream.Stream; @Configuration @MapperScan(basePackages = "com.electric.dao.db2", sqlSessionTemplateRef = "db02SqlSessionTemplate") public class DateSource02Config { @Autowired private MybatisProperties properties; @Bean(name = "db02DataSource") @ConfigurationProperties(prefix = "spring.datasource.db2") public DataSource db02DataSource() { return DruidDataSourceBuilder.create().build(); } @Bean(name = "db02SqlSessionFactory") public SqlSessionFactory db02SqlSessionFactory(@Qualifier("db02DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); // 注意,这里是getResources()方法,不是getResource() bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/temp/dao/db2/*.xml")); return bean.getObject(); } @Bean(name = "db02TransactionManager") public DataSourceTransactionManager testTransactionManager(@Qualifier("db02DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "db02SqlSessionTemplate") public SqlSessionTemplate db02SqlSessionTemplate(@Qualifier("db02SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } }