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(); }
Lösung
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!