springboot多数据源分包式实现

简介: 创建maven项目并添加依赖 我这里用的是SQLserver mybatis

创建maven项目并添加依赖 我这里用的是SQLserver mybatis

<parent>
  <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.3.RELEASE</version>
  </parent>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.microsoft.sqlserver</groupId>
      <artifactId>sqljdbc4</artifactId>
      <version>4.0</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.5</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>
  </dependencies>

application.properties配置文件中添加 多个数据源

spring.datasource.test1.jdbcUrl=jdbc:sqlserver://ip:port;DatabaseName=xxglptcsDB
spring.datasource.test1.username=sa
spring.datasource.test1.password=123
spring.datasource.test1.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.test2.jdbcUrl=jdbc:sqlserver://ip:port;DatabaseName=xxglptcsDB1
spring.datasource.test2.username=sa
spring.datasource.test2.password=123
spring.datasource.test2.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver

项目结构

启动类


这里扫包除了controller层 service层 还要添加DataSource包 (博主因为没扫这个包找了两个小时的错……)


在网上找了两个小时也没有一个管用的 ,然后博主突然想到这配置文件跟数据源配置类好像也没有关联,于是就添加了扫DataSource包


如果没有扫数据源配置包 可能会报这个错Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required


或者'url' attribute is not specified and no embedded datasource could be configured.

package com.vhukze.App;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
/**
 * @author zsz
 * @version
 * @创建时间:2019年9月2日 下午1:08:00
 */
@SpringBootApplication
@ComponentScan(basePackages= {"com.vhukze.controller","com.vhukze.test1.service","com.vhukze.test2.service","com.vhukze.datasource"})
@MapperScan({"com.vhukze.test1.mapper","com.vhukze.test2.mapper"})
public class App {
  public static void main(String[] args) {
    SpringApplication.run(App.class, args);
  }
}

数据源配置类

test1

package com.vhukze.datasource;
import javax.sql.DataSource;
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.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
/**
* @author zsz
* @version 
* @创建时间:2019年9月2日 上午11:19:09
*/
@Configuration
@MapperScan(basePackages="com.vhukze.test1.mapper",sqlSessionFactoryRef="test1SqlSessionFactory")//扫描对应的dao包     
public class Datasource1 {
  @Bean(name="test1DataSource")
  @ConfigurationProperties(prefix="spring.datasource.test1")//这里是配置文件里定义的属性名
  @Primary //默认优先使用
  public DataSource testDataSource() {
    return DataSourceBuilder.create().build();
  }
  //@Qualifier 从spring容器中查找名为test1DataSource的bean
  @Bean(name="test1SqlSessionFactory")
  @Primary //默认优先使用
  public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception { 
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    //需要加载配置文件的话
//    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:*.xml"));
    return bean.getObject();
  }
  /**
   * @author zsz
   * @编辑时间 2019年9月2日上午11:45:07
   * @编辑说明  事务管理
   * @param dataSource
   * @return
   */
  @Bean(name="test1TuansactionManager")
  @Primary //默认优先使用
  public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource){ 
    return new DataSourceTransactionManager(dataSource);
  }
  @Bean(name="test1SqlSessionTemplate")
  @Primary //默认优先使用
  public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { 
    return new SqlSessionTemplate(sqlSessionFactory);
  }
}

test2

package com.vhukze.datasource;
import javax.sql.DataSource;
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.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
/**
* @author zsz
* @version 
* @创建时间:2019年9月2日 上午11:53:15
*/
@Configuration
@MapperScan(basePackages="com.vhukze.test2.mapper",sqlSessionFactoryRef="test2SqlSessionFactory")//扫描对应的dao包     
public class Datasource2 {
  @Bean(name="test2DataSource")
  @ConfigurationProperties(prefix="spring.datasource.test2")//这里是配置文件里定义的属性名
  public DataSource testDataSource() {
    return DataSourceBuilder.create().build();
  }
  @Bean(name="test2SqlSessionFactory")
  public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception { 
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    //需要加载配置文件的话
//    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:*.xml"));
    return bean.getObject();
  }
  /**
   * @author zsz
   * @编辑时间 2019年9月2日上午11:54:08
   * @编辑说明  事务管理
   * @param dataSource
   * @return
   */
  @Bean(name="test2TuansactionManager")
  public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource){ 
    return new DataSourceTransactionManager(dataSource);
  }
  @Bean(name="test2SqlSessionTemplate")
  public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { 
    return new SqlSessionTemplate(sqlSessionFactory);
  }
}

到此所有的配置都完成了

接下来就是走一下流程了

controller层

@RestController
public class UserController {
  @Autowired
  private User1Service service1;
  @Autowired
  private User2Service service2;
  @RequestMapping("index")
  public String index() {
    service1.insert();
    service2.insert();
    return "success";
  }
}

dao层(1和2都是一样的 这里贴一个就可以了)

@Repository
public interface User1Mapper{
  @Insert("insert into user_demo values('1','1')")
  public void insert();
}

启动项目访问映射路径

相关文章
|
前端开发 安全 Java
Spring Boot 便利店销售系统项目分包设计解析
本文深入解析了基于Spring Boot的便利店销售系统分包设计,通过清晰的分层架构(表现层、业务逻辑层、数据访问层等)和模块化设计,提升了代码的可维护性、复用性和扩展性。具体分包结构包括`controller`、`service`、`repository`、`entity`、`dto`、`config`和`util`等模块,职责分明,便于团队协作与功能迭代。该设计为复杂企业级应用开发提供了实践参考。
572 0
|
Java 关系型数据库 数据库
Spring Boot多数据源及事务管理:概念与实战
【4月更文挑战第29天】在复杂的企业级应用中,经常需要访问和管理多个数据源。Spring Boot通过灵活的配置和强大的框架支持,可以轻松实现多数据源的整合及事务管理。本篇博客将探讨如何在Spring Boot中配置多数据源,并详细介绍事务管理的策略和实践。
1712 3
|
druid Java 关系型数据库
Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源
Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源
1710 0
|
Java 数据库连接
SpringBoot配置多数据源实战
第四届光学与机器视觉国际学术会议(ICOMV 2025) 2025 4th International Conference on Optics and Machine Vision
990 8
|
开发框架 Java 数据库
Spring Boot集成多数据源的最佳实践
Spring Boot集成多数据源的最佳实践
|
druid Java 关系型数据库
在Spring Boot中集成Druid实现多数据源有两种常用的方式:使用Spring Boot的自动配置和手动配置。
在Spring Boot中集成Druid实现多数据源有两种常用的方式:使用Spring Boot的自动配置和手动配置。
4007 5
|
开发框架 Java 数据库
Spring Boot集成多数据源的最佳实践
Spring Boot集成多数据源的最佳实践
|
存储 缓存 Java
SpringBoot 整合多数据源的事务问题
多数据源实现、切面的优先级问题(Order注解)、事务的传播特性(Propagation类)
|
Java
SpringBoot 配置多数据源
SpringBoot 配置多数据源
313 0
|
Java 数据库连接 数据库
【Spring技术专题】「实战开发系列」保姆级教你SpringBoot整合Mybatis框架实现多数据源的静态数据源和动态数据源配置落地
Mybatis是一个基于JDBC实现的,支持普通 SQL 查询、存储过程和高级映射的优秀持久层框架,去掉了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。 Mybatis主要思想是将程序中大量的 SQL 语句剥离出来,配置在配置文件中,以实现 SQL 的灵活配置。在所有 ORM 框架中都有一个非常重要的媒介——PO(持久化对象),PO 的作用就是完成持久化操作,通过该对象对数据库执行增删改的操作,以面向对象的方式操作数据库。
621 1
【Spring技术专题】「实战开发系列」保姆级教你SpringBoot整合Mybatis框架实现多数据源的静态数据源和动态数据源配置落地

热门文章

最新文章