springboot+maybatis+多数据源配置

简介: springboot+maybatis+多数据源配置

填坑填坑填坑填坑填坑填坑填坑填坑填坑填坑填坑,如果使用druid连接池一定要查看下面这篇文章:

pringboot+maybatis+多数据源配置

springboot数据库信息配置文件:

#mySQL
spring.datasource.secondary.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.url=jdbc:mysql://127.0.0.1:3306/testdb
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
#Oracle
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:testuserdb
spring.datasource.username=root
spring.datasource.password=root


注解介绍:

@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常

@Configuration:把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。

@MapperScan:通过使用@MapperScan可以指定要扫描的Mapper类的包的路径


配置第一个数据源:

@Configuration
// 扫描 Mapper 接口并容器管理
@SpringBootApplication
@MapperScan(basePackages = OneMappingConfig.PACKAGE, sqlSessionFactoryRef = "oneSqlSessionFactory")
public class OneMappingConfig {
    // 精确到 onedao目录,以便跟其他数据源隔离
    static final String PACKAGE = "com.my.maple.onedao";
    static final String MAPPER_LOCATION = "classpath:/mapper/onemapper/*.xml";
    @Bean(name = "oneDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.one")
    @Primary
    public DataSource oneDataSource() {
      return DataSourceBuilder.create().build();
    }
    @Bean(name = "oneSqlSessionFactory")
    @Primary
    public SqlSessionFactory oneSqlSessionFactory(@Qualifier("oneDataSource") DataSource oneDataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(oneDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(OneMappingConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
    @Bean(name = "oneTransactionManager")
    @Primary
    public DataSourceTransactionManager oneTransactionManager(@Qualifier("oneDataSource") DataSource oneDataSource) {
        return new DataSourceTransactionManager(oneDataSource);
    }
    @Bean(name = "oneSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate oneSqlSessionTemplate(@Qualifier("oneSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}


配置第二个数据源:

@Configuration
@SpringBootApplication
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = TwoMappingConfig.PACKAGE, sqlSessionFactoryRef = "twoSqlSessionFactory")
public class TwoMappingConfig {
    static final String PACKAGE = "com.my.maple.twodao";
    static final String MAPPER_LOCATION = "classpath:/mapper/twomapper/*.xml";
    @Bean(name = "twoDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.two")
    public DataSource twoDataSource() {
      return DataSourceBuilder.create().build();
    }
    @Bean(name = "twoSqlSessionFactory")
    public SqlSessionFactory twoSqlSessionFactory(@Qualifier("twoDataSource") DataSource masterDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(masterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(TwoMappingConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
    @Bean(name = "twoTransactionManager")
    public DataSourceTransactionManager twoTransactionManager(@Qualifier("twoDataSource") DataSource masterDataSource) {
        return new DataSourceTransactionManager(masterDataSource);
    }
    @Bean(name = "twoSqlSessionTemplate")
    public SqlSessionTemplate twoSqlSessionTemplate(@Qualifier("twoSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

不同数据源获取测试:

Controller

@RestController
@RequestMapping("/test")
public class TestController {
  @Autowired
  private TestService testService;
  @PostMapping(value = "/index")
  public JSONObject index(){
    JSONObject json = new JSONObject();
    List<One> oneData = testService.selectOneData();
    List<Two> twoData = testService.selectTwoData();
    json.put("oneData", oneData);
    json.put("twoData", twoData);
    return json;
  }
}

Service

@Service("testService")
public class TestServiceImpl implements TestService{
  @Autowired
  private OneMapper oneMapper;
  @Autowired
  private TwoMapper twoMapper;
  @Override
  public List<One> selectOneData() {
    return oneMapper.getOneData();
  }
  @Override
  public List<Two> selectTwoData() {
    return twoMapper.getTwoData();
  }
}

OneMapper.java

@Mapper
public interface OneMapper extends BaseMapper<One> {
  List<One> getOneData();
}

TwoMapper.java

@Mapper
public interface TwoMapper extends BaseMapper<Two> {
  List<Two> getTwoData();
}


OneMapper.xml

<select id="getOneData" resultMap="BaseResultMap">
      SELECT * FROM ONE
    </select>

TwoMapper.xml

<select id="getTwoData" resultMap="BaseResultMap">
      SELECT * FROM TWO
    </select>


测试结果:

{
    "twoData": [
        {
            "id": 1,
            "twoAaa": "数据库2数据aaa",
            "twoBbb": "数据库2数据bbb",
            "twoCcc": "数据库2数据ccc",
            "twoDdd": "数据库2数据ddd"
        },
        {
            "id": 2,
            "twoAaa": "数据库2",
            "twoBbb": "数据库2",
            "twoCcc": "数据库2",
            "twoDdd": "数据库2"
        }
    ],
    "oneData": [
        {
            "id": 1,
            "oneAaa": "数据库1数据aaa",
            "oneBbb": "数据库1数据bbb",
            "oneCcc": "数据库1数据ccc",
            "oneDdd": "数据库1数据ddd"
        },
        {
            "id": 2,
            "oneAaa": "数据库1",
            "oneBbb": "数据库1",
            "oneCcc": "数据库1",
            "oneDdd": "数据库1"
        }
    ]
}


目录
相关文章
|
22小时前
|
Java 调度 Spring
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
286 0
|
22小时前
|
druid Java 数据库
druid+springboot加解密Druid链接池配置加密密码链接数据库
druid+springboot加解密Druid链接池配置加密密码链接数据库
92 0
|
22小时前
|
前端开发 Java 应用服务中间件
Springboot对MVC、tomcat扩展配置
Springboot对MVC、tomcat扩展配置
|
22小时前
|
安全 Java 开发者
深入理解Spring Boot配置绑定及其实战应用
【4月更文挑战第10天】本文详细探讨了Spring Boot中配置绑定的核心概念,并结合实战示例,展示了如何在项目中有效地使用这些技术来管理和绑定配置属性。
13 1
|
22小时前
|
Java 关系型数据库 数据库
Spring Boot多数据源及事务管理:概念与实战
【4月更文挑战第29天】在复杂的企业级应用中,经常需要访问和管理多个数据源。Spring Boot通过灵活的配置和强大的框架支持,可以轻松实现多数据源的整合及事务管理。本篇博客将探讨如何在Spring Boot中配置多数据源,并详细介绍事务管理的策略和实践。
38 3
|
22小时前
|
Java 文件存储 Spring
【springboot】logback配置
【springboot】logback配置
19 1
|
22小时前
|
Java 微服务 Spring
Spring Boot中获取配置参数的几种方法
Spring Boot中获取配置参数的几种方法
22 2
|
22小时前
|
Web App开发 前端开发 Java
SpringBoot配置HTTPS及开发调试
在实际开发过程中,如果后端需要启用https访问,通常项目启动后配置nginx代理再配置https,前端调用时高版本的chrome还会因为证书未信任导致调用失败,通过摸索整理一套开发调试下的https方案,特此分享
21 0
SpringBoot配置HTTPS及开发调试
|
22小时前
|
存储 Java 数据库
SpringBoot使用jasypt实现数据库配置加密
这样,你就成功地使用Jasypt实现了Spring Boot中的数据库配置加密,确保敏感信息在配置文件中以加密形式存储,并在应用启动时自动解密。
47 2
|
22小时前
|
Java Shell 测试技术
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
40 0
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析