springboot配置多个数据库连接,spring连接多个数据库
目录
一、导入相关砰的一声文件二、application.yml配置文件编写三、数据库连接配置文件四、主启动类注解修改五、测试在实际项目开发中可能存在需要同时操作两个数据库的场景,比如从英语字母表中第一个字母库读取数据,进行操作后往仓库库中写入数据,此时就需要进行多数据库配置。本文以操作本地和线上的关系型数据库数据库为例:
一、导入相关pom文件
依赖关系组id MySQL/groupId artifactId MySQL-connector-Java/artifactId作用域运行时/作用域/依赖性依赖关系groupIdorg.springframework.boot/groupId artifactId spring-boot-starter-JDBC/artifactId/依赖项依赖关系groupIdorg.mybatis/groupId手工制品Id my batis/手工制品id版本3 .5 .5/版本/依赖关系依赖关系groupIdcom.alibaba/groupId人工德鲁伊/人工版本1 .2 .3/版本/依赖关系依赖关系groupIdorg.mybatis/groupId工艺品mybatis-spring/artifactId版本
二、application.yml配置文件编写
单数据源的配置如下:
spring :数据源:驱动程序类名称: com。MySQL。CJ。JDBC。驱动程序URL : JDBC :我的SQL ://127。0 .0 .1:3306/餐_点?使用SSL=false使用unicode=true字符编码=UTF-8服务器时区=GMT 8用户名: root密码: root类型: com。阿里巴巴。德鲁伊。游泳池。德鲁伊数据源多数据源的配置如下:
spring :数据源: dev :驱动程序类名称: com。MySQL。CJ。JDBC。司机JDBC网址: JDBC :我的SQL ://XXX。xx。xx。xx:3306/餐_单?使用SSL=false使用unicode=true字符编码=UTF-8服务器时区=GMT 8用户名: root密码: root类型: com。阿里巴巴。德鲁伊。游泳池。德鲁伊数据源本地:驱动类名称: com。MySQL。CJ。JDBC。司机JDBC网址: JDBC 3360 MySQL ://127。0 .0 .1:33300使用SSL=false使用unicode=true字符编码=UTF-8服务器时区=GMT 8用户名:根
password: root type: com.alibaba.druid.pool.DruidDataSource经过对比可以发现:1、多数据源的配置中需要指定具体的名称来区分不同的数据库(上述配置中的dev和local,名称可以根据具体需求自定义)2、需要使用jdbcUrl代替url
三、数据库连接配置文件
dev数据源配置文件:
@Configuration@MapperScan(basePackages = "com.multiple.mapper.dev",sqlSessionFactoryRef = "devSqlSessionFactory")public class DevDataSourceConfig { @Primary @Bean(name = "devDataSource") @ConfigurationProperties("spring.datasource.dev") public DataSource masterDataSource(){ return DataSourceBuilder.create().build(); } @Bean(name = "devSqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("devDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath:mapping/dev/*.xml")); return sessionFactoryBean.getObject(); }}
local数据源配置文件:
@Configuration@MapperScan(basePackages = "com.multiple.mapper.local",sqlSessionFactoryRef = "localSqlSessionFactory")public class LocalDataSourceConfig { @Primary @Bean(name = "localDataSource") @ConfigurationProperties("spring.datasource.local") public DataSource masterDataSource(){ return DataSourceBuilder.create().build(); } @Bean(name = "localSqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("localDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath:mapping/local/*.xml")); return sessionFactoryBean.getObject(); }}
不同配置文件通过@MapperScan注解的内容来区分不同数据库下的mapper文件,通过@ConfigurationProperties注解来加载指定的数据源
以DevDataSourceConfig为例
四、主启动类注解修改
@SpringBootApplication(exclude={<!--{C}%3C!%2D%2D%20%2D%2D%3E-->DataSourceAutoConfiguration.class})
目录结构如下:
五、测试
从dev库中查询数据,取出字段插入local库中:
public interface DevMapper { @Select("select * from test") List<Test> getAllTest();}
public interface LocalMapper { @Insert("insert into payment(serial) values (#{name})") int insertMessage(String name);}
@SpringBootTestclass MultipleDatabaseApplicationTests { @Autowired private DevMapper devMapper; @Autowired private LocalMapper localMapper; @Test void contextLoads() { List<com.multiple.pojo.Test> testList = devMapper.getAllTest(); for(com.multiple.pojo.Test test : testList){ localMapper.insertMessage(test.getAa()); } }}
运行测试代码,从dev库中查出的数据可以成功添加至local库该方法也适用需要使用多种不同的数据库的场景,比如MySQL和Oracle,修改数据源配置文件即可
到此这篇关于SpringBoot项目中同时操作多个数据库的实现方法的文章就介绍到这了,更多相关SpringBoot项目操作多个数据库内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。