2016-01-01 36 views
13

Tôi cần tải thuộc tính từ tệp .yml, chứa đường dẫn đến thư mục mà ứng dụng có thể đọc tệp từ đó.Khởi động mùa xuân: Tải @Value từ tập tin YAML

Tôi đang sử dụng đoạn mã sau để tiêm bất động sản:

@Value("${files.upload.baseDir}") 
private String pathToFileFolder; 

File .yml cho sự phát triển nằm dưới src/main/resources/config/application.yml, im chạy ứng dụng với lệnh sau đây trong sản xuất, để ghi đè lên các thiết lập phát triển:

java -jar app.jar --spring.config.location=/path/to/application-production.yml 

Các tài liệu xuân Boot nói:

SpringApplication sẽ được tải các thuộc tính từ các tập tin application.properties trong các địa điểm sau và thêm chúng vào môi trường mùa xuân:

  1. A/cấu hình thư mục con của thư mục hiện hành.

  2. Thư mục hiện hành

  3. Một classpath/config gốc gói

  4. Các classpath

Cũng như:

Bạn cũng có thể sử dụng YAML ('.yml') tập tin như một alte dẫn đến '.properties'.

File .yml chứa:

{...} 
files: 
     upload: 
     baseDir: /Users/Thomas/Code/IdeaProjects/project1/files 
{...} 

Và lớp Application tôi được chú thích với:

@SpringBootApplication 
@EnableCaching 

Khi tôi chạy các ứng dụng, tôi nhận được một ngoại lệ:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'files.upload.baseDir' in string value "${files.upload.baseDir}" 

Tôi có sử dụng lớp YamlPropertySourceLoader hoặc thêm chú thích đặc biệt để bật hỗ trợ cho .yml trong Khởi động mùa xuân?

Chỉnh sửa: Tệp .yml chứa một số thuộc tính khác, được tải xuống thành công theo Spring Boot như dataSource.XXX hoặc hibernate.XXX.

+0

Chạy chương trình của bạn bằng --debug – Marged

+0

Bạn đã thử sử dụng cùng một tệp '.yaml' trong quá trình phát triển? Chỉ cần lấy nó ra ngoài dự án và thử thực thi nó bằng lệnh. Bằng cách đó, bạn sẽ loại bỏ bất kỳ lỗi đánh máy nào trong tệp. –

+3

Thuộc tính không có 'ở đó ... Có quá nhiều dấu cách trước khi 'tải lên:'. –

Trả lời

2

M. Deinum là đúng, thiết lập tôi đã cung cấp đang hoạt động - tệp yml bị thụt lề sai, vì vậy không thể tìm thấy thuộc tính.

0

Đối với tôi một khóa trùng lặp trong tệp thuộc tính gây ra điều này ...

Tôi đã sử dụng cùng khóa không xác định trong tệp yml lớn.

key: 
key1: value 
key2: value 

key: 
key3: value 
Các vấn đề liên quan