Chcę uzyskać dostęp do wartości podanych application.properties
np .:
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
logging.file=${HOME}/application.log
userBucket.path=${HOME}/bucket
Chcę uzyskać dostęp userBucket.path
do mojego programu głównego w aplikacji Spring Boot.
java
spring-boot
properties-file
Qasim
źródło
źródło
Environment
lub via@ConfigurationProperties
@Configuration
klasach, problem jest dobrze analizowany w następującym poście na blogu@Component
(lub jednym z jego pochodnych, tj.@Repository
Itp.)Innym sposobem jest wstrzyknięcie
org.springframework.core.env.Environment
do fasoli.źródło
org.springframework.core.env.Environment
@ConfigurationProperties
może być używany do mapowania wartości z.properties
(.yml
również obsługiwanych) na POJO.Rozważ następujący przykładowy plik.
.nieruchomości
Employee.java
Teraz do wartości właściwości można uzyskać dostęp przez automatyczne okablowanie
employeeProperties
w następujący sposób.źródło
src/main/resources
jeśli nie testujesz kodu z testu wiosennego.Obecnie znam trzy następujące sposoby:
1.
@Value
Adnotacjanull
. Na przykład, gdy próbujesz ustawić go wpreConstruct()
metodzie lubinit()
metodzie. Dzieje się tak, ponieważ wstrzykiwanie wartości następuje po pełnym zbudowaniu klasy. Dlatego lepiej jest użyć opcji 3.2.
@PropertySource
AdnotacjaPropertySouce
ustawia wartości z pliku źródłowego właściwości wEnvironment
zmiennej (w twojej klasie), gdy klasa jest ładowana. Więc możesz łatwo pobrać posłowie.3.
@ConfigurationProperties
Adnotacja.Inicjuje jednostkę na podstawie danych właściwości.
@ConfigurationProperties
określa plik właściwości do załadowania.@Configuration
tworzy komponent bean na podstawie zmiennych pliku konfiguracyjnego.źródło
spring.config.location
? Czy # 2 nadal działa?Możesz to zrobić również w ten sposób ....
Następnie, gdziekolwiek chcesz czytać z application.properties, po prostu przekaż klucz do metody getConfigValue.
źródło
Environment
?spring.config.location
?Możesz użyć
@Value
do załadowania zmiennych z tego,application.properties
czy użyjesz tej wartości w jednym miejscu, ale jeśli potrzebujesz bardziej scentralizowanego sposobu ładowania tych zmiennych,@ConfigurationProperties
jest to lepsze podejście.Dodatkowo możesz ładować zmienne i rzutować je automatycznie, jeśli potrzebujesz różnych typów danych do przeprowadzenia weryfikacji i logiki biznesowej.
źródło
wykonaj następujące kroki. 1: - stwórz swoją klasę konfiguracji jak poniżej
2: - gdy masz klasę konfiguracji, wstaw zmienną z konfiguracji, w której potrzebujesz.
źródło
źródło
Aplikacja może odczytać 3 typy wartości z pliku application.properties.
application.properties
plik klasy
Jeśli nie masz właściwości w application.properties, możesz użyć wartości domyślnej
źródło
Spring-boot pozwala nam na kilka metod zapewniania konfiguracji zewnętrznych, możesz spróbować użyć pliku application.yml lub yaml zamiast pliku właściwości i zapewnić różne ustawienia plików właściwości w zależności od różnych środowisk.
Możemy rozdzielić właściwości każdego środowiska na osobne pliki yml w osobnych profilach sprężynowych. Następnie podczas wdrażania możesz użyć:
aby określić, który profil sprężyny ma zostać użyty. Pamiętaj, że pliki yml powinny mieć nazwy takie jak
aby były automatycznie podejmowane przez springboot.
Odniesienie: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties
Aby odczytać z pliku application.yml lub pliku właściwości:
Najprostszym sposobem, aby odczytać wartość z pliku właściwości lub yml jest użycie annotation.Spring wiosna @value automatycznie ładuje wszystkie wartości z yml do środowiska sprężyny, dzięki czemu możemy bezpośrednio korzystać z tych wartości ze środowiska, takich jak:
Lub inna metoda, którą zapewnia wiosna, aby odczytać silnie typowane fasole, jest następująca:
Odpowiadający POJO do odczytania yml:
Powyższa metoda działa dobrze z plikami yml.
Odniesienie: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
źródło
Dla mnie żadne z powyższych nie działało bezpośrednio dla mnie. To, co zrobiłem, to:
Dodatkowo do odpowiedzi @Rodrigo Villalba Zayas tam dodałem
implements InitializingBean
do klasyi zaimplementowałem metodę
Tak to będzie wyglądać
źródło
Korzystają z najlepszych sposobów uzyskania wartości nieruchomości.
1. Korzystanie z adnotacji o wartości
2. Korzystanie z fasoli środowiskowej
źródło
Najlepiej jest użyć
@Value
adnotacji, która automatycznie przypisze wartość do obiektuprivate Environment en
. Spowoduje to zmniejszenie kodu i łatwe filtrowanie plików.źródło
Istnieją dwa sposoby
@Value
w swojej klasieLUB
@Configuration
klasę, w której możesz dodać wszystkie swoje@value
źródło