2012-08-23 28 views
8

Tôi cần phải bao gồm một số giá trị từ một file.properties vào một cái gì đó WEB-INF/web.xml như thế này:Cách bao gồm các giá trị từ tệp .properties vào tệp web.xml?

<param-name>uploadDirectory</param-name> 
<param-value>myFile.properties['keyForTheValue']</param-value> 

Tôi hiện đang làm việc với điều này:

  • JBoss
  • JEE5
+0

Bản sao có thể có của [Sử dụng thuộc tính trong web.xml] (http://stackoverflow.com/questions/2948992/using-properties-in-web-xml) – imgx64

Trả lời

13

Bạn có thể thêm lớp này, thêm tất cả các thuộc tính từ tệp của bạn vào JVM. Và thêm lớp này như bối cảnh người nghe để web.xml

public class InitVariables implements ServletContextListener 
{ 

    @Override 
    public void contextDestroyed(final ServletContextEvent event) 
    { 
    } 

    @Override 
    public void contextInitialized(final ServletContextEvent event) 
    { 
     final String props = "/file.properties"; 
     final Properties propsFromFile = new Properties(); 
     try 
     { 
     propsFromFile.load(getClass().getResourceAsStream(props)); 
     } 
     catch (final IOException e) 
     { 
      // can't get resource 
     } 
     for (String prop : propsFromFile.stringPropertyNames()) 
     { 
     if (System.getProperty(prop) == null) 
     { 
      System.setProperty(prop, propsFromFile.getProperty(prop)); 
     } 
     } 
    } 
} 

trong web.xml

<listener>  
     <listener-class> 
     com.company.InitVariables 
     </listener-class> 
    </listener> 

bây giờ bạn có thể nhận được tất cả các thuộc tính trong bạn dự án sử dụng

System.getProperty(...) 

hoặc trong web.xml

<param-name>param-name</param-name> 
<param-value>${param-name}</param-value> 
+0

Cảm ơn, đây là giải pháp tôi đang tìm kiếm – lancha90

+0

Tôi không thể Không nhận được Jetty để tìm tài nguyên bằng cách sử dụng đường dẫn tương đối và getResourceAsStream nhưng một đường dẫn tuyệt đối và FileInputStream dường như hoạt động ... +1 để giúp tôi đi đúng hướng! – jsh

+0

Không có tiện ích cho việc này? – user447607

3

Một lời cảnh cáo liên quan đến giải pháp được chấp nhận ở trên.

Tôi đã thử nghiệm với điều này trên jboss 5 hôm nay: phương pháp contextInitialized() không được gọi cho đến sau khi web.xml được tải để thay đổi thuộc tính Hệ thống không có hiệu lực trong thời gian. Điều này có nghĩa là nếu bạn triển khai lại ứng dụng web (mà không cần khởi động lại jboss), tài sản sẽ tồn tại từ khi được thiết lập lần cuối cùng nó được triển khai, vì vậy nó có thể hoạt động.

Giải pháp mà chúng ta sẽ sử dụng thay vào đó là chuyển các tham số tới jboss thông qua dòng lệnh java, ví dụ: -Dparameter1=value1 -Dparameter2=value2.

+1

Một giải pháp tốt hơn (không hoạt động với jboss 7) là sử dụng properties.service.xml. Bạn có thể lập bản đồ các thuộc tính trên bay ở đó. – gebuh

+0

Đó là một suy nghĩ tốt (và đây là nơi mà các hệ thống quản trị hệ thống của chúng tôi muốn giữ lại các thuộc tính hệ thống) nhưng bạn có làm việc này không? Tôi đã thử cập nhật tệp properties.services.xml trong 'server/default/deploy' và' server/all/deploy' và trong cả hai trường hợp, nó không có hiệu lực trong tệp web.xml – dannyclark

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