2013-08-29 35 views
12

Tôi cần phải tham khảo java.io.tmpdir trong tập tin application.conf tôiCách sử dụng thuộc tính hệ thống để thay thế trình giữ chỗ trong tệp Typesafe Config?

Tôi in nội dung của cấu hình của tôi với

val c = ConfigFactory.load() 
System.err.println(c.root().render()) 

và nó ám nó như

# dev/application.conf: 1 
"myapp" : { 
    # dev/application.conf: 47 
    "db" : { 
     # dev/application.conf: 49 
     "driver" : "org.h2.Driver", 
     # dev/application.conf: 48 
     "url" : "jdbc:h2:file:${java.io.tmpdir}/db;DB_CLOSE_DELAY=-1" 
    } 
... 
} 
# system properties 
"java" : { 
    # system properties 
    "io" : { 
     # system properties 
     "tmpdir" : "/tmp" 
    }, 
.... 

Vì vậy, tôi đoán rằng tham chiếu chuyển tiếp không hoạt động. Có cách nào để có được tùy chọn của tôi được tải sau khi thuộc tính hệ thống, do đó, cấu hình phân tích cú pháp sẽ thay thế một cách chính xác các giá trị?

+0

Lưu ý rằng 'ConfigFactory.parseFile' không sử dụng thuộc tính hệ thống trong khi' ConfigFactory.load' thực hiện. – Vadzim

Trả lời

16

Tham chiếu chuyển tiếp hoạt động tốt; Tôi tin rằng vấn đề chỉ là bạn có cú pháp ${} bên trong dấu ngoặc kép, vì vậy nó không có ý nghĩa đặc biệt. Hãy thử nó như thế này:

url = "jdbc:h2:file:"${java.io.tmpdir}"/db;DB_CLOSE_DELAY=-1" 

dây (lưu ý rằng những thứ ${} không trích dẫn)

Trong định dạng HOCON, bất cứ điều gì đó là hợp lệ JSON sẽ được hiểu là nó sẽ là trong JSON, vì vậy trích dẫn ví dụ không có cú pháp đặc biệt bên trong chúng, ngoài cú pháp escape mà JSON hỗ trợ.

Các vấn đề liên quan