2015-01-04 43 views
8

Tôi đang phát triển một ứng dụng khởi động mùa xuânkhởi động mùa xuân application.properties bên ngoài

Tôi muốn ghi đè lên một số tài sản trong src/main/resources/application.properties với một tập tin bên ngoài (ví dụ /etc/projectName/application.properties).

Tôi đã thử nhiều phương pháp:

  1. @PropertySource("file:/etc/projectName/application.properties") như chú thích ở ApplicationConfig.java

  2. spring.config.location=/etc/projectName/application.properties trong application.properties tôi trong resources

Tôi đã thử nghiệm nó với spring.port. Phương thức đầu tiên chỉ thêm thuộc tính nhưng không ghi đè chúng.

+2

Thả 'application.properties' trong cùng thư mục với tệp jar, nó sẽ được chọn tự động. –

+0

Tôi đang sử dụng một tập tin chiến tranh, xây dựng với maven trong Intellij và triển khai vào một Tomcat, do đó, không có tệp jar – greenhalos

+0

Thêm vào câu hỏi của bạn vì điều đó ảnh hưởng đến câu trả lời. Bất kể bạn nên sử dụng tùy chọn 2 vì các thuộc tính được nạp bởi Spring Boot được sắp xếp cụ thể, thêm '@ PropertySource' sẽ thêm các thuộc tính đã nạp của bạn vào cuối chuỗi' PropertySource' được tham vấn. –

Trả lời

15

Tôi luôn sử dụng --spring.config.location= trong dòng lệnh như được chỉ định trong documentation và bạn có thể đặt nhiều tệp khác nhau, một tệp có giá trị mặc định và một với các giá trị được ghi đè.

Edit:
Ngoài ra, bạn cũng có thể sử dụng một cái gì đó như:

@PropertySources({ 
    @PropertySource("classpath:default.properties") 
    , @PropertySource(value = "file:${external.config}", ignoreResourceNotFound = true) 
}) 

và chỉ định một external.config trong application.properties của bạn.
Điều này sẽ cung cấp đường dẫn mặc định cho cấu hình ghi đè lên, điều đó vẫn có thể khắc phục được bằng cách chỉ định một số --external.config trong dòng lệnh.
Tôi sử dụng điều này với ${external.config} được định nghĩa là biến hệ thống env, nhưng cũng sẽ hoạt động với biến ứng dụng.properties.

+0

nhưng tôi muốn làm điều đó mà không chỉ định nó trong dòng lệnh nhưng trong thuộc tính ứng dụng hoặc chú thích ass – greenhalos

+2

Tôi thực sự khuyên bạn không nên làm theo cách đó: có nghĩa là bạn đang liên kết mã nguồn với môi trường bên ngoài và mã nguồn sẽ có khả năng không hoạt động nữa trên máy khác (không nói về đặc quyền gốc cần thiết để viết tệp cấu hình của bạn). IMHO, những thứ cụ thể của env bên ngoài phải ở bên ngoài nguồn. –

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