2009-09-01 31 views
9

Vì vậy, tôi đang cố thêm một số khả năng vào dự án của mình để cho phép các thuộc tính do người dùng định nghĩa trong tạo phẩm triển khai của tôi - một tệp khóa đơn giản: giá trị .properties. Tôi đặt file service.properties trongCách tải tệp thuộc tính trong Google App Engine?

war/WEB-INF/my-service.properties 

Và trong constructor ServiceImpl.java của tôi, tôi có như sau:

String propertiesFileName = "my-service.properties"; 

URL propertyURL = ClassLoader.getSystemResource(propertiesFileName); 
URL propertyURL2 = this.getClass().getClassLoader().getResource(propertiesFileName); 
URL propertyURL3 = this.getClass().getClassLoader().getResource("WEB-INF/" + propertiesFileName); 
URL propertyURL6 = this.getClass().getClassLoader().getResource(
     "E:/Projects/eclipse-workspace/projectName/war/WEB-INF/" + propertiesFileName); 

Tất cả các bản sao của URL tài sản là null. Tôi biết tôi đang thiếu một cái gì đó hoàn toàn rõ ràng, nhưng tôi cần một đôi mắt thứ hai. Trân trọng.

EDIT:

Ah, có vẻ như tôi đã nhầm lẫn như là mặc định dự án GAE tạo ra một tập tin logging.properties trong/chiến tranh. Từ Google App Engine documentation:

SDK Java của máy ứng dụng bao gồm tệp mẫu logging.properties, trong thư mục appengine-java-sdk/config/user /. Để sử dụng nó, sao chép tệp vào thư mục WEB-INF/classes của bạn (hoặc ở nơi khác trong WAR), sau đó thuộc tính hệ thống java.util.logging.config.file thành "WEB-INF/classes/logging.properties" (hoặc bất kỳ đường dẫn nào bạn chọn, liên quan đến gốc ứng dụng). Bạn có thể đặt thuộc tính hệ thống trong tệp appengine-web.xml, như sau:

+0

Tôi cho rằng đó là một lỗi đánh máy trong câu hỏi của bạn chứ không phải là ứng dụng của bạn, nhưng bạn nói rằng tập tin của bạn được gọi là "service.properties" chưa propertiesFileName được thiết lập để "my-service.properties"! –

+0

@Todd: Vâng, đó là lỗi đánh máy, tôi sẽ sửa nó. –

Trả lời

9

Thử đặt dịch vụ.properties trong WEB-INF/classes. Sau đó, nó sẽ có thể truy cập chỉ với:

this.getClass().getClassLoader().getResourceAsStream("/filename.properties"); 
+0

Bạn có biết tại sao tôi phải loại bỏ dấu "/" ở đầu đường dẫn để nó hoạt động không? – Mike

0

Tôi nghĩ rằng những gì bạn cần là một cái gì đó như thế này:

Chuỗi filepath = servletContext.getRealPath ("/ WEB-INF/views /") + "/ "+ mav.getViewName() +" .vm "; FileInputStream in = new FileInputStream (tệpPath);

tôi nhận được ServletContext từ mùa xuân: @Autowire ServletContext.

0

Như Mike nêu trong bình luận của mình để jsight s câu trả lời, nó làm việc cho tôi nếu tôi sử dụng

this.getClass().getClassLoader().getResourceAsStream("filename.properties"); 

(loại bỏ các dấu gạch chéo đầu tiên) sau khi đặt các tập tin trong thư mục WEB-INF/classes.

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