Легко настраивайте несколько источников данных — идеальное сочетание Spring Boot и Mybatis-Plus!
Легко настраивайте несколько источников данных — идеальное сочетание Spring Boot и Mybatis-Plus!

🏆Эта статья включена в 《Spring Загрузка из входа в мастер》 ,Улучшение индекса специализированной атаки

Эта колонка посвящена созданию самой сложной серии обучающего контента Spring Boot от нулевого уровня до продвинутого уровня. 🚀Все они запускаются исключительно во всей сети для создания качественных колонок... Колонка постоянно обновляется... Добро пожаловать всем. подписывайтесь и продолжайте учиться.


Язык кода:javascript
копировать
Описание среды: Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

Предисловие

В этой статье будет показано, как использовать mybatis-plus для реализации конфигурации с несколькими источниками данных в рамках Spring Boot. Конфигурация нескольких источников данных является общим требованием и часто встречается в реальных проектах, поэтому очень важно овладеть навыками настройки нескольких источников данных.

краткое содержание

В этой статье мы покажем, как использовать Spring Boot и mybatis-plus реализуют конфигурацию с несколькими источниками данных. О том, как настроить, мы расскажем отдельно. нескольких источников данных и как использовать mybatis-plus для работы с этими источниками данных. В дополнение к этому мы также дадим простой тест. пример для проверки правильности кода.

текст

Добавьте зависимости и файлы конфигурации

Сначала нам нужно добавить зависимости в файл pom.xml:

Язык кода:javascript
копировать
        <!--Настройка нескольких источников данных-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>

Пример скриншота выглядит следующим образом:

Настройка нескольких источников данных

Весной Настройка под Boot framework нескольких источников данных Просто нужно быть внутриapplication.propertiesПросто добавьте в файл конфигурацию нескольких наборов источников данных.。Например,Настраиваем два источника данных,Для db1 и db2 соответственно:

Язык кода:javascript
копировать
spring:
  datasource:
    dynamic:
      primary: master #Установите источник данных или группу источников данных по умолчанию, значение по умолчанию — master.
      strict: false #Строго соответствовать источнику данных, по умолчанию false. true выдает исключение, если указанный источник данных не соответствует, false использует источник данных по умолчанию
      datasource:
        master:
          driver-class-name: com.mysql.cj.jdbc.Driver # Эту конфигурацию можно опустить, поскольку версия 3.2.0 поддерживает SPI.
          url: jdbc:mysql://localhost:3306/springboot_db?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
          username: root
          password: 123456
        slave_1:
          driver-class-name: com.mysql.cj.jdbc.Driver # Эту конфигурацию можно опустить, поскольку версия 3.2.0 поддерживает SPI.
          url: jdbc:mysql://127.0.0.1:3306/test_db2?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
          username: root
          password: 123456

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

Пример скриншота выглядит следующим образом:

Настройка mybatis-plus

существовать Настройка mybatis-plusначальство,Нам нужно создать классы конфигурации для двух источников данных.,Это db1 и db2 соответственно. Эти два класса конфигурации должны наследовать AbstractDataSourceConfig соответственно.,Вам необходимо инициализировать SqlSessionFactory и MapperScannerConfigurer mybatis-plus, используя аннотацию @MapperScan.

Здесь мы приводим пример кода источника данных db1:

Язык кода:javascript
копировать
@Configuration
@MapperScan(basePackages = {"com.example.db1.mapper"}, sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class Db1DataSourceConfig extends AbstractDataSourceConfig {
    
    @Autowired
    @Qualifier("db1DataSource")
    private DataSource db1DataSource;

    @Bean(name = "db1SqlSessionFactory")
    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        return super.createSqlSessionFactory(dataSource);
    }

    @Bean(name = "db1SqlSessionTemplate")
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    
    @Override
    public DataSource dataSource() {
        return db1DataSource;
    }

    @Override
    public MybatisPlusProperties getMybatisPlusProperties() {
        MybatisPlusProperties properties = new MybatisPlusProperties();
        properties.setMapperLocations(new String[]{"classpath:mapper/db1/**/*.xml"});
        return properties;
    }
}

В приведенном выше коде мы используем аннотацию @MapperScan для сканирования интерфейса Mapper в указанном каталоге и указываем имя SqlSessionFactory, используемое SqlSessionTemplate (т. е. «db1SqlSessionFactory»). Мы также указали путь к файлу Mapper в конфигурации.

Аналогично, при настройке источника данных db2 нам нужно изменить только соответствующие имена.

Написать интерфейс Mapper

При использовании Написать интерфейс Mapper нам необходимо указать используемый источник данных. Мы можем указать источник данных, используемый выполняемым в данный момент методом, добавив аннотацию @DS в интерфейс Mapper. Например:

Язык кода:javascript
копировать
@DS("db1")
public interface UserMapperDb1 extends BaseMapper<User> {
    //...
}

@DS("db2")
public interface UserMapperDb2 extends BaseMapper<User> {
    //...
}

В приведенном выше коде мы написали интерфейс UserMapper для источников данных db1 и db2 соответственно и указали источник данных, который будет использоваться, через аннотацию @DS.

тестовый пример

Наконец, мы пишем простой тест для нашего кода. пример для проверки правильности кода. Мы можем протестировать В примере @Autowired используется для внедрения указанного интерфейса Mapper для управления соответствующим источником данных. Например:

Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class MultiDataSourceTest {

    @Autowired
    private UserMapperDb1 userMapperDb1;

    @Autowired
    private UserMapperDb2 userMapperDb2;

    @Test
    public void test() {
        User user1 = new User();
        user1.setName("Чжан Сан");
        user1.setAge(18);
        userMapperDb1.insert(user1); // Сохранить в db1

        User user2 = new User();
        user2.setName("Ли Си");
        user2.setAge(20);
        userMapperDb2.insert(user2); // Сохранить в db2

        List<User> userList1 = userMapperDb1.selectList(null);
        List<User> userList2 = userMapperDb2.selectList(null);

        Assert.assertEquals(userList1.size(), 1); // В db1 должна быть 1 запись
        Assert.assertEquals(userList2.size(), 1); // В db2 должна быть 1 запись
    }
}

существоватькначальствотестовый примерсередина,Мы использовали два интерфейса Mapper для вставки записи в источники данных db1 и db2 соответственно.,А затем использовал два интерфейса Mapper для запроса количества записей в соответствующих источниках данных.

Краткое изложение полного текста

В этой статье объясняется, как Весной Используйте mybatis-plus в среде загрузки для реализации конфигурации с несколькими источниками данных. В частности, мы отдельно покажем, как Настройка нескольких источников данных、как Настройка mybatis-plus и как Написать интерфейс Mapperитестовый пример。Практика доказывает,Конфигурация с несколькими источниками данных очень распространена в реальных бизнес-сценариях.,Узнайте из этой статьи,Читатели смогут освоить навыки настройки нескольких источников данных.,Это также будет большим подспорьем для будущей работы по разработке проекта.


ЯсуществоватьучаствоватьВторой этап специального тренировочного лагеря Tencent Technology Creation 2023 года включает в себя эссе, получившие призы, которые разделят призовой фонд в 10 000 юаней и часы с клавиатурой.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose