«1. Введение

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

Мы увидим примеры для Redis, MongoDB и Spring Data JPA.

Во-первых, мы начнем с подхода на основе аннотаций, а затем рассмотрим подход с использованием файла свойств.

2. Отключение с помощью аннотаций

Начнем с примера MongoDB, рассмотрим классы, которые необходимо исключить:

@SpringBootApplication(exclude = {
    MongoAutoConfiguration.class, 
    MongoDataAutoConfiguration.class
})

Аналогичным образом рассмотрим отключение автоконфигурации для Redis: ~~ ~

@SpringBootApplication(exclude = {
    RedisAutoConfiguration.class, 
    RedisRepositoryAutoConfiguration.class
})

Наконец, давайте посмотрим на отключение автоматической настройки для Spring Data JPA:

@SpringBootApplication(exclude = {
    DataSourceAutoConfiguration.class, 
    DataSourceTransactionManagerAutoConfiguration.class, 
    HibernateJpaAutoConfiguration.class
})

3. Отключение с помощью файла свойств

Мы также можем отключить автоматическую настройку с помощью файла свойств, давайте сначала рассмотрим его с помощью MongoDB:

spring.autoconfigure.exclude= \
  org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration, \
  org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration

Теперь давайте отключим его для Redis:

spring.autoconfigure.exclude= \
  org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration, \
  org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration

Аналогично отключим его для Spring Data JPA:

spring.autoconfigure.exclude= \ 
  org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, \
  org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration, \
  org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration

4. Тестирование

Для тестирования мы убедитесь, что компоненты Spring для автоматически настраиваемых классов отсутствуют в контексте нашего приложения.

Начнем с теста для MongoDB. Мы проверим, отсутствует ли bean-компонент MongoTemplate:

@Test(expected = NoSuchBeanDefinitionException.class)
public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() { 
    context.getBean(MongoTemplate.class); 
}

Теперь давайте проверим наличие JPA. Для JPA bean-компонент DataSource будет отсутствовать:

@Test(expected = NoSuchBeanDefinitionException.class)
public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() {
    context.getBean(DataSource.class);
}

Аналогично, для Redis мы проверим bean-компонент RedisTemplate в контексте нашего приложения:

@Test(expected = NoSuchBeanDefinitionException.class)
public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() {
    context.getBean(RedisTemplate.class);
}

5. Заключение

В заключение, в этом кратком учебнике мы рассмотрели способы отключения автоматической настройки Spring Boot для разных баз данных.

Исходный код всех примеров в статье доступен на GitHub.