[Pratique] a Springboot lit les éléments de configuration dans le fichier de configuration est attribué à des constantes statiques

Configuration Point Springboot lit le fichier de configuration est attribué à des constantes statiques

Dans les applications pratiques, ces scénarios d'utilisation, vous devez définir une variable globale, l'approche générale est d'écrire une constante de classe, enregistrez les variables globales en tant que variables membres statiques désavantage constante de classe de cette méthode est que si la nécessité constante de changement, ou multi-environnement (dev, test, prod) projet, les constantes de différents environnements sont différents, cette fois-ci, vous pouvez écrire les constantes dans le fichier de configuration. Donc, il y a une demande pour de tels sujets,Les éléments de configuration dans le fichier de configuration pour initialiser une constante statique.


fond

1. Déterminer les moyens de fichier de configuration de charge

  • Cette référence à différents profils de charge, et pour parvenir à laisser springboot trouver automatiquement le fichier de configuration spécifié en fonction des paramètres de démarrage, plutôt que d'utiliser les Précise du fichier de configuration le nom du disque codé lire le chemin d'accès spécifié, de sorteUtilisez façon d'annotation @Value pour charger les éléments de configuration

2. Procédé de commutation de différents environnements

  • Cette référence à une variété d'environnements de manière de commutation, afin d'obtenir exactement le même jeu de code utilisé pour le passage à un environnement différent (plutôt que d'écrire les informations de profil dans le code), choisi iciRéglez le paramètre de démarrage lorsqu'un projet démarre Procédé selon la --spring.profiles.active = devPour déterminer le fichier de configuration à lire
  • Cet article ne sert pas à modifier la pom.xml façon

3. Chargez le fichier de configuration de la manière des éléments de configuration

  • Tel qu'il est utilisé ici, charger les éléments de configuration dans le constructeur de la classe de constantes

4. Ici, vous devez comprendre l'ordre de la séquence de démarrage pour charger le fichier de configuration sous la sprintboot

1. sprintboot la séquence de démarrage: de haut en bas

  1. Création Bean
  2. Bean Initialisation, Bean à chaque affectation de variable membre

2. ordre de chargement de fichier de configuration: haut en bas

  1. application.yml
  2. application.yaml
  3. application.properties

Faites attention: Cet article n'obtenir un fichier de classe constante et projet springboot classes de démarrage dans le cas du même module, projet multi-module, comment atteindre la classe de constantes d'initialisation inter-module, encore besoin d'explorer.

Des méthodes spécifiques

1. Déterminer le fichier de configuration à lire

Dans cet article, un projet sprintboot à titre d'exemple, le fichier de configuration du projet a quatre:

  • application.properties - le principal fichier de configuration
  • application-dev.properties - dev profil de l'environnement
  • application-test.properties - environnement de test profil
  • application-prod.properties - environnement prod profil

2. Ecrire classe constantes

Lorsque cela est nécessaire projet springboot démarrage, charge automatique des éléments de configuration et affectées aux variables membres de statique de classe constante

    1. @Component ajouté étape par étape dans la déclaration de classe des constantes de classe
    1. Initialiser les variables membres statiques
    1. Créer un constructeur (il y a constructeur argument), plus un commentaire sur la méthode @Autowired
    1. Dans la partie de la déclaration des paramètres de la méthode, utiliser des notes @value pour obtenir la valeur des éléments de configuration, les variables membres statiques affectées à la classe

Automatiquement initialiser les variables membres statiques assignées à chaque classe d'éléments de configuration et le fichier de configuration de classe constante dans le projet commencé, autour des appels à projets dans

  • Note: Cet article n'obtenir un fichier de classe constante et projet springboot classes de démarrage dans le cas du même module, projet multi-module, comment atteindre la classe de constantes d'initialisation inter-module, encore besoin d'explorer.

Exemples

code section

  • application.properties
# Tomcat
server.tomcat.max-threads=1000
server.tomcat.min-spare-threads=30
server.port=8080

# prod|test|dev 该配置项接收启动命令参数
spring.profiles.active=${spring.profiles.active}
  • application-dev.properties
# env flag
env.flag=dev
  • application-test.properties
# env flag
env.flag=test
  • application-prod.properties
# env flag
env.flag=prod
  • Classe de projet: DemoProjectApplication
@SpringBootApplication
public class AdRestApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdRestApplication.class, args);
        System.out.println("Current env :【 " + Constant.env + " 】 ");
    }
}
  • constantes de classe: Constant
@Component
public class Constant {
   public static String env;

    @Autowired
    private Constant(@Value("${spring.profiles.active}") String env,
                     @Value("${ldap.url}") String ldapUrl) {
        Constant.env = env;
    }
}

les résultats

Lorsque la commande de démarrage --spring.profiles.active = exemple dev:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.4.RELEASE)

2020-03-15 16:45:38.075 [main] INFO  com.xyy.ops.ad.rest.AdRestApplication - Starting AdRestApplication on arthas with PID 9272 (D:\Java_Project\ad-interface\ad-rest\target\classes started by c8 in D:\Java_Project\ad-interface)
2020-03-15 16:45:38.077 [main] INFO  com.xyy.ops.ad.rest.AdRestApplication - The following profiles are active: dev
2020-03-15 16:45:39.082 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 55070 (http)
2020-03-15 16:45:39.089 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-55070"]
2020-03-15 16:45:39.090 [main] INFO  org.apache.catalina.core.StandardService - Starting service [Tomcat]
2020-03-15 16:45:39.090 [main] INFO  org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.30]
2020-03-15 16:45:39.202 [main] INFO  o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
2020-03-15 16:45:39.202 [main] INFO  org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 1067 ms
2020-03-15 16:45:39.673 [main] INFO  o.s.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
2020-03-15 16:45:39.728 [main] INFO  o.s.b.a.web.servlet.WelcomePageHandlerMapping - Adding welcome page: class path resource [static/index.html]
2020-03-15 16:45:39.837 [main] INFO  o.s.ldap.core.support.AbstractContextSource - Property 'userDn' not set - anonymous context will be used for read-write operations
2020-03-15 16:45:39.889 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-55070"]
2020-03-15 16:45:39.911 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 55070 (http) with context path ''
2020-03-15 16:45:39.914 [main] INFO  com.xyy.ops.ad.rest.AdRestApplication - Started AdRestApplication in 2.24 seconds (JVM running for 3.03)
Current env :【 dev 】 
Publié 57 articles originaux · éloge de won 35 · Vues 100 000 +

Je suppose que tu aimes

Origine blog.csdn.net/achuDk/article/details/104892107
conseillé
Classement