Поделитесь отличным динамическим источником данных с открытым исходным кодом library-dynamic-datasource-spring-boot-starter

1.1 Предисловие

В нашей работе по исследованиям и разработкам в области Java, иногда из-за быстрой итерации бизнеса и изоляции данных в целях безопасности, разные базы данных часто выделяются для разных бизнес-направлений API, то есть микросервису часто приходится иметь дело с несколькими источниками данных.

1.2 Введение в библиотеку с открытым исходным кодом для динамических источников данных

PS: Как правило, бесплатной части документации достаточно, платить не нужно

1.3 Особенности

  • Поддерживает группировку источников данных, которая подходит для различных сценариев: чистое разделение чтения и записи нескольких баз данных, смешанный режим с одним ведущим и несколькими подчиненными.
  • Поддержка шифрования конфиденциальной информации о конфигурации базы данных (настраиваемое) ENC().
  • Поддержка независимой инициализации схемы структуры таблицы и базы данных для каждой базы данных.
  • Не поддерживает запуск источника данных, поддерживает ленивую загрузку источника данных (создание соединения при необходимости).
  • Поддержка пользовательских аннотаций, необходимо наследовать DS (3.2.0+).
  • Обеспечьте и упростите быструю интеграцию Druid, HikariCp, BeeCp, Dbcp2.
  • Предоставьте интеграционные решения для Mybatis-Plus, Quartz, ShardingJdbc, P6sy, Jndi и других компонентов.
  • Предоставляйте настраиваемые решения для источников данных (например, загрузку из базы данных).
  • Предоставьте решение для динамического увеличения и удаления источников данных после запуска проекта.
  • Предоставьте чистое решение для разделения чтения и записи в среде Mybatis.
  • Предоставляет решение для синтаксического анализа источников данных с использованием динамических параметров spel. Встроенное заклинание, сеанс, заголовок, поддержка настройки.
  • Поддерживает вложенное переключение многоуровневых источников данных. (СервисА >>> Сервис Б >>> Сервис С).
  • Предоставляет решение для распределенных транзакций на основе Seata.
  • Предоставляет локальное решение для транзакций с несколькими источниками данных.

Преимущества: мощный, простой в использовании, еще более мощный с mybatis plus.

1.4 Пример использования

1.4.1 Добавить зависимости

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

просмотреть последнюю версию

1.4.2 Настройка источника данных

spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        master:
          url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
        slave_1:
          url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
        slave_2:
          url: ENC(xxxxx) # 内置加密,使用请查看详细文档
          username: ENC(xxxxx)
          password: ENC(xxxxx)
          driver-class-name: com.mysql.jdbc.Driver
       #......省略
       #以上会配置一个默认库master,一个组slave下有两个子库slave_1,slave_2

вставьте сюда описание изображения

1.4.3 Используйте @DSаннотации для переключения источников данных

Хотя пример официального сайта находится на сервисном уровне

@Service
@DS("slave_1")
public class UserServiceImpl implements UserService {
    
    

  @Autowired
  private JdbcTemplate jdbcTemplate;

  public List selectAll() {
    
    
    return  jdbcTemplate.queryForList("select * from user");
  }
  
  @Override
  @DS("slave_1")
  public List selectByCondition() {
    
    
    return  jdbcTemplate.queryForList("select * from user where age >10");
  }
}

1.5 Передовой опыт

Я рекомендую использовать его на слое Дао, например, ниже приведен пример десенсибилизации и извлечения моего проекта:

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

/***
 * @author qingfeng.zhao
 * @date 2022/4/27
 * @apiNote
 */
@DS(value = "default-datasource")
@Mapper
@Repository
public interface VueElementAdminUserRoleMapper extends BaseMapper<VueElementAdminUserRoleEntity> {
    
    
}
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@DS(value = "second-data-source")
@Repository
@Mapper
public interface MyProductMapper extends BaseMapper<MyProductInfoEntity> {
    
    
}
spring:
  application:
    name: xxxxxxx
  # 动态数据源  dynamic-datasource-spring-boot-starter
  datasource:
    dynamic:
      # 设置默认的数据源或者数据源组,默认值即为master
      primary: default-datasource
      # 严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      strict: false
      datasource:
        default-datasource:
         url: jdbc:mysql://192.168.xxx.xxx:3306/myFirstDb?serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8
         username: xxxxxx
         password: xxxxxx
         driver-class-name: com.mysql.cj.jdbc.Driver
        second-data-source:
         url: jdbc:mysql://192.168.xxx.xxx:3306/mySecondDb?serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8
         username: xxxxxx
         password: xxxxxx
         driver-class-name: com.mysql.cj.jdbc.Driver

@DSИмя источника данных аннотации необходимо настроить в application.yml.


Эта статья окончена~

Acho que você gosta

Origin blog.csdn.net/hadues/article/details/131485274
Recomendado
Clasificación