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 funcionan 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 intentar utilizar ninguna de las funciones de Spring Data o Hibernate. La habilitación o deshabilitación de la configuración automática de la base de datos debe estar condicionada y 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
Sin embargo, la aplicación aún intenta conectarse a la base de datos al inicio. ¿Son esas exclusiones suficientes para cumplir con mi requisito?
Respuestas:
La forma en que haría algo similar es:
Escriba uno similar para la aplicación del servidor (sin exclusiones).
El último paso es deshabilitar la configuración automática de la clase principal de arranque de primavera:
Cambiar:
@SpringBootApplication
en:Esto debería hacer el trabajo. Ahora, las dependencias que excluí en el ejemplo pueden estar incompletas. Fueron suficientes para mí, pero no estoy seguro de si todo es 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
fuente
@SpringBootApplication
Tiene unaexclude
propiedad, no necesitaClientAppConfiguration
.@SpringBootApplication
, y luego en el paquete específico, crearía una@Configuration
clase que hace una@Import
de las clases relevantes y depende de@Profile
o@Conditional
. De esa manera, puede probar cada capa de la aplicación sin que la configuración automática se filtre por toda la aplicación. ¿Quieres probar DB? Simplemente escanee el paquete de la base de datos, configure una base de datos simulada y listo.Para deshabilitar toda la autoconfiguración relacionada con la base de datos y salir de:
1. Usando anotación:
2. Usando Application.properties:
fuente
Parece que olvidaste la coma para separar las clases. Entonces, según su configuración, funcionará lo siguiente:
Alternativamente, también puede definirlo de la siguiente manera:
fuente
Existe una forma de excluir clases específicas de configuración automática mediante la
@SpringBootApplication
anotación.@SpringBootApplication#exclude
atributo es un alias para@EnableAutoConfiguration#exclude
atributo y lo encuentro bastante útil y útil.Agregué
@Import(MyPersistenceConfiguration.class)
al ejemplo para demostrar cómo puede aplicar la configuración de su base de datos personalizada.fuente
La salida para mí fue agregar
anotación a la clase que ejecuta Spring boot (marcada con `@SpringBootApplication).
Finalmente, se ve así:
fuente
Otra forma de controlarlo a través de Perfiles es esta:
fuente
Tuve el mismo problema aquí, resuelto así:
Simplemente agregue otro
application-{yourprofile}.yml
donde "su perfil" podría ser "cliente".En mi caso, solo quería eliminar Redis en un perfil de desarrollador, así que agregué un
application-dev.yml
junto al principalapplication.yml
e hizo el trabajo.En este archivo pongo:
Me gusta el hecho de que no es necesario cambiar el código de la aplicación para hacer eso.
fuente
Recibí este error incluso si hice todas las soluciones mencionadas anteriormente.
En algún momento, cuando busqué el POM, hubo esta dependencia en él
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 de JPA de pom y reemplacé las importaciones de pojo con lo siguiente una vez
import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document;
Finalmente obtuve una compilación EXITOSA. Compruébalo, es posible que te hayas encontrado con el mismo problema
fuente
Agrego myApp.java, después de @SpringBootApplication
Y cambiado
Entonces, tengo esto en mi clase principal (myApp.java)
}
¡Y trabaja para mí! =)
fuente