Printemps de Démarrage: Utilisation de la base de données et l'application.propriétés de configuration
J'ai besoin d'enregistrer la configuration du Printemps de Démarrage de l'application dans la base de données.
Est-il possible de stocker les informations de base de données dans le application.properties
et les utiliser pour vous connecter à la base de données et d'en extraire tous les autres propriétés de là?
Donc mon application.properties
ressemblerait à:
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=mydb
spring.datasource.username=user
spring.datasource.password=123456
spring.jpa.database-platform=org.hibernate.dialect.SQLServer2012Dialect
Et de l'autre la configuration pourrait être récupérée à partir de la base de données avec quelque chose comme ceci:
@Configuration
@PropertySource(value = {"classpath:application.properties"})
public class ConfigurationPropertySource {
private final ConfigurationRepository configurationRepository;
@Autowired
public ConfigurationPropertySource(ConfigurationRepository configurationRepository) {
this.configurationRepository = configurationRepository;
}
public String getValue(String key) {
ApplicationConfiguration configuration = configurationRepository.findOne(key);
return configuration.getValue();
}
}
Avec ApplicationConfiguration
comme un Entity
.
Mais le Printemps Boot ne pas obtenir la configuration de la base de données.
vous devriez être en mesure d'obtenir la db de configuration depuis un fichier de propriétés que vous avez écrit. voyez-vous une erreur dans la console?
Je reçois la configuration de la
alors qu'est-ce ConfigurationRepository faire?
Il récupère la configuration. Mais le Printemps Boot ne pas "charger" au démarrage. Par exemple, la propriété
Comment puis-je dire de Printemps de Démarrage pour charger les valeurs de la base de données comme le
Je reçois la configuration de la
application.properties
. Et je peux me connecter à la base de données et enregistrer les Entités. Mais les propriétés de la base de données ne sont pas chargées.alors qu'est-ce ConfigurationRepository faire?
Il récupère la configuration. Mais le Printemps Boot ne pas "charger" au démarrage. Par exemple, la propriété
spring.jpa.show-sql=true
est enregistré dans la base de données (avec d'autres propriétés). Si j'ai mis cette propriété dans la application.properties
fichier, il fonctionne très bien, mais si je l'ai mis dans la base de données qu'il n'a pas d'effet sur le Printemps de Démarrage.Comment puis-je dire de Printemps de Démarrage pour charger les valeurs de la base de données comme le
application.properties
fichier?OriginalL'auteur deve | 2016-11-07
Vous devez vous connecter pour publier un commentaire.
Une solution possible que vous pourriez séance d'entraînement, est d'utiliser ConfigurableEnvironment et de recharger et d'ajouter des propriétés.
Les propriétés ont été chargés, mais après votre enregistrement a été configuré. Ces propriétés à partir de la base de données peut être utilisé pour configurer les Haricots. Bien que je préfère init non pas en
@PostConstruct
mais dans la coutumeBeanPostProcessor
juste aprèsDataSource
a été lancépourriez-vous nous donner un exemple?
OriginalL'auteur kuhajeyan
Malheureusement, je n'ai pas de solution pour ce problème, mais je utiliser la solution de contournement suivante pour l'instant (nécessite un supplément de redémarrage de l'application sur la modification de la configuration).
Je charge la configuration de la base de données et l'écrire dans un autre fichier de propriétés. Ce fichier peut être utilisé avec
@PropertySource("classpath:configuration.properties")
.OriginalL'auteur deve
Une autre option est d'utiliser ApplicationContextInitializer, avec l'avantage d'être en mesure d'utiliser @Valeur directement et aussi être capable de contrat de l'ordre de priorité des propriétés.
Références:
PS: Ce code est un mélange d'autres que j'ai trouvé sur internet. Les crédits sont entièrement à partir de leurs auteurs. Désolé de ne pas être en mesure de trouver leurs liens, il y a eu de nombreux essais jusqu'à ce que vous les faire travailler. Mais si vous trouvez que cela ressemble à quelque autre a trouvé là-bas, vous pouvez être sûr que ce n'est qu'une dérivation. 😉
Environnement:
1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11)
OriginalL'auteur samarone
Ce que vous avez besoin est le Printemps Cloud Config: https://cloud.spring.io/spring-cloud-config/
Il va utiliser ad dépôt git (= base de données) avec tous les fichiers de propriétés. Au démarrage, il va obtenir la dernière version, et l'utilise pour lancer l'application.
Lorsque vous modifiez la configuration au moment de l'exécution, il est possible de se rafraîchir, sans avoir besoin de redémarrer!
En Effet @George. J'ai supposé deve voulais un endroit centralisé pour stocker les propriétés de l'application, indépendamment de la technologie.
OriginalL'auteur Tom Van Rossom