Heim  >  Artikel  >  Java  >  Mit welchen Methoden kann SpringBoot Yml-Konfigurationsdateien lesen?

Mit welchen Methoden kann SpringBoot Yml-Konfigurationsdateien lesen?

WBOY
WBOYnach vorne
2023-06-02 22:20:061835Durchsuche

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:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen