J'utilise Spring Boot pour développer deux applications, l'une sert de serveur et l'autre est une application cliente. Cependant, les deux sont la même application qui fonctionnent différemment en fonction du profil actif. J'utilise la fonction de configuration automatique de Spring Boot pour configurer mes applications.
Je souhaite désactiver toute la configuration automatique liée à la base de données sur l'application cliente, car elle ne nécessitera pas de connexion à la base de données. L'application ne doit pas essayer d'établir une connexion avec la base de données, ni essayer d'utiliser l'une des fonctionnalités Spring Data ou Hibernate. L'activation ou la désactivation de la configuration automatique de la base de données doit être conditionnelle et basée sur le profil actif de l'application.
Puis-je y parvenir en créant deux fichiers application.properties différents pour les profils respectifs?
J'ai essayé d'ajouter ceci à mon fichier de propriétés,
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
Mais, l'application essaie toujours de se connecter à la base de données au démarrage. Ces exclusions sont-elles suffisantes pour répondre à mes exigences?
Réponses:
La façon dont je ferais une chose similaire est:
Écrivez-en un similaire pour l'application serveur (sans les exclusions).
La dernière étape consiste à désactiver la configuration automatique de la classe principale de démarrage à ressort:
Changer:
@SpringBootApplication
en:Cela devrait faire le travail. Maintenant, les dépendances que j'ai exclues dans l'exemple peuvent être incomplètes. Ils étaient suffisants pour moi, mais je ne sais pas si tout est pour désactiver complètement les bibliothèques liées à la base de données. Vérifiez la liste ci-dessous pour être sûr:
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#auto-configuration-classes
J'espère que cela pourra aider
la source
@SpringBootApplication
a uneexclude
propriété, pas besoinClientAppConfiguration
.@SpringBootApplication
, puis dans le package spécifique, créez une@Configuration
classe qui fait une@Import
des classes pertinentes et dépend de@Profile
ou@Conditional
. De cette façon, vous pouvez tester chaque couche d'application sans que la configuration automatique ne fuit dans toute l'application. Voulez-vous tester DB? Analysez simplement le package DB, configurez une base de données fictive, et vous êtes prêt à partir.Pour désactiver toute la configuration automatique liée à la base de données et quitter:
1. Utilisation de l'annotation:
2. En utilisant Application.properties:
la source
On dirait que vous venez d'oublier la virgule pour séparer les classes. Donc, en fonction de votre configuration, ce qui suit fonctionnera:
Vous pouvez également le définir comme suit:
la source
Il existe un moyen d'exclure des classes de configuration automatique spécifiques à l'aide de l'
@SpringBootApplication
annotation.@SpringBootApplication#exclude
attribute est un alias pour@EnableAutoConfiguration#exclude
attribut et je le trouve plutôt pratique et utile.J'ai ajouté
@Import(MyPersistenceConfiguration.class)
à l'exemple pour montrer comment vous pouvez appliquer votre configuration de base de données personnalisée.la source
La solution pour moi était d'ajouter
annotation à la classe exécutant Spring boot (marquée avec `@SpringBootApplication).
Enfin, cela ressemble à:
la source
Une autre façon de le contrôler via les profils est la suivante:
la source
J'ai eu le même problème ici, résolu comme ceci:
Ajoutez simplement un autre
application-{yourprofile}.yml
où "votre profil" pourrait être "client".Dans mon cas, je voulais simplement supprimer Redis dans un profil Dev, j'ai donc ajouté un à
application-dev.yml
côté du principalapplication.yml
et cela a fait le travail.Dans ce fichier, j'ai mis:
J'aime le fait qu'il n'est pas nécessaire de changer le code de l'application pour cela.
la source
J'obtenais cette erreur même si j'avais fait toutes les solutions mentionnées ci-dessus.
À un moment donné, lorsque je regarde le POM, il y avait cette dépendance
Et la classe Pojo avait les importations suivantes
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;
Ce qui montre clairement que l'application attendait une source de données.
Ce que j'ai fait, c'est que j'ai supprimé la dépendance JPA de pom et remplacé les importations pour le pojo par ce qui suit une fois
import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document;
Enfin, j'ai obtenu une construction réussie. Vérifiez que vous avez peut-être rencontré le même problème
la source
J'ajoute dans myApp.java, après @SpringBootApplication
Et changé
Donc, j'ai ceci dans ma classe principale (myApp.java)
}
Et travaille pour moi! =)
la source