suchen
HeimJavajavaLernprogrammMit welchen Methoden kann SpringBoot Yml-Konfigurationsdateien lesen?

1. Grundlegende Verwendung: Verwenden Sie die Annotation @Autowired, um die Environment-Klasse einzufügen.

Diese Methode ist häufiger anzutreffen, genau wie das Injizieren von Service oder Dao. Deklarieren Sie eine Environment-Klassenvariable und fügen Sie die Annotation @Autowire hinzu. Wie folgt:

import org.springframework.core.env.Environment;
 
@Autowired
private Environment environment;

Die Verwendungsmethode besteht darin, die Informationen in der Konfigurationsdatei über die Methode getProperty(key) zu lesen:

1). Konfiguration in Yml

heycloud:
  jobInfo: http://www.baidu.com

2).

//获取url(注意:key一定要写完整,有几层就写几层,每层的名字用点分隔。)
String resultUrl = environment.getProperty("heycloud.jobInfo");

Hinweis: Diese Methode lautet: Es gibt bestimmte Einschränkungen beim Abrufen von Konfigurationsinformationen, einschließlich der folgenden:

Einschränkung 1:

Wenn Sie Konfigurationsinformationen in einer statischen Methode lesen möchten, können Sie die Umgebung nicht einfach als statisch definieren Beim Injektionsmechanismus muss eine statische Bean injiziert werden. Das heißt, der Wert der Variable ist null. Sobald das Bean-Objekt verwendet wird, wird eine Nullzeigerausnahme gemeldet.

Falsche Schreibweise:

@Autowired
    private static Environment environment;//这是错误写法,environment只会是null
    public void test(){
        //获取url
        String resultUrl = environment.getProperty("heycloud.jobInfo");//一旦使用environment变量就会报空指针异常    
    }

Richtige Schreibweise:

2. Umgebungs-Getter-/Setter-Methoden hinzufügen;

3.

Dies kann effektiv injiziert werden. Es ist zu beachten, dass nur die get-Methode statisch sein muss und die set-Methode nicht statisch sein muss, da sonst die erhaltene Umgebung immer noch null ist.

Der korrekte Code lautet wie folgt:

    private static Environment environment;
 
    @Autowired
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }
 
    public static Environment getEnvironment() {
        return environment;
    }

Einschränkung 2:

Die Umgebung kann die angepasste Yml-Konfigurationsdatei nicht direkt lesen. Sie müssen die angepasste Yml-Datei der Spring-Umgebung zugänglich machen, indem Sie eine Konfigurationsklasse hinzufügen.

Lösung:

Definieren Sie eine Konfigurationsklasse und laden Sie den benutzerdefinierten Yml-Dateiinhalt in Environment. Der Code lautet wie folgt:

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
 
/**
 * 配置类
 * @Description 读取自定义Yml格式配置文件
 * @Date 2021/3/15 10:40
 * @Created by LSH
 */
@Component
public class SqlConfig {
    @Bean
    public PropertySourcesPlaceholderConfigurer getSqlConfigurer() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean sqlConfigBean = new YamlPropertiesFactoryBean();
        sqlConfigBean.setResources(new ClassPathResource("sql-properties.yml"));
        configurer.setProperties(sqlConfigBean.getObject());
        return configurer;
    }
}

Sobald die Konfigurationsklasse eingerichtet ist, können Sie die Annotation @Autowired verwenden, um die Environment-Klasse einzufügen Rufen Sie die benutzerdefinierten Konfigurationsinformationen ab. Kurz gesagt: Wenn Sie auf das Problem der Einschränkung 2 stoßen, müssen Sie nur eine weitere Konfigurationsklasse schreiben.

Einschränkung 3:

Aufgrund der Ladereihenfolge ist die Methode der Verwendung von Annotationen nicht zum Lesen von Konfigurationen in statischen Codeblöcken (static{}) geeignet, selbst wenn die Lösung für Einschränkung 1 verwendet wird, wurde sie noch nicht gefunden Was die Lösung angeht, sind alle Ratschläge von vorbeikommenden Chefs willkommen.

Tatsächlich können Sie die Ladeklasse auch manuell in den statischen Block schreiben, um die Konfiguration zu laden, indem Sie den Pfad der Yml-Datei lesen. Dies ist jedoch nicht prägnant genug. Wenn mehrere Klassen diese Anforderung haben, muss jede einzelne Schreiben Sie eine Reihe von Ladeklassen, damit Sie nicht auf den Grund kommen. Es gibt jedoch mehr als eine Möglichkeit, die Konfigurationsdatei zu lesen, und es ist nicht erforderlich, einen bestimmten Baum zu identifizieren.

2. Grundlegende Verwendung: Verwenden Sie die @Value-Annotation, um Konfigurationsinformationen direkt einzufügen.

Die Verwendungsmethode ist sehr einfach: Deklarieren Sie die Klassenmitgliedsattribute und verwenden Sie die @Value-Annotation, um die Konfigurationsinformationen direkt in die Mitgliedsattribute einzufügen ist: @Value("${ xxx.xxx.xxx}").

Der Code lautet wie folgt:

    @Value("${sql.newrest.CAS_GRID}")
    private String CAS_GRID;

Hinweis:

1. Wie bei der ersten Methode muss der Schlüssel vollständig geschrieben werden und jede Ebene durch Punkte getrennt werden.

2. Diese Methode hat die gleichen Einschränkungen wie die erste Methode.

3. Erweiterte Methode

Definieren Sie eine Tool-Klasse, versehen Sie sie mit @Component, um eine Konfigurationsklasse zu werden, erben Sie ApplicationRunner, schreiben Sie run() neu und fügen Sie dann die Umgebungsklasse ein, um die Konfiguration zu erhalten jederzeit.

Der Code lautet wie folgt:

1) Definieren Sie die Konfigurationsklasse und deklarieren Sie einige statische Eigenschaften für den Empfang von Konfigurationsinformationen

@Slf4j
@Component
public class BaseConfig implements ApplicationRunner {
    @Autowired
    private Environment environment;
    
    public static String pro1;
    public static String pro2;
    public static String pro3;
  
    @Override
    public void run(ApplicationArguments args){
        pro1=environment.getProperty("pro1");
        pro2=environment.getProperty("pro2");
        pro3=environment.getProperty("pro3");
    }
}

2). Konfigurationsklasse, nicht beschränkt auf Herkömmliche Methoden, statische Methoden und statische Codeblöcke entsprechen tatsächlich der Verwendung einer Konfigurationsklasse, um Konfigurationsinformationen indirekt über Umwege zu erhalten.

Das obige ist der detaillierte Inhalt vonMit welchen Methoden kann SpringBoot Yml-Konfigurationsdateien lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:亿速云. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung?Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung?Mar 17, 2025 pm 05:46 PM

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement?Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement?Mar 17, 2025 pm 05:45 PM

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache?Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache?Mar 17, 2025 pm 05:44 PM

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden?Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden?Mar 17, 2025 pm 05:43 PM

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle?Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle?Mar 17, 2025 pm 05:35 PM

Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher

Wie kann ich Javas RMI (Remote -Methode -Aufruf) für verteiltes Computing verwenden?Wie kann ich Javas RMI (Remote -Methode -Aufruf) für verteiltes Computing verwenden?Mar 11, 2025 pm 05:53 PM

In diesem Artikel werden Javas Remote -Methodenaufruf (RMI) zum Erstellen verteilter Anwendungen erläutert. IT-Details der Schnittstellendefinition, Implementierung, Registrierungssetup und Client-Seitenaufruf, die sich mit Herausforderungen wie Netzwerkproblemen und Sicherheit befassen.

Wie verwende ich Javas Sockets -API für die Netzwerkkommunikation?Wie verwende ich Javas Sockets -API für die Netzwerkkommunikation?Mar 11, 2025 pm 05:53 PM

In diesem Artikel wird die Socket-API von Java für die Netzwerkkommunikation beschrieben, die das Setup des Client-Servers, die Datenbearbeitung und entscheidende Überlegungen wie Ressourcenverwaltung, Fehlerbehandlung und Sicherheit abdeckt. Es untersucht auch die Leistungsoptimierungstechniken, ich

Wie kann ich in Java benutzerdefinierte Netzwerkprotokolle erstellen?Wie kann ich in Java benutzerdefinierte Netzwerkprotokolle erstellen?Mar 11, 2025 pm 05:52 PM

In diesem Artikel werden benutzerdefinierte Java -Netzwerkprotokolle erstellt. Es deckt die Protokolldefinition (Datenstruktur, Framing, Fehlerbehandlung, Versioning), Implementierung (Verwendung von Sockets), Datenserialisierung und Best Practices (Effizienz, Sicherheit, Wartea ab

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),