Inhaltsverzeichnis
1. Grundlegende Verwendung: Verwenden Sie die Annotation @Autowired, um die Environment-Klasse einzufügen.
Heim Java javaLernprogramm Mit welchen Methoden kann SpringBoot Yml-Konfigurationsdateien lesen?

Mit welchen Methoden kann SpringBoot Yml-Konfigurationsdateien lesen?

Jun 02, 2023 pm 10:20 PM
springboot yml

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;
Nach dem Login kopieren

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
Nach dem Login kopieren

2).

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

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变量就会报空指针异常    
    }
Nach dem Login kopieren

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;
    }
Nach dem Login kopieren

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;
    }
}
Nach dem Login kopieren

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;
Nach dem Login kopieren

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");
    }
}
Nach dem Login kopieren
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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1660
14
PHP-Tutorial
1259
29
C#-Tutorial
1233
24
Wie Springboot Jasypt integriert, um die Verschlüsselung von Konfigurationsdateien zu implementieren Wie Springboot Jasypt integriert, um die Verschlüsselung von Konfigurationsdateien zu implementieren Jun 01, 2023 am 08:55 AM

Einführung in Jasypt Jasypt ist eine Java-Bibliothek, die es einem Entwickler ermöglicht, seinem Projekt mit minimalem Aufwand grundlegende Verschlüsselungsfunktionen hinzuzufügen und kein tiefes Verständnis der Funktionsweise der Verschlüsselung erfordert. standardbasierte Verschlüsselungstechnologie. Passwörter, Text, Zahlen, Binärdateien verschlüsseln ... Geeignet für die Integration in Spring-basierte Anwendungen, offene API, zur Verwendung mit jedem JCE-Anbieter ... Fügen Sie die folgende Abhängigkeit hinzu: com.github.ulisesbocchiojasypt-spring-boot-starter2 Die Vorteile von Jasypt schützen unsere Systemsicherheit. Selbst wenn der Code durchgesickert ist, kann die Datenquelle garantiert werden.

So implementieren Sie verteilte Sperren mit Redis in SpringBoot So implementieren Sie verteilte Sperren mit Redis in SpringBoot Jun 03, 2023 am 08:16 AM

1. Redis implementiert das Prinzip der verteilten Sperren und warum verteilte Sperren erforderlich sind. Bevor über verteilte Sperren gesprochen wird, muss erläutert werden, warum verteilte Sperren erforderlich sind. Das Gegenteil von verteilten Sperren sind eigenständige Sperren. Wenn wir Multithread-Programme schreiben, vermeiden wir Datenprobleme, die durch den gleichzeitigen Betrieb einer gemeinsam genutzten Variablen verursacht werden. Normalerweise verwenden wir eine Sperre, um die Richtigkeit der gemeinsam genutzten Variablen sicherzustellen Die gemeinsam genutzten Variablen liegen im gleichen Prozess. Wenn es mehrere Prozesse gibt, die gleichzeitig eine gemeinsam genutzte Ressource betreiben müssen, wie können sie sich dann gegenseitig ausschließen? Heutige Geschäftsanwendungen sind in der Regel Microservice-Architekturen, was auch bedeutet, dass eine Anwendung mehrere Prozesse bereitstellen muss. Wenn mehrere Prozesse dieselbe Datensatzzeile in MySQL ändern müssen, ist eine Verteilung erforderlich, um fehlerhafte Daten zu vermeiden wird zu diesem Zeitpunkt eingeführt. Der Stil ist gesperrt. Punkte erreichen wollen

Wie SpringBoot Redisson integriert, um eine Verzögerungswarteschlange zu implementieren Wie SpringBoot Redisson integriert, um eine Verzögerungswarteschlange zu implementieren May 30, 2023 pm 02:40 PM

Nutzungsszenario 1. Die Bestellung wurde erfolgreich aufgegeben, die Zahlung erfolgte jedoch nicht innerhalb von 30 Minuten. Die Zahlung ist abgelaufen und die Bestellung wurde automatisch storniert. 2. Die Bestellung wurde unterzeichnet und es wurde 7 Tage lang keine Bewertung durchgeführt. Wenn die Bestellung abläuft und nicht ausgewertet wird, wird die Bestellung standardmäßig positiv bewertet. Wenn der Händler die Bestellung innerhalb von 5 Minuten nicht erhält, wird die Bestellung abgebrochen Es wird eine SMS-Erinnerung gesendet ... Für Szenarien mit langen Verzögerungen und geringer Echtzeitleistung können wir die Aufgabenplanung verwenden, um eine regelmäßige Abfrageverarbeitung durchzuführen. Zum Beispiel: xxl-job Heute werden wir auswählen

So lösen Sie das Problem, dass Springboot nach dem Einlesen in ein JAR-Paket nicht auf die Datei zugreifen kann So lösen Sie das Problem, dass Springboot nach dem Einlesen in ein JAR-Paket nicht auf die Datei zugreifen kann Jun 03, 2023 pm 04:38 PM

Springboot liest die Datei, kann aber nach dem Packen in ein JAR-Paket nicht auf die neueste Entwicklung zugreifen. Es gibt eine Situation, in der Springboot die Datei nach dem Packen in ein JAR-Paket nicht lesen kann ist ungültig und kann nur über den Stream gelesen werden. Die Datei befindet sich unter resources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

So implementieren Sie Springboot+Mybatis-plus, ohne SQL-Anweisungen zum Hinzufügen mehrerer Tabellen zu verwenden So implementieren Sie Springboot+Mybatis-plus, ohne SQL-Anweisungen zum Hinzufügen mehrerer Tabellen zu verwenden Jun 02, 2023 am 11:07 AM

Wenn Springboot + Mybatis-plus keine SQL-Anweisungen zum Hinzufügen mehrerer Tabellen verwendet, werden die Probleme, auf die ich gestoßen bin, durch die Simulation des Denkens in der Testumgebung zerlegt: Erstellen Sie ein BrandDTO-Objekt mit Parametern, um die Übergabe von Parametern an den Hintergrund zu simulieren dass es äußerst schwierig ist, Multi-Table-Operationen in Mybatis-plus durchzuführen. Wenn Sie keine Tools wie Mybatis-plus-join verwenden, können Sie nur die entsprechende Mapper.xml-Datei konfigurieren und die stinkende und lange ResultMap konfigurieren Schreiben Sie die entsprechende SQL-Anweisung. Obwohl diese Methode umständlich erscheint, ist sie äußerst flexibel und ermöglicht es uns

Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Dec 29, 2023 am 11:02 AM

SpringBoot und SpringMVC sind beide häufig verwendete Frameworks in der Java-Entwicklung, es gibt jedoch einige offensichtliche Unterschiede zwischen ihnen. In diesem Artikel werden die Funktionen und Verwendungsmöglichkeiten dieser beiden Frameworks untersucht und ihre Unterschiede verglichen. Lassen Sie uns zunächst etwas über SpringBoot lernen. SpringBoot wurde vom Pivotal-Team entwickelt, um die Erstellung und Bereitstellung von Anwendungen auf Basis des Spring-Frameworks zu vereinfachen. Es bietet eine schnelle und einfache Möglichkeit, eigenständige, ausführbare Dateien zu erstellen

Wie SpringBoot Redis anpasst, um die Cache-Serialisierung zu implementieren Wie SpringBoot Redis anpasst, um die Cache-Serialisierung zu implementieren Jun 03, 2023 am 11:32 AM

1. Passen Sie den RedisTemplate1.1-Standard-Serialisierungsmechanismus an. Die API-basierte Redis-Cache-Implementierung verwendet die RedisTemplate-Vorlage für Daten-Caching-Vorgänge. Öffnen Sie hier die RedisTemplate-Klasse und zeigen Sie die Quellcodeinformationen der Klasse publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations an. Schlüssel deklarieren, verschiedene Serialisierungsmethoden des Werts, der Anfangswert ist leer @NullableprivateRedisSe

3 Möglichkeiten für SpringBoot, YML-Dateien zu lesen 3 Möglichkeiten für SpringBoot, YML-Dateien zu lesen Jun 29, 2023 pm 11:25 PM

SpringBoot liest YML-Dateien hauptsächlich wie folgt: 1. @Value-Annotation Wir können die @Value-Annotation für die Eigenschaften der Bean verwenden, um den Wert in YML direkt zu lesen, wie zum Beispiel: application.yml:name:ZhangsanBean:publicclassMyBean{ @Value("${name}")privateStringname;}2.Umgebungsobjekt Wir können den YML-Wert lesen, indem wir das Umgebungsobjekt einfügen, z. B.: @AutowiredprivateEnvironmentenv

See all articles