Ich benutze Spring Boot 1.5.3 und versuche, die Eigenschaften aus einer Datei application-dev.properties in eine Service-Bean zu injizieren, aber der Wert kommt immer als Null. Der Wert wird jedoch in meine DevConfiguration-Klasse geladen.Spring Boot @Value immer Null
Ich habe eine Anwendungsklasse, wie unten in meinem Basispaket
package com.me;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
ich eine Konfigurationsklasse haben wie in
package com.me.print.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
@Configuration
@Profile("dev")
@PropertySources({
@PropertySource("classpath:application.properties"),
@PropertySource("classpath:application-dev.properties")
})
@ComponentScan(value = {"com.me.print.client"})
public class DevConfiguration {
@Value("${app.service.url}")
private String rootUri;
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
Mein Service Bohne folgt, die ich versuche, den Wert zu laden in ist unter
package com.me.print.client;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import com.me.print.model.zitResponse;
@Service
public class zitPrintClient {
private final RestTemplate restTemplate;
@Value("${app.service.url}")
private String rootUri;
public zitPrintClient(RestTemplateBuilder restTemplateBuilder) {
restTemplate = restTemplateBuilder
//.rootUri(rootUri)
.build();
}
public zitResponse getpooltatus(String poolId) {
return restTemplate.getForObject("/pool/{poolId}/@status",
zitResponse.class, poolId);
}
}
In der obigen Klasse ist der rootURI immer Null. Hat jemand irgendwelche Vorschläge, was ich vermisst
in meiner application-dev.properties Datei habe ich die folgende
app.service.url=http://localhost:8080/zitprint/v1
Dank
UPDATE:
hat jemand irgendwelche Vorschläge hier, als ich versuchte, Eigenschaften in meinen Controller wie folgt zu injizieren:
@Value("${allowedVendors}") String allowedVendors
und wenn ich die oben in einen Konstruktor setzen findet sie den Wert aber ist es nicht anders finden:
public PController(@Value("${allowedVendors}") String allowedVendors) {
}
Ich kann nicht die Eigenschaft weiter im Code als mit dem Konstruktor verwende ich zwei Instanzen der Bean erstellt haben 1 über den Konstruktor und der andere von Feder DI erstellt. Irgendwelche Ideen, warum der Wert ohne den Konstruktor injizieren tut
Dank
, die wie seltsames Verhalten mir scheint. Wenn ich Probleme mit der Abholung von Eigenschaften habe, würde der Wert von rootUri normalerweise nur das String-Literal "$ {app.service.url}" annehmen. – Plog
Bist du sicher, dass deine App mit dem Dev-Profil gestartet wurde? – Leffchik
Ja dev-Profil ist aktiv. – user1107753