Подтвердить что ты не робот

Отключить автоматическую настройку, связанную с базой данных, в Spring Загрузка

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

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

Могу ли я достичь этого, создав два разных файла application.properties для соответствующих профилей?

Я попытался добавить это в свой файл свойств,

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration\
  org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration\
  org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration

Но приложение по-прежнему пытается подключиться к базе данных при запуске. Являются ли эти исключения достаточными для достижения моего требования?

4b9b3361

Ответ 1

То, как я буду делать подобное:

@Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@Profile ("client_app_profile_name")
public class ClientAppConfiguration {
    //it can be left blank
}

Напишите аналогичную для серверного приложения (без исключений).

Последний шаг - отключить автоматическую настройку из основного класса загрузки spring:

@SpringBootApplication
public class SomeApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(SomeApplication.class);
    }

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SomeApplication.class);
    }
}

Изменить: @SpringBootApplication на:

@Configuration 
@ComponentScan

Это должно выполнить эту работу. Теперь зависимости, которые я исключил в примере, могут быть неполными. Их было достаточно для меня, но я не уверен, что все это полностью отключит библиотеки, связанные с базой данных. Проверьте список ниже, чтобы убедиться:

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#auto-configuration-classes

Надеюсь, что это поможет,

Ответ 2

Для отключения всей автоконфигурации, связанной с базой данных, и выхода из нее:

Невозможно определить класс встроенного класса базы данных для типа базы данных NONE

1. Использование аннотации:

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

    public static void main(String[] args) {
        SpringApplication.run(PayPalApplication.class, args);
    }
}

2. Использование Application.properties:

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

Ответ 3

Похоже, вы просто забыли запятую, чтобы отделить классы. Поэтому, основываясь на вашей конфигурации, будет работать следующее:

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

В качестве альтернативы вы также можете определить его следующим образом:

spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
spring.autoconfigure.exclude[1]=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
spring.autoconfigure.exclude[2]=org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
spring.autoconfigure.exclude[3]=org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration

Ответ 4

Выход для меня заключался в том, чтобы добавить

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

аннотация для класса с запуском Spring boot (помечена `@SpringBootApplication).

Наконец, это выглядит так:

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

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 }