欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis-plus多數(shù)據(jù)源配置的兩種方式總結(jié)

 更新時(shí)間:2022年10月13日 15:31:08   作者:秋日的晚霞  
這篇文章主要為大家詳細(xì)介紹了Mybatis-plus中多數(shù)據(jù)源配置的兩種方式,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起了解一下

1.多數(shù)據(jù)源配置類(lèi)

整體項(xiàng)目結(jié)構(gòu)

1).pom.xml 項(xiàng)目依賴

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sz</groupId>
    <artifactId>MybatisDataSourcesDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>MybatisDataSourcesDemo</name>
    <description>MybatisDataSourcesDemo</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.sz.mybatisdatasourcesdemo.MybatisDataSourcesDemoApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

2)多數(shù)據(jù)源配置類(lèi)

DataSource -> SqlsessionFactory -> SqlSessionTemplate

? -> DataSourceTransactionManager

(1).DS1DataSourceConfig 配置類(lèi)

@MapperScan(basePackages = "com.sz.mybatisdatasourcesdemo.mapper.ds1",sqlSessionTemplateRef = "db1SqlSessionTemplate")
@Component
public class DS1DataSourceConfig {

    @Bean
    // 給DataSource 綁定屬性值
    @ConfigurationProperties(prefix = "ds1")
    //創(chuàng)建一個(gè)數(shù)據(jù)源對(duì)象 底層通過(guò) BeanUtils.instantiateClass(type); 實(shí)例化一個(gè)數(shù)據(jù)源對(duì)象
    //候選的數(shù)據(jù)源有
    //"com.zaxxer.hikari.HikariDataSource",
    //	"org.apache.tomcat.jdbc.pool.DataSource", "org.apache.commons.dbcp2.BasicDataSource"
    public DataSource ds1DataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean
    public SqlSessionFactory ds1SqlsessionFactory (
            @Qualifier("ds1DataSource")DataSource dataSource
    )throws Exception
    {
        // 工廠bean  SqlSessionFactory
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        //設(shè)置數(shù)據(jù)源
        bean.setDataSource(dataSource);
        //加載映射文件
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().
                getResources("classpath*:mybatis/ds1/*.xml"));
        return bean.getObject();
    }

    @Bean
    // 數(shù)據(jù)源事務(wù)管理器
    public DataSourceTransactionManager db1TransactionManager(@Qualifier("ds1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("ds1SqlsessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

(2).DS2DataSourceConfig 配置類(lèi)

@MapperScan(basePackages = "com.sz.mybatisdatasourcesdemo.mapper.ds2",sqlSessionTemplateRef = "ds2SqlSessionTemplate")
@Component
public class DS2DataSourceConfig {

    @Bean
    // 給DataSource 綁定屬性值
    @ConfigurationProperties(prefix = "ds2")
    //創(chuàng)建一個(gè)數(shù)據(jù)源對(duì)象 底層通過(guò) BeanUtils.instantiateClass(type); 實(shí)例化一個(gè)數(shù)據(jù)源對(duì)象
    //候選的數(shù)據(jù)源有
    //"com.zaxxer.hikari.HikariDataSource",
    //	"org.apache.tomcat.jdbc.pool.DataSource", "org.apache.commons.dbcp2.BasicDataSource"
    public DataSource ds2DataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean
    public SqlSessionFactory ds2SqlsessionFactory (
            @Qualifier("ds2DataSource")DataSource dataSource
    )throws Exception
    {
        // 工廠bean  SqlSessionFactory
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        //設(shè)置數(shù)據(jù)源
        bean.setDataSource(dataSource);
        //加載映射文件
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().
                getResources("classpath*:mybatis/ds2/*.xml"));
        return bean.getObject();
    }

    @Bean
    // 數(shù)據(jù)源事務(wù)管理器
    public DataSourceTransactionManager ds2TransactionManager(@Qualifier("ds2DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public SqlSessionTemplate ds2SqlSessionTemplate(@Qualifier("ds2SqlsessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

3) 多Mapper

ds1 路徑下 與 ds2 路徑下各一個(gè) mapper文件 分別由 ds1配置類(lèi) 與 ds2配置類(lèi) 去掃描生成代理類(lèi)

4) application.properties 配置文件

用兩個(gè)數(shù)據(jù)庫(kù)模擬不同的數(shù)據(jù)源

# 應(yīng)用名稱(chēng)
spring.application.name=MybatisDataSourcesDemo

mybatis-plus.mapper-locations=classpath:mybatis/mapper/ds1/*.xml,classpath:mybatis/mapper/ds2/*.xml

#ds1
ds1.type=com.alibaba.druid.pool.DruidDataSource
ds1.jdbc-url=jdbc:mysql://localhost:3306/ds1?serverTimezone=GMT%2B8&useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=CONVERT_TO_NULL
ds1.username=root
ds1.password=root
ds1.driver-class-name=com.mysql.cj.jdbc.Driver

#ds2
ds2.type=com.alibaba.druid.pool.DruidDataSource
ds2.jdbc-url=jdbc:mysql://localhost:3306/ds2?serverTimezone=GMT%2B8&useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=CONVERT_TO_NULL
ds2.username=root
ds2.password=root
ds2.driver-class-name=com.mysql.cj.jdbc.Driver

5) 測(cè)試類(lèi)

 @Autowired
    private AnimalService animalService;
    @Autowired
    private UserService userService;

    @Test
    void contextLoads() {
        animalService.remove(null);
        userService.remove(null);

        Animal animal = new Animal();
        animal.setName("老虎");
        animalService.save(animal);

        User user = new User();
        user.setName("張三");
        userService.save(user);

        List<Animal> animals = animalService.list();
        System.out.println("animals = " + animals);

        List<User> userList = userService.list();
        System.out.println("userList = " + userList);

    }

2.@DS 注解 切換數(shù)據(jù)源

分別在 ds1和 ds2庫(kù)中添加 user 表

1) 新增依賴

版本與 mybatis-plus保存一致

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>${version}</version>
</dependency>

2) application.yml 配置類(lèi)

spring:
  datasource:
    dynamic:
#      primary: master #設(shè)置默認(rèn)的數(shù)據(jù)源或者數(shù)據(jù)源組,默認(rèn)值即為master
      strict: false #嚴(yán)格匹配數(shù)據(jù)源,默認(rèn)false. true未匹配到指定數(shù)據(jù)源時(shí)拋異常,false使用默認(rèn)數(shù)據(jù)源
      datasource:
        slave_1:
          url: jdbc:mysql://localhost:3306/ds1?serverTimezone=GMT%2B8&useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=CONVERT_TO_NULL
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver # 3.2.0開(kāi)始支持SPI可省略此配置
        slave_2:
          url: jdbc:mysql://localhost:3306/ds2?serverTimezone=GMT%2B8&useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=CONVERT_TO_NULL
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver

3) 添加 @DS注解 切換數(shù)據(jù)源

@Service
public class UserServiceImpl
        extends ServiceImpl<UserMapper, User>
        implements UserService {

    @Override
    @DS("slave_1")
    public List<User> findAllDS1()
    {
        return this.baseMapper.selectList(null);
    }

    @Override
    @DS("slave_2")
    public List<User> findAllDS2()
    {
        return this.baseMapper.selectList(null);
    }
}

4) 測(cè)試類(lèi)

   @Test
    void testDS()
    {
        List<User> allDS1 = userService.findAllDS1();
        System.out.println("allDS1 = " + allDS1);
        List<User> allDS2 = userService.findAllDS2();
        System.out.println("allDS2 = " + allDS2);
    }

到此這篇關(guān)于Mybatis-plus多數(shù)據(jù)源配置的兩種方式總結(jié)的文章就介紹到這了,更多相關(guān)Mybatis-plus多數(shù)據(jù)源配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論