your without with they the springboot run not for following excluded enabled done debug custom could classes because autoconfiguration are application spring hibernate spring-boot spring-data spring-data-jpa

without - Deshabilite toda la configuración automática relacionada con la base de datos en Spring Boot



the following classes could not be excluded because they are not auto configuration classes (7)

Estoy usando Spring Boot para desarrollar dos aplicaciones, una sirve como servidor y la otra es una aplicación cliente. Sin embargo, ambos son la misma aplicación que funciona de manera diferente según el perfil activo. Estoy usando la función de configuración automática de Spring Boot para configurar mis aplicaciones.

Quiero deshabilitar toda la configuración automática relacionada con la base de datos en la aplicación cliente, ya que no requerirá conexión a la base de datos. La aplicación no debe intentar establecer una conexión con la base de datos, ni tratar de usar ninguna de las características de Spring Data o Hibernate. La habilitación o deshabilitación de la configuración automática de la base de datos debe ser condicional y estar basada en el perfil activo de la aplicación.

¿Puedo lograr esto creando dos archivos application.properties diferentes para los perfiles respectivos?

Intenté agregar esto a mi archivo de propiedades,

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

Pero, la aplicación aún intenta conectarse a la base de datos al inicio. ¿Son esas exclusiones suficientes para cumplir mi requisito?


Hay una manera de excluir clases específicas de configuración automática mediante la anotación @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 atributo @SpringBootApplication#exclude es un alias para el @EnableAutoConfiguration#exclude y lo encuentro bastante útil y útil.
@Import(MyPersistenceConfiguration.class) al ejemplo para demostrar cómo puede aplicar su configuración de base de datos personalizada.


La forma en que haría algo similar es:

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

Escriba uno similar para la aplicación del servidor (sin excluir).

El último paso es deshabilitar la configuración automática desde la clase de arranque de resorte principal:

@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); } }

Cambiar: @SpringBootApplication en:

@Configuration @ComponentScan

Esto debería hacer el trabajo. Ahora, las dependencias que excluí en el ejemplo podrían estar incompletas. Fueron suficientes para mí, pero no estoy seguro si es todo para deshabilitar completamente las bibliotecas relacionadas con la base de datos. Consulte la lista a continuación para asegurarse:

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

Espero que ayude


La salida para mí era agregar

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

anotación para la clase que ejecuta Spring boot (marcado con `@SpringBootApplication).

Finalmente, se ve así:

@SpringBootApplication @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) public class Application{ public static void main(String[] args) { SpringApplication.run(Application.class, args); } }


Otra forma de controlarlo a través de Perfiles es esta:

// note: no @SpringApplication annotation here @Import(DatabaseConfig.class) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } @Configuration @Import({DatabaseConfig.WithDB.class, DatabaseConfig.WithoutDB.class}) public class DatabaseConfig { @Profile("!db") @EnableAutoConfiguration( exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) static class WithoutDB { } @Profile("db") @EnableAutoConfiguration static class WithDB { } }


Para deshabilitar toda la autoconfiguración relacionada con la base de datos y salir de:

No se puede determinar la clase de controlador de base de datos integrada para el tipo de base de datos NINGUNO

1. Usando anotación:

@SpringBootApplication @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) public class Application { public static void main(String[] args) { SpringApplication.run(PayPalApplication.class, args); } }

2. Usando Application.properties:

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


Parece que olvidaste la coma para separar las clases. Entonces, según su configuración, lo siguiente funcionará:

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

Alternativamente, también podría definirlo de la siguiente manera:

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


Recibía este error incluso si hice todas las soluciones mencionadas anteriormente.

by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''dataSource'' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfig ...

En algún momento, cuando busco el POM, había esta dependencia

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>

Y la clase Pojo tuvo las siguientes importaciones

import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;

Lo que muestra claramente que la aplicación esperaba una fuente de datos.

Lo que hice fue eliminar la dependencia JPA de pom y reemplazar las importaciones para el pojo con la siguiente vez

import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document;

Finalmente obtuve una construcción EXITOSA. Compruébalo, es posible que te hayas encontrado con el mismo problema