Spring Boot2.0之整合多数据源详解编程语言

 

一般公司分两个数据库:

 一个放共同配置文件, 一个数据库垂直业务数据库

垂直拆分和水平拆分:

  垂直是根据业务划分具体数据库 

 

在一个项目中有多个数据源(不同库jdbc) 无限个的哈~ 根据包名 或者 注解方式 划分多个数据源

 本博客讲解的是分包情况下的:

首先创建两个包 

   Spring Boot2.0之整合多数据源详解编程语言

数据库也是如此:

  Spring Boot2.0之整合多数据源详解编程语言

当前的目录结构这样:

Spring Boot2.0之整合多数据源详解编程语言

 

 

根据不同的包名字,连接不同的数据源

pom文件如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
  <modelVersion>4.0.0</modelVersion> 
  <groupId>multipleDatasource</groupId> 
  <artifactId>com.toov5.multiple</artifactId> 
  <version>0.0.1-SNAPSHOT</version> 
   
  <parent> 
		<groupId>org.springframework.boot</groupId> 
		<artifactId>spring-boot-starter-parent</artifactId> 
		<version>2.0.0.RELEASE</version> 
	</parent> 
	<dependencies> 
		<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.mybatis.spring.boot</groupId> 
			<artifactId>mybatis-spring-boot-starter</artifactId> 
			<version>1.1.1</version> 
		</dependency> 
		<!-- mysql 依赖 --> 
		<dependency> 
			<groupId>mysql</groupId> 
			<artifactId>mysql-connector-java</artifactId> 
		</dependency> 
		<!-- springboot-web组件 --> 
		<dependency> 
			<groupId>org.springframework.boot</groupId> 
			<artifactId>spring-boot-starter-web</artifactId> 
		</dependency> 
		      <dependency> 
              <groupId>org.projectlombok</groupId> 
               <artifactId>lombok</artifactId> 
       </dependency> 
		 
		 
	</dependencies> 
   
</project>

 数据源的配置文件:application.properties

 

###datasource1 
spring.datasource.test1.driver-class-name = com.mysql.jdbc.Driver 
spring.datasource.test1.jdbc-url = jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf-8 
spring.datasource.test1.username = root 
spring.datasource.test1.password = root 
###datasource2 
spring.datasource.test2.driver-class-name = com.mysql.jdbc.Driver 
spring.datasource.test2.jdbc-url = jdbc:mysql://localhost:3306/test02?useUnicode=true&characterEncoding=utf-8 
spring.datasource.test2.username = root 
spring.datasource.test2.password = root

datasource包下面的相关配置的Java代码:

package com.toov5.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; 
 
//DataSource01数据源的读取 
@Configuration // 注册到springboot容器中   
@MapperScan(basePackages = "com.toov5.test01", sqlSessionFactoryRef = "test1SqlSessionFactory")  
//指向了下面的名为 test1SqlSessionFactory 的工厂 
public class DataSource1Config { 
 
    @Bean(name = "test1DataSource")  //表示注入到Spring 容器中去 
    @ConfigurationProperties(prefix = "spring.datasource.test1")  //表以此为开头,去properties去读 ( 后面是写死的) 
    @Primary 
    public DataSource testDataSource() { 
        return DataSourceBuilder.create().build(); 
    } 
 
     
    @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:mybatis/mapper/test1/*.xml")); 
        // 如果有一些mapper文件的话 可以把上面的注解放开 
        return bean.getObject(); 
    } 
 
     
    @Bean(name = "test1TransactionManager")  //配置事务 
    @Primary 
    public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) { 
        return new DataSourceTransactionManager(dataSource); 
    } 
 
    @Bean(name = "test1SqlSessionTemplate") 
    @Primary 
    public SqlSessionTemplate testSqlSessionTemplate( 
            @Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { 
        return new SqlSessionTemplate(sqlSessionFactory); 
    } 
 
}

package com.toov5.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; 
 
 //DataSource2 
@Configuration // 注册到springboot容器中 
@MapperScan(basePackages = "com.toov5.test02", sqlSessionFactoryRef = "test2SqlSessionFactory") 
public class DataSource2Config { 
 
     
    @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:mybatis/mapper/test2/*.xml")); 
        return bean.getObject(); 
    } 
 
     
    @Bean(name = "test2TransactionManager") 
    public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) { 
        return new DataSourceTransactionManager(dataSource); 
    } 
 
    @Bean(name = "test2SqlSessionTemplate") 
    public SqlSessionTemplate testSqlSessionTemplate( 
            @Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { 
        return new SqlSessionTemplate(sqlSessionFactory); 
    } 
 
}

然后相应的实体类代码:

package com.toov5.entity; 
 
import lombok.Data; 
 
@Data   
public class User { 
  private Integer age; 
  private String name; 
  private  Integer id; 
     
}

mappertest01和mappertest02

package com.toov5.mappertest01; 
 
import org.apache.ibatis.annotations.Insert; 
import org.apache.ibatis.annotations.Param; 
 
public interface UserMapperTest01 { 
    @Insert("insert into users values(null,#{name},#{age});") 
    public int insert(@Param("name") String name, @Param("age") Integer age); 
 
}

package com.toov5.mappertest02; 
 
import org.apache.ibatis.annotations.Insert; 
import org.apache.ibatis.annotations.Param; 
 
public interface UserMapperTest02 { 
    @Insert("insert into users values(null,#{name},#{age});") 
    public int insert(@Param("name") String name, @Param("age") Integer age); 
 
}

service01和service02

package com.toov5.service01; 
 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
 
import com.toov5.mappertest01.UserMapperTest01; 
 
import lombok.extern.slf4j.Slf4j; 
 
@Service 
@Slf4j 
public class UserService01 { 
  @Autowired 
  private UserMapperTest01 userMapperTest01; 
   
  public int insertUser(String name, Integer age){ 
     int result = userMapperTest01.insert(name, age); 
      log.info("####################",result); 
      return result; 
  } 
}

package com.toov5.service02; 
 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
 
import com.toov5.mappertest02.UserMapperTest02; 
 
import lombok.extern.slf4j.Slf4j; 
 
@Service 
@Slf4j 
public class UserService02 { 
  @Autowired 
  private UserMapperTest02 userMapperTest02; 
   
  public int insertUser(String name, Integer age){ 
     int result = userMapperTest02.insert(name, age); 
      log.info("####################",result); 
      return result; 
  } 
}

 controller类

package com.toov5.controller; 
 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 
 
import com.toov5.test01.service01.UserService01; 
 
@RestController 
public class MultiplyController { 
    @Autowired 
    private UserService01 userService01; 
     
    @Autowired 
    private UserService01 userService02; 
     
    @RequestMapping("/insertUser01") 
    public Integer insertUser1(String name, Integer age){ 
        return userService01.insertUser(name, age); 
    } 
     
    @RequestMapping("/insertUser02") 
    public Integer insertUser2(String name, Integer age){ 
        return userService02.insertUser(name, age); 
    } 
     
}

启动类:

package com.toov5.app; 
 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
 
@SpringBootApplication(scanBasePackages={"com.toov5.*"}) 
public class app { 
 
    public static void main(String[] args) { 
        SpringApplication.run(app.class, args); 
    } 
     
}

 

 启动后访问:

Spring Boot2.0之整合多数据源详解编程语言

数据库:

Spring Boot2.0之整合多数据源详解编程语言

 

 访问:

Spring Boot2.0之整合多数据源详解编程语言

数据库结果:

Spring Boot2.0之整合多数据源详解编程语言

注:spring1.5时候 默认只想数据源 会报错~    2.0之后得到了修复

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16164.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论