Je travaille avec Spring Boot. J'ai des propriétés définies dans application.yml.
spring:
datasource:
username: username
password: password
les valeurs de nom d'utilisateur et de mot de passe sont stockées en externe, quel programme récupère au démarrage. disons que le bean qui les récupère au démarrage est dbConfig
Comment puis-je injecter des valeurs de dbConfgig vers application.yml?
J'utilise la configuration automatique de spring-data-jpa qui se connecte automatiquement à la base de données au démarrage. Je veux que ces valeurs soient chargées dans application.yml avant que Spring se connecte à la base de données.
3 Réponses :
Je pense que tout d'abord, vous devez créer un thread pour détecter le changement dans votre db Config file , puis vous pouvez redémarrer votre bean (source de données) pour que votre changement soit effectif.
le rechargement du bean est quelque chose avec lequel je peux travailler. Mais le problème sera lors du démarrage, la connexion à la base de données sera établie et échouera.
Il n'est pas nécessaire d'injecter l'utilisateur / mot de passe dans application.yml . Vous pouvez les définir par programme comme ceci:
@Configuration
public class DataSourceConfig {
@Bean
public DataSource getDataSource() {
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("org.h2.Driver");
dataSourceBuilder.url("jdbc:h2:mem:test");
// Take the values from external source, then set them
dataSourceBuilder.username("username");
dataSourceBuilder.password("password");
return dataSourceBuilder.build();
}
}
J'utilise spring-boot-cloud-gcp-sql-autoconfigure. Cela crée automatiquement un bean Datasource. Il prend le nom d'utilisateur et le mot de passe de application.yml
@ warrior107 Le spring-boot-cloud-gcp-sql-autoconfigure n'existe pas.
Vous pouvez également essayer le nuage de printemps pour stocker les propriétés. Et vous pouvez ensuite utiliser à l'aide d'espaces réservés.
Voulez-vous dire un espace réservé? stackoverflow.com/questions/53273773/...
oui quelque chose de similaire à ça. mais puis-je appeler une fonction dans l'espace réservé?
Comme je le sais, impossible d'appeler une fonction sur application.yaml, pourquoi ne pas définir la valeur dans votre script de démarrage? @ Warrior107