Отключить автоматическую настройку, связанную с базой данных, в 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
Но приложение по-прежнему пытается подключиться к базе данных при запуске. Являются ли эти исключения достаточными для достижения моего требования?
Ответы
Ответ 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);
}
}