spring boot 链接两个数据源,操作两个数据库(可以多个) 您所在的位置:网站首页 springboot配置多个数据源oracle spring boot 链接两个数据源,操作两个数据库(可以多个)

spring boot 链接两个数据源,操作两个数据库(可以多个)

2023-11-06 07:26| 来源: 网络整理| 查看: 265

readme: 本文实现在同一个springboot服务上配置两个数据库源,如果想要添加更多数据库源,或者不同服务器的数据库源均可,文中会提示如何操作。

1.数据源配置文件:

数据源配置文件内容如下:

spring: datasource: aaa: driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db_aa?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false username: root password: *** bbb: driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db_bb?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false username: root password: ***

如果按树结构去写配置文件,一定要注意缩进以及表达的含义。

2.修改springboot服务启动文件:PreprocessServiceApplication.java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) @SpringBootApplication() @EnableDiscoveryClient @EnableEurekaClient public class PreprocessServiceApplication { public static void main(String[] args) { SpringApplication.run(PreprocessServiceApplication.class, args); } }

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})意为:去掉springboot服务启动时对于数据源配置的自动导入。后面我们会手动配置多个数据源。 如果有需要,也可把事务管理与mybatis的自动导入去掉,注解为: @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})

3.配置两个数据源(也可多个)

注:以下三个文件都在config包下 DataSourceConfig.java

import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; @Configuration public class DataSourceConfig { @Primary @Bean(name = "aaa") @ConfigurationProperties(prefix = "spring.datasource.aaa") public DataSource dataSourcePreprocess() { return DataSourceBuilder.create().build(); } @Primary @Bean(name = "bbb") @ConfigurationProperties(prefix = "spring.datasource.bbb") public DataSource dataSourceSentence() { return DataSourceBuilder.create().build(); } //如果有更多的数据源需要,在此添加相关的bean,注意bean属性name,@ConfigurationProperties为配置文件配置数据源的前缀 //有一个bean就要对于在config文件夹创建对应的xxxConfig.java文件生成工厂 }

aaaConfig.java

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.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; @Configuration @MapperScan(basePackages = {"com.dao.aaa"}, sqlSessionFactoryRef = "sqlSessionFactory1") public class MybatisPreprocessConfig { @Autowired @Qualifier("aaa") private DataSource ds1; @Bean(name = "sqlSessionFactory1") @Primary public SqlSessionFactory sqlSessionFactory1() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(ds1); return sqlSessionFactoryBean.getObject(); } @Bean @Primary public SqlSessionTemplate sqlSessionTemplate1() throws Exception { SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory1()); return sqlSessionTemplate; } }

bbbConfig.java

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.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; @Configuration @MapperScan(basePackages = {"com.dao.bbb"}, sqlSessionFactoryRef = "sqlSessionFactory2") public class MybatisSentenceConfig { @Autowired @Qualifier("bbb") private DataSource ds2; @Bean(name = "sqlSessionFactory2") @Primary public SqlSessionFactory sqlSessionFactory2() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(ds2); return sqlSessionFactoryBean.getObject(); } @Bean @Primary public SqlSessionTemplate sqlSessionTemplate2() throws Exception { SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory2()); return sqlSessionTemplate; } } 4.dao包结构如下: dao aaa xxxdao.java bbb yyydao.java ccc zzzdao.java

一定注意!!一个数据源对应dao下面的一个子包!

5.运行测试

自己测。。

参考链接: https://blog.csdn.net/mengda_lei/article/details/81484355 https://blog.csdn.net/weixin_40085570/article/details/80968099



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有