/ / Spring nie ładuje właściwości - wiosna, maven, intellij-idea, properties

Wiosna nie ładuje właściwości - wiosna, maven, intellij-idea, właściwości

Obecnie uczę się pracy ze Spring i ja już nie potrafię dodawać tylko niektórych właściwości.

Na początku starałem się zachować prostotę. Mam projekt maven i utworzyłem config.properties w folderze zasobów.

test.abc = def

Następnie utworzyłem klasę kontrolera z następującym kodem:

@PropertySource("classpath:config.properties")
public class Controller {

@Value("${test.abc}")
private String abc;

public Controller() {
System.out.println(abc);
}
}

Moja główna klasa wygląda tak:

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BookingdisplayApplication {
public static void main(String[] args) {
new Controller();
}
}

Teraz, kiedy uruchamiam mój kod przez Intellij lub mvnw.cmd spring-boot:run Na wyjściu otrzymuję wartość null. Co ja źle zrobiłem?

Odpowiedzi:

0 dla odpowiedzi № 1

spróbuj tego kodu:

@Configuration
@PropertySource("classpath:config.properties")
public class AppConfig {

@Value("${test.abc}")
private String abc;

//Used in addition of @PropertySource
@Bean
public static PropertySourcesPlaceholderConfigurer   propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}

}

0 dla odpowiedzi nr 2

Proszę zrozumieć, aby rozwiązać $ {} w @ Values, musisz zarejestrować statyczny PropertySourcesPlaceholderConfigurer w pliku konfiguracyjnym XML lub adnotacji.

@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
return new PropertySourcesPlaceholderConfigurer();
}

LUB,

@Autowired
private org.springframework.core.env.Environment env;

//define in your class or method
String abc = env.getProperty("test.abc");

0 dla odpowiedzi № 3

Czy cykl życia kontrolera jest zarządzany przez Spring? Prawdopodobnie musisz dodać adnotację @Controller do klasy lub zdefiniować komponent bean tej klasy.

EDYTOWAĆ: Myślę, że lepszym podejściem byłoby użycie konstruktora wtrysku:

Controller.java:

public class Controller {

private String abc;

public Controller(String abc) {
this.abc = abc;
System.out.println(abc);
}
}

BookingdisplayApplication.java:

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BookingdisplayApplication {

// instantiating bean via Spring:
@Bean
public Controller controller(@Value("${test.abc}") String testAbc) {
return new Controller(testAbc);
}

public static void main(String[] args) {
SpringApplication.run(BookingdisplayApplication.class, args);
}
}

Nie musisz też używać adnotacji @PropertySource - jeśli korzystasz z pliku właściwości

[src-root]/application.properties

(w źródłowym źródle), zostanie automatycznie znaleziony przez Spring.