Heim  >  Artikel  >  Java  >  @Value von SpringBoot führt dazu, dass die application.properties-Konfiguration ungültig wird. So lösen Sie das Problem

@Value von SpringBoot führt dazu, dass die application.properties-Konfiguration ungültig wird. So lösen Sie das Problem

WBOY
WBOYnach vorne
2023-05-16 11:52:051427Durchsuche

@Value erhält das Problem der Ungültigkeit der application.properties-Konfiguration

Der Grund für die Ungültigkeit liegt hauptsächlich darin, die Vorsichtsmaßnahmen für die Verwendung von @Value zu beachten:

  • 1 Es kann nicht für statische Variablen (statisch) verwendet werden.

  • 2. Es kann nicht auf Konstanten angewendet werden (endgültig);

  • 3 Kann nicht in nicht registrierten Klassen verwendet werden (Verwendung von @Component, @Configuration usw.);

  • 4 Wenn Sie eine Klasse mit diesem Attribut verwenden, können Sie nur die @ Autowired-Methode verwenden, und die neue Methode fügt diese Konfigurationen nicht automatisch ein.

Diese Vorsichtsmaßnahmen werden auch durch ihr Prinzip bestimmt:

Während des Springboot-Startvorgangs gibt es zwei wichtige Prozesse:

  • 1. Scannen und analysieren Sie die Bohnen im Container und registrieren Sie sie im beanFactory Nach oben zu gehen ist wie das Registrieren von Informationen.

  • 2. Instanziieren und initialisieren Sie diese gescannten Beans.

@Value wird in der zweiten Stufe analysiert. BeanPostProcessor definiert die Schnittstellenmethode, die Benutzer vor und nach der Bean-Initialisierung auf die Bean anwenden können. Eine ihrer wichtigen Implementierungsklassen, AutowiredAnnotationBeanPostProcessor, bietet, wie im Javadoc heißt, Unterstützung für die Injektionsfunktion von @Autowired- und @Value-Annotationen in der Bean.

Es gibt zwei Möglichkeiten:

resource.test.imageServer=http://image.everest.com

1. Der erste

@Configuration
public class EverestConfig {
 
    @Value("${resource.test.imageServer}")
    private String imageServer;
 
    public String getImageServer() {
        return imageServer;
    }
 
}

Dann fügen Sie ihn dort ein, wo er benötigt wird

@Component
@ConfigurationProperties(prefix = "resource.test")
public class TestUtil {
 
    public String imageServer;
 
    public String getImageServer() {
        return imageServer;
    }
 
    public void setImageServer(String imageServer) {
        this.imageServer = imageServer;
    }
}

@Value, um die Konfiguration in application.properties zu erhalten Null

    @Autowired
    private TestUtil testUtil;
 
    @Autowired
    private EverestConfig everestConfig;
 
 
    @GetMapping("getImageServer")
    public String getImageServer() {
        return testUtil.getImageServer();
//        return everestConfig.getImageServer();
    }

Der Wert ist NULL.

Lösung

Verwenden Sie nicht die neue Methode zum Erstellen von Werkzeugklassenobjekten (DBUtils), sondern verwenden Sie die von Springboot verwaltete @Autowired-Methode. Fügen Sie @Component zur Werkzeugklasse hinzu und fügen Sie dem definierten Attribut keine statischen Elemente hinzu Variablen.

Richtiger Weg

@Value("${spring.datasource.url}")

private String url;

Das obige ist der detaillierte Inhalt von@Value von SpringBoot führt dazu, dass die application.properties-Konfiguration ungültig wird. So lösen Sie das Problem. 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