Легко настраивайте несколько источников данных — идеальное сочетание 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
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода