Отключить все связанные с базой данных автоконфигурации в Spring Boot
Я использую Spring Boot для разработки двух приложений, одно из которых служит сервером, а другое-клиентским приложением. Однако оба они являются одним и тем же приложением, которое работает по-разному в зависимости от активного профиля. Я использую функцию автоматической настройки Spring Boot для настройки моих приложений.
Я хочу отключить все связанные с базой данных автоконфигурации на клиентском приложении, так как он не будет требовать подключения к базе данных. Приложение не должно пытаться установить соединение с база данных, а также не пытайтесь использовать какие-либо данные Spring или функции гибернации. Включение или отключение автоматической конфигурации базы данных должно быть условным и основываться на активном профиле приложения.
могу ли я достичь этого, создав два разных приложения.файлы свойств для соответствующих профилей?
Я попытался добавить это в свой файл свойств,
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
но приложение по-прежнему пытается подключиться к базе данных на старте. Являются ли эти исключения достаточно для достижения моего требования?
6 ответов:
то, как я бы сделал подобное:
@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
это должно сделать работу. Теперь зависимости, которые я исключил в примере, могут быть неполными. Их было достаточно для меня, но я не уверен, что все это полностью отключит библиотеки, связанные с базой данных. Проверьте список ниже, чтобы быть уверенным:
надеюсь, что это поможет
для отключения всех баз данных, связанных с автоматической настройки и выход из:
не удается определить класс встроенного драйвера базы данных для типа базы данных 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. использовать приложения.свойства:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
Похоже, вы просто забыли запятую, чтобы разделить классы. Поэтому на основе вашей конфигурации будет работать следующее:
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
выход для меня, чтобы добавить
@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); } }
есть способ исключить определенные классы автоматической конфигурации с помощью
@SpringBootApplication
Примечание.@Import(MyPersistenceConfiguration.class) @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) public class MySpringBootApplication { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class, args); } }
@SpringBootApplication#exclude
атрибут-это псевдоним для@EnableAutoConfiguration#exclude
атрибут и я нахожу его довольно удобным и полезным.
Я добавил@Import(MyPersistenceConfiguration.class)
к примеру, чтобы продемонстрировать, как можно применить настраиваемую конфигурацию базы данных.
Я получал эту ошибку, даже если я сделал все решения, упомянутые выше.
by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfig ...
в какой-то момент, когда я смотрю на POM, в нем была эта зависимость
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
и класс Pojo имел следующие импорта
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;
что ясно показывает, что приложение ожидало источник данных.
что я сделал, я удалил зависимость JPA от pom и заменил импорт для pojo следующим один раз
import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document;
наконец-то я получил успешную сборку. Проверьте это вы, возможно, столкнулись с той же проблемой