Отключить все связанные с базой данных автоконфигурации в 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 65

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

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

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

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

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

не удается определить класс встроенного драйвера базы данных для типа базы данных 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;

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