springboot07-不同种类的多数据源整合

前言:

我们之前用的数据库是postgresql,现在要用mysql,我自己又重新建了一个mysql的,但数据要得迁移过去,所以就想到了这个多数据源的方式!

1.添加依赖:

<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- alibaba的druid数据库连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.6</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
		</dependency>
		<dependency>
			<groupId>org.postgresql</groupId>
			<artifactId>postgresql</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.0</version>
		</dependency>

2.添加数据库配置,数据库1和2的前缀(lbbdatasource.druid和lbbdatasource.druid2)是我任意起的,想改用阿里的数据源,配置的lbbdatasource.druid.type没有起作用,哪位大神帮忙看看

lbbdatasource.druid.url=jdbc:postgresql://xxxxxx
lbbdatasource.druid.driver-class=org.postgresql.Driver 
lbbdatasource.druid.username=xxxx
lbbdatasource.druid.password=xxx
#没有起作用 
lbbdatasource.druid.type=com.alibaba.druid.pool.DruidDataSource 

lbbdatasource.druid2.url=jdbc:mysql://xxxxxxxx?useSSL=false&useUnicode=true&characterEncoding=utf-8 
lbbdatasource.druid2.driver-class=com.mysql.jdbc.Driver 
lbbdatasource.druid2.username=xx
lbbdatasource.druid2.password=xxxx
#没有起作用 
lbbdatasource.druid2.type=com.alibaba.druid.pool.DruidDataSource

3.更改数据连接,要注意的是@Primary注释只能在一个数据库中配置,不然系统无法分清哪个是主库,导入用import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.lbb.db1", sqlSessionTemplateRef  = "db1SqlSessionTemplate")
public class DbOneConfig {
    @Bean(name = "db1DataSource")
    @ConfigurationProperties(prefix = "lbbdatasource.druid")
    @Primary
    public DataSource testDataSource() {
        return  DataSourceBuilder.create().build();
    }

    @Bean(name = "db1SqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatisOne/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "db1TransactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "db1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
@Configuration
@MapperScan(basePackages = "com.lbb.db2", sqlSessionTemplateRef  = "db2SqlSessionTemplate")
public class DbTwoConfig {
    @Bean(name = "db2DataSource")
    @ConfigurationProperties(prefix = "lbbdatasource.druid2")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }


    @Bean(name = "db2SqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatisTwo/*.xml"));
        return bean.getObject();
    }


    @Bean(name = "db2TransactionManager")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("db2DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }


    @Bean(name = "db2SqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

4.controller访问(dao层自己任意建一个,重点不在这里),每次访问接口的时候,打印一下看看是哪个driver

 @Autowired
    private DataSource dataSource;

    List< Map<String,Object>> listmap = new ArrayList< Map<String,Object>>();

    @RequestMapping("getValue")
    public String getValue() throws SQLException {
         listmap=dbOneDao.getValue();

        Connection connection = dataSource.getConnection();
        System.out.println("@@@@接口getValue访问数据的类型:"+connection);
        return "success";
    }

    @RequestMapping("setValue")
    public String setValue() throws SQLException{
       dbTwoDao.setValue(listmap);
        Connection connection = dataSource.getConnection();
        System.out.println("@@@@接口getValue访问数据的类型:"+connection);
        return "success";
    }

完成!

遗留问题:

我想改用阿里巴巴的连接池,lbbdatasource.druid.type没有起作用,网上有说springboot默认不支持阿里的,得配置

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

可依然没有解决问题,哪位大神帮忙看看!

参考:纯洁的微笑,mybaits多数据源问题

发布了23 篇原创文章 · 获赞 3 · 访问量 6858

猜你喜欢

转载自blog.csdn.net/weixin_41834814/article/details/79812940