Potrzebuję załadować właściwość z pliku .yml
, który zawiera ścieżkę do folderu, z którego aplikacja może odczytać pliki.Spring Boot: Load @Value z pliku YAML
Używam poniższy kod, żeby wstrzyknąć właściwość:
@Value("${files.upload.baseDir}")
private String pathToFileFolder;
Plik .yml
rozwoju znajduje się pod src/main/resources/config/application.yml
, im uruchamiania aplikacji za pomocą następującego polecenia w produkcji, aby zastąpić ustawienia rozwojowe:
java -jar app.jar --spring.config.location=/path/to/application-production.yml
dokumentacja Wiosna Boot mówi:
SpringApplication załaduje właściwości z plików application.properties w następujących miejscach i dodać je do wiosennego Środowiska:
Podkatalog/config z bieżącego katalogu.
Bieżący katalog
ścieżkę klasy/config korzeń pakiet
ścieżce klasy
jak również:
Można również użyć YAML (".yml") pliki jako alte rnatywny do ".properties".
Plik .yml
zawiera:
{...}
files:
upload:
baseDir: /Users/Thomas/Code/IdeaProjects/project1/files
{...}
A moja Application
klasa jest opatrzone:
@SpringBootApplication
@EnableCaching
Kiedy uruchomić aplikację i uzyskać wyjątek:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'files.upload.baseDir' in string value "${files.upload.baseDir}"
Czy mam korzystać z klasy YamlPropertySourceLoader
lub dodać specjalną adnotację, aby włączyć obsługę .yml
w Spring Boot?
Edit: Plik .yml
zawiera kilka innych właściwości, które się pomyślnie załadowane na wiosennym Boot jak dataSource.XXX
lub hibernate.XXX
.
Uruchom swój program za pomocą --debug – Marged
Czy próbowałeś z tym samym plikiem '.yaml', którego używasz do programowania? Po prostu wyjmij go poza projekt i spróbuj go wykonać za pomocą polecenia. W ten sposób odrzucisz wszelkie literówki w pliku. –
Właściwość isn 'there ... Jest za dużo spacji przed 'upload:'. –