2012-05-10 38 views
15

Chúng tôi sử dụng để có một cách để tải các thuộc tính từ một tập tin trên classpath:Làm thế nào để sử dụng tài sản giữ chỗ cho tập tin trên hệ thống tập tin

<context:property-placeholder location="classpath:myConfigFile.properties" /> 

và nó làm việc rất lớn. Nhưng bây giờ chúng tôi muốn tải các thuộc tính từ một tệp cụ thể trên hệ thống KHÔNG ở trong đường dẫn lớp. Chúng tôi muốn có khả năng tải động tệp, vì vậy chúng tôi đang sử dụng biến môi trường Java để điền nó. Tôi sẽ đưa ra một ví dụ đơn giản dưới đây:

Trong Java:

System.setProperty("my.prop.file", "/path/to/myConfigFile.properties"); 

Trong mùa xuân XML:

<context:property-placeholder location="${my.prop.file}" /> 

Tôi cũng đã thử theo cách này, nhờ vào một ý tưởng từ Luciano:

<context:property-placeholder properties-ref="prop" /> 

<util:properties id="prop" location="reso"/> 

<bean id="reso" class="org.springframework.core.io.FileSystemResource"> 
    <constructor-arg index="0" value="${my.prop.file}" /> 
</bean> 

Mọi thứ tôi đã thử đều thất bại. Không có vấn đề gì tôi đặt my.prop.file. Số lần truy cập lớn nhất bao gồm:

<context:property-placeholder location="/path/to/myConfigFile.properties" /> 
(ClassNotFoundException: .path.to.myConfigFile.properties) 

<context:property-placeholder location="file:/path/to/myConfigFile.properties" /> 
(ClassNotFoundException: file:.path.to.myConfigFile.properties) 

<context:property-placeholder location="file:///path/to/myConfigFile.properties" /> 
(ClassNotFoundException: file:...path.to.myConfigFile.properties) 

Bạn sử dụng trình giữ chỗ thuộc tính với vị trí nằm trên hệ thống tệp và NOT trên đường dẫn lớp như thế nào? Chúng tôi đang sử dụng Spring 3.0.5.

Hóa ra đã xảy ra sự cố với tập lệnh chạy chương trình Java tải tệp spring. Cảm ơn vì sự giúp đỡ. Tôi sẽ yêu cầu xóa câu hỏi này, vì mã ban đầu hoạt động sau khi tất cả. Cảm ơn sự giúp đỡ của bạn.

+13

BTW mạnh không đồng ý w/này bị đóng cửa –

+1

Không đồng ý với việc đóng cửa, tôi đến đây sau khi một số googling và nó descibes câu hỏi chính xác tôi có ... –

+1

Tôi cũng vậy - Tôi không hiểu tại sao điều này đã được đóng lại với một "quá địa hóa" thể loại? cho tôi? – monojohnny

Trả lời

4

Còn cách này thì sao?

<context:property-placeholder properties-ref="prop" /> 

<util:properties id="prop" location="reso"/> 

<bean id="reso" class="org.springframework.core.io.FileSystemResource"> 
    <constructor-arg index="0" value="/yourpathandfile" /> 
</bean> 
+0

Tôi có thể đưa vào Biến môi trường Java cho giá trị = "/ yourpathandfile"? Tôi sẽ cho nó một viên đạn. Cảm ơn –

+0

Điều này dường như không hoạt động. Tài sản đang được thông qua, nhưng cùng một lỗi xảy ra. Cảm ơn bạn đã giúp đỡ của bạn, mặc dù. Điều này là không thể? –

+0

Điều gì sẽ xảy ra nếu bạn mã hóa $ {my.prop.file} bằng đường dẫn thực để xem liệu nó có hoạt động không? – Luciano

14

này đã làm việc cho tôi:

<context:property-placeholder location="file:/path/to/myConfigFile.properties" /> 

Nhưng điều này (thú vị) không:

<context:property-placeholder location="#{ systemProperties['foo'] }" /> 

tôi đã

java.io.FileNotFoundException: Could not open ServletContext resource [/#{ systemProperties['foo'] }] 

Bạn sẽ không có thể sử dụng trình giữ chỗ thuộc tính ${..} với thứ định nghĩa của một PropertyPlaceholderConfigurer. Đó là con gà trước trứng.

Bạn luôn có thể phân lớp PropertyPlaceholderConfigurer và nó có làm bất cứ điều gì bạn muốn (ví dụ, gọi setLocations() trong một phương pháp @PostConstruct Sau đó, thay vì sử dụng <context:property-placeholder>, sử dụng:.

<bean class="com.foo.MyPropertyPlaceholderConfigurer"/> 
+0

Tôi nghĩ rằng ngôn ngữ biểu thức được phép cho điều đó, như được tranh luận trong [bài viết này về quản lý tệp thuộc tính với spring] (http: //www.summa -tech.com/blog/2009/04/20/6-tips-for-managing-property-files-with-spring/). Tôi sẽ cố gắng hiểu những gì cần phải được phân lớp trong PropertyPlaceholderConfigurer để nó có thể tìm ra cách tải động một tệp thuộc tính. Nó có vẻ như một ý tưởng đơn giản và có vẻ như bây giờ đã phức tạp với Spring. –

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