2012-09-12 41 views
7

Tôi cần đọc một biến môi trường quy định tại web.xml của tôiĐọc một biến môi trường từ applicationContext.xml

<env-entry> 
    <description>Path Repositorio NFS</description> 
    <env-entry-name>PATH_ENV</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>C:/V3</env-entry-value> 
</env-entry> 

từ tôi applicationContext.xml

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location" value="${PATH_ENV}/myprop.properties" /> 
</bean> 

Làm thế nào tôi có thể làm điều này?


Cuối cùng tôi đã làm tiếp theo:

1 Xác định biến môi trường trong context.xml:

<Environment name="PATH_ENV" type="java.lang.String"/> 

2 Xác định env-entry trong web.xml

<env-entry> 
    <description>Path Repositorio NFS</description> 
    <env-entry-name>PATH_ENV</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>/WEB-INF/</env-entry-value> 
    </env-entry> 

3 Xác định trong applicationContext.xml

<bean id="configurationPath" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName"> 
     <value>java:comp/env/PATH_ENV</value> 
    </property> 
</bean> 

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location"> 
      <bean factory-bean="configurationPath" factory-method="concat"> 
       <constructor-arg value="myprop.properties"/> 
      </bean> 
     </property> 
    </bean> 

này được điều hành một cách chính xác, nhưng nếu tôi xác định một đường dẫn đầy đủ trong:

<env-entry-value>C:/V3/</env-entry-value> 

Tôi có vấn đề tiếp theo:

java.io.FileNotFoundException: Could not open ServletContext resource [/C:/V3/aesantasa.properties] 

tôi không thể xác định một đường dẫn đầy đủ trong env-entry- Tại sao?

+0

Trong trường hợp bất kỳ ai đến theo câu hỏi này, nó phải là tập tin ': C:/V3/' – Jamie

Trả lời

0

Bạn có thể sử dụng context-param, thao tác này sẽ hoạt động.

<context-param> 
    <param-name>PATH_ENV</param-name> 
    <param-value>C:/V3</param-value> 
</context-param> 
4

Bạn có thể tra cứu mục JNDI (cả hai mục môi trường và tài nguyên) với JndiObjectFactoryBean hoặc <jee:jndi-lookup>:

<jee:jndi-lookup id="PATH_ENV" jndi-name="PATH_ENV"/> 

(Để sử dụng jee-namespace, bạn phải declare nó).

Điều đó xác định bean mùa xuân có tên "PATH_ENV" có chứa (dưới dạng một chuỗi) đường dẫn được định cấu hình int mục nhập môi trường. Bây giờ bạn có thể tiêm nó vào đậu khác:

<bean class="xy.Foo"> 
    <property name="path" ref="PATH_ENV"/> 
</bean> 

Khó khăn còn lại là nối chuỗi. (Thật không may, không có JndiPlaceholderConfigurer rằng sẽ thay thế placeholders với mục môi trường JNDI, vì vậy bạn không thể sử dụng cú pháp ${property}/foo tiếp nhau, và phải cung cấp thêm một định nghĩa bean:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location"> 
     <bean factory-bean="PATH_ENV" factory-method="concat"> 
      <constructor-arg>/myprop.properties</constructor-arg> 
     </bean> 
    </property> 
</bean> 

(đang chưa được kiểm tra như tôi don' t có một dự án mùa xuân trong tầm tay để kiểm tra nó)

+0

Tôi không thể đọc ngữ cảnh-par am.Đây có phải là cách chính xác để đọc ngữ cảnh-param trong applicationContext.xml không? giá trị = "$ {PATH_ENV} /myprop.properties" – Geme

+0

Một tham số ngữ cảnh không giống như một mục nhập môi trường. Câu hỏi của bạn cho biết mục nhập môi trường (''), vậy tại sao bây giờ bạn đang nói về các tham số ngữ cảnh ('')? Đối với làm thế nào để tham khảo nó, tôi sẽ chỉnh sửa để bao gồm một mẫu. – meriton

+0

org.springframework.beans.factory.BeanCreationException: Lỗi tạo bean có tên 'PATH_ENV': Yêu cầu phương thức init không thành công; ngoại lệ lồng nhau là javax.naming.NameNotFoundException: El nombre PATH_ENV không có este asociado một ngữ cảnh este – Geme

0

tại sao không chỉ cần sử dụng sau đây?

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="file:C:/V3/myprop.properties"/> 
</bean> 
+0

các tệp thuộc tính cần phải có đường dẫn tương đối dựa trên cùng một biến – Geme

+0

tại sao bạn không đặt tệp .properties trong tài nguyên hoặc thư mục tương tự trong dự án của bạn trong classpath? –

-1

tôi giải quyết một cái gì đó, tôi nghĩ rằng, tương tự.

tôi tạo ra một biến với phần thay đổi của con đường Windows System:

my computer --> advanced options --> environment options --> Systeme Variable 

Và sau đó với điều này tôi hoàn thành con đường vào mùa xuân AppContext như thế này:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 

    <property name="locations"> 
     <list> 
       <value>file:${PARENT_PATH}/conf/dev/jdbc.properties</value> 
     <list>   
    </property> 
</bean> 

tôi không biết nếu thực sự giúp đỡ, nhưng đối với tôi hoạt động

+0

Vấn đề của tôi là Biến không thể là Biến hệ thống – Geme

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