Préface
Cet article se concentrera sur l'explication de l'utilisation de l'annotation @propertysource dans le printemps et de la façon de charger le fichier de configuration spécifié via l'annotation de propriété. Il utilise également l'annotation PropertySource et les annotations @configurationproperties. Je ne dirai pas beaucoup ci-dessous, apprenons et étudions avec l'éditeur.
1.1. PropertySource Annotation charge le fichier de propriété spécifié
Le framework Spring fournit une annotation PropertySource, dans le but de charger le fichier de propriété spécifié. Ensuite, jetons un coup d'œil à utiliser cette annotation. Nous définissons d'abord une classe de configuration et ajoutons une annotation PropertySource à la classe comme suit:
@ Composant @ propriétéSource (value = {"classpath: config / jdbc-bainuo-dev.properties"}, ignoreResourceNotFound = false, encoding = "utf-8", name = "jdbc-bainUo-dev.properties",) public class CustomerDatasourceConfig1 {private string url; public String getUrl () {return url; } public void setUrl (string url) {this.url = url; } @Override public String toString () {return "CustomerDataSourceConfig {" + "url = '" + url +' / '' + '}'; }} Le but du code ci-dessus est de charger jdbc-bainuo-dev.properties dans le fichier de configuration dans le chemin de classe de classe. Lorsque l'encodage est utilisé pour spécifier le codage utilisé pour lire le fichier de propriété, nous utilisons généralement UTF-8; IgnoreResourCenotFound signifie si une erreur est signalée lorsque le fichier de configuration spécifié n'existe pas et que la valeur par défaut est fausse; Par exemple, le fichier de propriété de chargement spécifié ci-dessus est jdbc-bainuo-dev.properties . Si le fichier n'existe pas, le programme ne rapportera pas une erreur lorsque IgnoreResourCenotFound est vrai. Si IgnoreResourCenotFound est faux, le programme rapportera directement une erreur. Dans le développement réel du projet, il est préférable de définir IgnoreResourCenotFound à False. La valeur par défaut de ce paramètre est fausse.
La valeur de la valeur est de définir le fichier d'attribut à charger et plusieurs propriétés peuvent être chargées en même temps. La valeur du nom que nous définissons est jdbc-bainuo-dev.properties . Cette valeur doit être unique dans l'environnement Springboot, si elle n'est pas définie, la valeur est: " class path resource [config/jdbc-bainuo-dev.properties] ".
Beaucoup de gens se demandent peut-être pourquoi il s'agit de " class path resource [config/jdbc-bainuo-dev.properties] "? Cela implique la ressource de classe d'encapsulation au printemps pour les fichiers de ressources. La valeur que nous avons configurée ci-dessus est " classpath:config/jdbc-bainuo-dev.properties ", donc Spring a constaté qu'il commence par ClassPath, donc la fin utilise la sous-classe ClassPathResource. Si cela commence par un fichier, la classe que vous finissez par utiliser est FileSystemResource.
Après avoir compris la classe de ressources décrite ci-dessus. Informons à nouveau que si la valeur de nom n'est pas définie dans @PropertySource, la valeur de la règle de nom de génération est: trouver la sous-classe de ressource encapsulée finale en fonction de la valeur de valeur, puis appelez la méthode GetDescription dans l'objet d'instance de sous-classe de ressource spécifique. La valeur de retour de la méthode GetDescription est la valeur finale du nom.
Par exemple, la méthode GetDescription dans la classe ClassPathResource est implémentée comme suit:
public String getDescription () {StringBuilder Builder = new StringBuilder ("Class Path Resource ["); String pathTouse = path; if (this.clazz! = null &&! pathtouse.startswith ("/")) {builder.append (classutils.classPackageAsResourcePath (this.clazz)); builder.append ('/'); } if (pathtouse.startswith ("/")) {pathTouse = pathTouse.substring (1); } builder.append (pathTouse); builder.append (']'); return builder.toString ();} La logique de traitement de nom ci-dessus peut être temporairement impressionnée et le code source sera suivi en détail pour l'explication à l'avenir.
1.2. PropertySource Annotation charge le test de fichier de propriété spécifié
Dans ce qui précède, nous avons configuré l'annotation PropertySource pour charger le fichier "classpath:config/jdbc-bainuo-dev.properties" . La structure du répertoire de ce fichier est indiquée dans la figure ci-dessous:
Le contenu du fichier JDBC-Bainuo-Dev.Properties est le suivant:
printemps.datasource.shareniu.url = Shareniu
Le contenu du fichier application.properties est le suivant:
printemps.profiles.active = dev
Dans le fichier de configuration ci-dessus, la propriété spring.profiles.active configure l'environnement actuel utilisé est Dev. spring.datasource.shareniu.url n'est qu'une propriété ordinaire et n'a pas de sens particulier en soi.
Commençons à écrire la classe de démarrage de Springboot comme suit:
@Springbootapplicationpublic class DemoApplication {public static void main (String [] args) {SpringApplication SpringApplication = new SpringApplication (DemoApplication.Class); ConfigurableApplicationContext configurableApplicationContext = springApplication.run (args); CustomerDataSourCeConfig1 CustomerDataSourceConfig = configurableApplicationContext .getBean (CustomerDataSourceConfig1.class); System.out.print (CustomerDataSourceConfig);}} Exécutez le code ci-dessus et la sortie du programme est la suivante:
CustomerDataSourceConfig {url = 'null'} Étrange, pourquoi l'URL est-elle vide? L'annotation PropertySource n'a-t-elle pas déjà chargé le fichier jdbc-bainuo-dev.properties dans l'environnement actuel? Nous pourrions tout aussi bien essayer de voir si la propriété spring.datasource.shareniu.url dans jdbc-bainuo-dev.properties peut être obtenue, puis vérifiez de côté que l'annotation de propriété a chargé jdbc-bainuo-dev.properties dans l'environnement actuel.
Modifiez le code de la classe de démarrage ci-dessus comme suit:
@Springbootapplicationpublic class DemoApplication {public static void main (String [] args) {SpringApplication SpringApplication = new SpringApplication (DemoApplication.Class); ConfigurableApplicationContext configurableApplicationContext = springApplication.run (args); CustomerDataSourceConfig1 CustomerDataSourceConfig = configurableApplicationContext.getBean (CustomerDataSourceConfig1.class); String Property = ConfigurableApplicationContext.getEnvironment (). GetProperty ("Spring.Datasource.shareniu.url"); System.out.println (propriété); System.out.print (CustomerDataSourceConfig);}} Exécutez le code ci-dessus et la sortie du programme est la suivante:
Shareniu
D'après le code ci-dessus, nous pouvons voir que la propriété est en effet efficace. Alors, comment injecter automatiquement la valeur de propriété spring.datasource.shareniu.url dans la propriété URL dans la classe CustomerDataSourceConfig1?
1.3. PropertySource Annotation lit le fichier spécifié et injecte les propriétés dans la classe de configuration
Spring fournit une annotation @value pour lire les valeurs d'attribut dans le fichier de configuration et les définir dans les attributs correspondants. Ici, nous apprenons à utiliser @Value Annotation. Il en va de même pour les deux classes du texte ci-dessus comme exemples d'explications détaillées. Tout d'abord, vous devez modifier la classe CustomerDataSourceConfig1. La partie de modification est la suivante:
@ Composant @ propriétéSource (name = "jdbc-bainuo-dev.properties", value = {"classpath: config / jdbc-bainuo-dev.properties"}, IgnoreResourCenotFound = false, coding = "utf-8") public class CustomerDataSourceConfig1 { @Value ("$ {printemps.datasource.shareniu.url}") URL de chaîne privée;} Dans la classe ci-dessus, l'annotation @value est ajoutée au champ URL et l'expression de Spel est spécifiée comme ${spring.datasource.shareniu.url} . Exécutez à nouveau la classe Springboot Boot et la sortie de la console est Shareniu. Cela indique que l'injection de valeurs d'attribut peut en effet être effectuée via @Value. Cependant, l'un des aspects les moins conviviaux de l'utilisation de la méthode d'annotation @Value est que lorsqu'il existe un grand nombre de propriétés dans le projet de configuration, nous devons ajouter une annotation @value aux champs de classe un par un, ce qui est vraiment difficile, mais nous pouvons solvurer ce problème via la annotation @configurationproperties fournis par Springboot.
1.4. ConfigurationProperties Annotation Utilisation
@ConfigurationProperties est une annotation au niveau de la classe, et l'utilisation spécifique est la suivante:
@ Composant @ configurationProperties (prefix = "printemps.datasource.shareniu") @propertysource (name = "jdbc-bainuo-dev.properties", value = {"classpath: config / jdbc-bainuo-dev.properties" CustomerDataSourceConfig1 {URL de chaîne privée; } Dans le code ci-dessus, l'annotation ConfigurationProperties est ajoutée à la classe CustomerDataSourceConfig1, et le préfixe de la propriété est spring.datasource.shareniu . De cette façon, lorsque Springboot processus, il analysera tous les champs de la classe actuelle et recherchera et assemblera les propriétés. Par exemple, si nous configurons prefix = "spring.datasource.shareniu" , il y a un champ URL dans la classe CustomerDataSourceConfig1, alors l'attribut que le champ URL doit correspondre est préfixe + champ = spring.datasource.shareniu.url .
Ce n'est pas seulement une question? Et si le champ spécifié ne trouve pas l'attribut? Cela peut être configuré comme suit:
@Configurationproperties (prefix = "spring.datasource.shareniu", ignoreunknownFields = true, ignoreinvalidFields = true)
Ignoreunknownfields: ignorez les champs inconnus.
IgnoreInvalidfields: s'il faut ignorer les champs qui n'ont pas vérifié. Comment comprenez-vous cela? Par exemple, si nous configurons une variable de type de chaîne dans le fichier de configuration et que les champs de la classe sont de type int, il rapportera certainement une erreur. Si cela se produit, nous pouvons tolérer que la valeur de la propriété doit être configurée pour vrai. Cette valeur de paramètre par défaut est fausse.
Cet article expliquera ici. Dans l'article suivant, nous expliquerons comment @propertysource Annotation peut réaliser la lecture des fichiers de configuration dans différents environnements. Les fichiers dans différents environnements sont basés dynamiquement à la lecture. PropertySource n'est pas pris en charge par défaut, nous devons donc étendre le code source correspondant à cette annotation.
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.