2016-01-01 22 views
13

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:

  1. Podkatalog/config z bieżącego katalogu.

  2. Bieżący katalog

  3. ścieżkę klasy/config korzeń pakiet

  4. ś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.

+0

Uruchom swój program za pomocą --debug – Marged

+0

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. –

+3

Właściwość isn 'there ... Jest za dużo spacji przed 'upload:'. –

Odpowiedz

2

M. Deinum ma rację, podana konfiguracja działa - plik yml został nieprawidłowo wcięty, więc nie można znaleźć właściwości.

0

Dla mnie duplikat klucz w pliku właściwości spowodowane tym ...

Kiedyś sam klucz nieświadomie w dużym pliku yml.