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"
        }
    ]
}


目录
相关文章
|
10月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
659 4
|
11月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1847 5
|
11月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
589 0
探索Spring Boot的@Conditional注解的上下文配置
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1616 10
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 &gt; Java系统属性 &gt; application.properties &gt; application.yml &gt; application.yaml。
1387 0
|
人工智能 安全 Java
Spring Boot yml 配置敏感信息加密
本文介绍了如何在 Spring Boot 项目中使用 Jasypt 实现配置文件加密,包含添加依赖、配置密钥、生成加密值、在配置中使用加密值及验证步骤,并提供了注意事项,确保敏感信息的安全管理。
1700 1
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
1944 0
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
1997 0
|
缓存 Java 应用服务中间件
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——依赖导入和Thymeleaf相关配置
在Spring Boot中使用Thymeleaf模板,需引入依赖`spring-boot-starter-thymeleaf`,并在HTML页面标签中声明`xmlns:th=&quot;http://www.thymeleaf.org&quot;`。此外,Thymeleaf默认开启页面缓存,开发时建议关闭缓存以实时查看更新效果,配置方式为`spring.thymeleaf.cache: false`。这可避免因缓存导致页面未及时刷新的问题。
561 0
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
1415 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置