Springboot如何同时连接两个数据库

首页   /   新闻资讯   /   正文

        在一些项目中需要同时操作两个数据库,比如定时给数据库做数据同步,将A数据库中的数据复制到B中。

yml配置

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:

config配置

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);     } }