springboot如何连接两个数据库(多个)

网友投稿 497 2022-09-01


springboot如何连接两个数据库(多个)

目录一、启动类二、application.yml文件三、创建配置类四 、结构五、多数据源的事物问题

一、启动类

1.启动类需要不用加mybatis的@MapperScan注解

@SpringBootApplication

public class AppPush {

public static void main(String[] args) {

SpringApplication.run(AppPush.class,args);

}

}

二、application.yml文件

配置俩个或多个数据库连接,我这里用的是postgresql,用mysql等也是一样

spring:

datasource:

# driver-class-name: org.postgresql.Driver

# url: jdbc:postgresql://127.0.0.1/aaa

# username: root

# password: root

one:

driver-class-name: org.postgresql.Driver

url: jdbc:postgresql://127.0.0.1/aaa

username: root

password: root

two:

driver-class-name: org.postgresql.Driver

url: jdbc:postgresql://127.0.0.1/bbb

username: root

password: root

三、创建配置类

1.注意:@MapperScan 的basePackages就是你包的路径 ,

sqlSessionFactoryRef 可以随便起名 但是着两个类不能重复!

One配置类

package com.wys.config;

import org.apache.ibatis.session.SqlShttp://essionFactory;

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.beans.factory.annotation.Value;

import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;

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.PathMatchingResouhttp://rcePatternResolver;

import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

/**

* @program:

* @description: 数据库配置1

* @author: wys

* @create: 2019-12-03 16:20

**/

@Configuration

@MapperScan(bashttp://ePackages = "com.wys.mapper.**", sqlSessionFactoryRef = "oneSqlSessionFactory")

public class OneDataSourceConfig {

@Value("${spring.datasource.one.driver-class-name}")

String driverClass;

@Value("${spring.datasource.one.url}")

String url;

@Value("${spring.datasource.one.username}")

String userName;

@Value("${spring.datasource.one.password}")

String passWord;

@Primary

@Bean(name = "oneDataSource")

@ConfigurationProperties("spring.datasource.one")

public DataSource masterDataSource() {

DriverManagerDataSource dataSource = new DriverManagerDataSource();

dataSource.setDriverClassName(driverClass);

dataSource.setUrl(url);

dataSource.setUsername(userName);

dataSource.setPassword(passWord);

return dataSource;

}

@Bean(name = "oneSqlSessionFactory")

public SqlSessionFactory sqlSessionFactory(@Qualifier("oneDataSource") DataSource dataSource) throws Exception {

SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();

sessionFactoryBean.setDataSource(dataSource);

sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()

.getResources("classpath:mybatis/mapper-postgre/*.xml"));

return sessionFactoryBean.getObject();

}

@Bean(name = "oneSqlSessionTemplate")

public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("oneSqlSessionFactory")SqlSessionFactory sqlSessionFactory ) throws Exception {

return new SqlSessionTemplate(sqlSessionFactory);

}

}

Two配置类

package com.wys.config;

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.beans.factory.annotation.Value;

import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;

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.DriverManagerDataSource;

import javax.sql.DataSource;

/**

* @program:

* @description: 数据库配置2

* @author: wys

* @create: 2019-12-03 17:03

**/

@Configuration

@MapperScan(basePackages = "com.wys.mappers",sqlSessionFactoryRef = "twoSqlSessionFactory")

public class TwoDataSourceConfig {

@Value("${spring.datasource.two.driver-class-name}")

String driverClass;

@Value("${spring.datasource.two.url}")

String url;

@Value("${spring.datasource.two.username}")

String userName;

@Value("${spring.datasource.two.password}")

String passWord;

@Bean(name = "twoDataSource")

@ConfigurationProperties("spring.datasource.two")

public DataSource masterDataSource(){

DriverManagerDataSource dataSource = new DriverManagerDataSource();

dataSource.setDriverClassName(driverClass);

dataSource.setUrl(url);

dataSource.setUsername(userName);

dataSource.setPassword(passWord);

return dataSource;

}

@Bean(name = "twoSqlSessionFactory")

public SqlSessionFactory sqlSessionFactory(@Qualifier("twoDataSource") DataSource dataSource) throws Exception {

SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();

sessionFactoryBean.setDataSource(dataSource);

sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()

.getResources("classpath:mybatis/mapper-postgres/*.xml"));

return sessionFactoryBean.getObject();

}

@Bean(name = "twoSqlSessionTemplate")

public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("twoSqlSessionFactory")SqlSessionFactory sqlSessionFactory ) throws Exception {

return new SqlSessionTemplate(sqlSessionFactory);

}

}

四 、结构

可能有人不清楚项目的结构,我在下面放了一张类结构图,能更清晰和方便理解。

注意:和之前的项目的主要区别就是 mapper包多了一个,mapper的xml包也多了一个,不同的数据库mapper放到不同的包内就可以了。

五、多数据源的事物问题

在使用多数据源时,有可能会遇到事物失败的问题。我单独总结了一个文章。需要的话可以阅读一下。@Transactional注解异常报错之多数据源.


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python中typing模块的类型注解 基于typing的具名元组定义方法(python typing模块)
下一篇:pipenv graph 执行报错 IndexError: list index out of range pipenv安装模块出错
相关文章

 发表评论

暂时没有评论,来抢沙发吧~