Maison  >  Article  >  Java  >  Comment charger des fichiers de configuration externes une fois le projet SpringBoot transformé en fichier jar

Comment charger des fichiers de configuration externes une fois le projet SpringBoot transformé en fichier jar

PHPz
PHPzavant
2023-05-11 23:28:141946parcourir

1. Application.properties est externe

La plupart des informations de configuration sont configurées dans application.properties, ce fichier peut-il donc être externe ? Bien sûr, cela est possible.

Définissez d'abord une propriété dans application.preperties :

demo.name = hello.01

Utilisation dans le contrôleur :

@Value("${demo.name}")
private String demoName;
 
@RequestMapping("/test")
public String test(){
    return this.demoName;
}

Mettez le projet dans un package jar et démarrez-le en utilisant java -jar :

java -jar springboot-out-properties-0.0 .1 -SNAPSHOT.jar

La valeur lue à ce moment est : hello.01.

Copiez le fichier application.properties dans le projet et placez-le dans le même chemin que le package jar. Modifiez la valeur de la propriété en :

demo.name = hello.02

Utilisez ensuite la commande ci-dessus pour redémarrer et voir l'effet. . Surprise ou pas, Spring Boot est tellement génial. Le package jar peut être lu directement à partir du même chemin.

Si nous créons une nouvelle configuration sous le jar et y mettons application.properties, pouvons-nous l'identifier à l'aide de la commande ci-dessus ? La réponse est oui,

SpringApplication chargera les propriétés du fichier application.properties à l'emplacement suivant et l'ajoutera à l'environnement Spring :

  • sous-répertoire/config dans le répertoire actuel

  • répertoire racine classpath

  • Répertoire/config dans le chemin de classe

  • Répertoire actuel

Si un répertoire personnalisé, tel que conf, n'est pas reconnu pour le moment, vous pouvez utiliser --spring.config.location pour spécifier le chemin. La commande d'exécution est la suivante :

java -jar springboot-out-properties-0.0.1-SNAPSHOT.jar--spring.config.location=conf/application.properties

Bien sûr, vous pouvez également utiliser le chemin absolu pour spécifier :

java - jar springboot-out-properties-0.0.1-SNAPSHOT.jar--spring.config.location=/Users/linxiangxian/Downloads/conf/application.properties

Deuxièmement, @PropertySource external

Dans le projet, certaines configurations permettront de personnaliser le fichier de propriétés à utiliser, par exemple, définir demo.properties :

demo.nickname = hello.10
demo.weixin = springboot

Utilisez @PropertySource pour spécifier le fichier de configuration :

 /**
 * @PropertySource的例子
 * <p>
 */
@Configuration
@ConfigurationProperties(prefix = "demo")
@PropertySource(value = {"classpath:demo.properties"})
public class DemoProperties {
    private String nickname;
    private String weixin;
 
    public String getNickname() {
        return nickname;
    }
 
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
 
    public String getWeixin() {
        return weixin;
    }
 
    public void setWeixin(String weixin) {
        this.weixin = weixin;
    }
 
    @Override
    public String toString() {
        return "DemoProperties{" +
                "nickname=&#39;" + nickname + &#39;\&#39;&#39; +
                ", weixin=&#39;" + weixin + &#39;\&#39;&#39; +
                &#39;}&#39;;
    }
}

Ensuite, vous pouvez accéder à ce fichier de configuration à ce moment, transformez-le en package jar et exécutez la commande :

java -jar springboot-out-properties-0.0.1-SNAPSHOT.jar

La valeur renvoyée à ce moment est : hello.10

Mettez demo.properties dans le même chemin que le package jar et modifiez la valeur demo.name en hello.11, exécutez la commande ci-dessus, Barbie Q, le résultat est toujours hello.10, indiquant que Spring Boot ne peut pas trouver le fichier de propriétés personnalisé de l'extérieur .

Alors, que pouvons-nous faire pour résoudre ce problème ?

C'est très simple. @PropertySource prend en charge plusieurs configurations de plusieurs chemins, qui peuvent être configurées comme ceci :

@PropertySource(value = {"classpath:demo.properties","file:./demo.properties"},ignoreResourceNotFound = true)

Lorsque nous configurons plusieurs chemins et que les fichiers de configuration dans plusieurs chemins existent, SpringBoot les chargera tous et couvrira le même contenu. . Ainsi, lorsque nos informations de configuration ne distinguent que les chemins externes et internes et que le contenu est exactement le même, écrivez simplement le chemin du fichier à la fin. Lorsque nous démarrons localement, parce que le chemin du fichier n'existe pas, le chemin de classe sera chargé ; lorsque le fichier jar sera démarré, le chemin du fichier écrasera le contenu du chemin du chemin de classe ;

ignoreResourceNotFound = true doit être ajouté, sinon une erreur se produira ; être signalé s’il est introuvable. Après l'ajout, les fichiers de configuration introuvables seront ignorés.

À ce stade, placez simplement le fichier de configuration demo.properties au même niveau que le package jar.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer