SpringBoot多数据源

某项目需要做数据同步,还是不同数据库,所以创建了一个多数据源项目,后期如果想做相关方面的处理,只需要重新配置DBConfig,新建DAO,Entity等。

1.创建一个springboot项目,导入Springboot所需要的包和mysql,pgsql的包
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.10</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.22</version>
</dependency>
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.13</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.2.0</version>
</dependency>
2.项目目录结构,DB1为mysql数据库,DB2为pgsql数据库。

在这里插入图片描述

3.新建第一个数据源配置信息,DB1DataSourceConfig
package com.nightmare.multiple.sources.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.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.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
 * @Author: WuChang
 * @Description:
 * @Date: Created in  2022-05-31 5:04 PM
 * @Modified By:
 */
@Configuration
@MapperScan(basePackages = "com.nightmare.multiple.sources.dao.db1",sqlSessionFactoryRef = "db1SqlSessionFactory")
public class DB1DataSourceConfig {
    static final String MAPPER_LOCATION = "classpath:/mapper/db1/*.xml";
    @Bean("db1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    public DataSource getDb1DataSource(){
        return DataSourceBuilder.create().build();
    }
    @Bean("db1SqlSessionFactory")
    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
        return bean.getObject();
    }
    @Bean("db1SqlSessionTemplate")
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
4.新建mysql数据库MysqlUserDAO.java和MysqlUserMapper.xml。
package com.nightmare.multiple.sources.dao.db1;
import com.nightmare.multiple.sources.entity.db1.MysqlUserEO;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * @Author: WuChang
 * @Description:
 * @Date: Created in  2022-08-26 5:56 PM
 * @Modified By:
 */
@Component
public interface MysqlUserDAO {
    List<MysqlUserEO> getMysqlUserEOS();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nightmare.multiple.sources.dao.db1.MysqlUserDAO">
    <!-- 通用查询映射结果 -->
    <resultMap id="MysqlUserResultMap" type="com.nightmare.multiple.sources.entity.db1.MysqlUserEO">
        <result column="id" property="id" />
        <result column="user_id" property="userId"/>
        <result column="user_name" property="userName"/>
        <result column="user_code" property="userCode"/>
        <result column="user_password" property="userPassword"/>
        <result column="isFlag" property="isFlag"/>
        <result column="create_date" property="createDate"/>
        <result column="created_by" property="createdBy"/>
    </resultMap>
    <select id="getMysqlUserEOS" resultMap="MysqlUserResultMap" parameterType="com.nightmare.multiple.sources.entity.db1.MysqlUserEO">
        select id, user_id, user_name,user_code,user_password,isFlag,create_date,created_by from t_user;
    </select>
</mapper>
5.新建第二个数据源配置:DB2DataSourceConfig.java
package com.nightmare.multiple.sources.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.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.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
 * @Author: WuChang
 * @Description:
 * @Date: Created in  2022-05-31 5:05 PM
 * @Modified By:
 */
@Configuration
@MapperScan(basePackages = "com.nightmare.multiple.sources.dao.db2",sqlSessionFactoryRef = "db2SqlSessionFactory")
public class DB2DataSourceConfig {
    static final String MAPPER_LOCATION = "classpath:/mapper/db2/*.xml";
    @Bean("db2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource getDb2DataSource(){
        return DataSourceBuilder.create().build();
    }
    @Bean("db2SqlSessionFactory")
    public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
        return bean.getObject();
    }
    @Bean("db2SqlSessionTemplate")
    public SqlSessionTemplate db2SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
6.新建pgsql数据库PGUserDAO.java和PGUserMapper.xml。
package com.nightmare.multiple.sources.dao.db2;

import com.nightmare.multiple.sources.entity.db2.PGUserEO;
import org.springframework.stereotype.Component;
/**
 * @Author: WuChang
 * @Description:
 * @Date: Created in  2022-08-26 5:57 PM
 * @Modified By:
 */
@Component
public interface PGUserDAO {
    void savePGUserEO(PGUserEO pgUserEO);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nightmare.multiple.sources.dao.db2.PGUserDAO">
    <!-- 通用查询映射结果 -->
    <resultMap id="PGUserResultMap" type="com.nightmare.multiple.sources.entity.db2.PGUserEO">
        <result column="id" property="id" />
    </resultMap>
    <insert id="savePGUserEO" parameterType="com.nightmare.multiple.sources.entity.db2.PGUserEO">
        INSERT INTO tuser (id, user_id, user_name,user_code,user_password,is_flag,create_date,created_by)
        VALUES (#{id},#{userId},#{userName},#{userCode},#{userPassword},#{isFlag},#{createDate},#{createdBy})
    </insert>
</mapper>
7.application.yml
spring:
  application:
    name: multiple-data
  datasource:
    dynamic:
      primary: db1 # 配置默认数据库
    db1:
      jdbc-url: jdbc:mysql://localhost:3306/wu_nightmare
      username: ******
      password: ******
      driver-class-name: com.mysql.cj.jdbc.Driver
    db2:
      jdbc-url: jdbc:postgresql://localhost:5432/pgtestdb
      username: ****
      password: ****
      driver-class-name: org.postgresql.Driver
8.效果:

Mysql查询数据:select * from t_user;
在这里插入图片描述
Pgsql 查询数据:select * from public.tuser;
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值