2013-05-24 33 views
23

Tôi muốn xác định giá trị thuộc tính mặc định trong tệp cấu hình Spring XML. Tôi muốn giá trị mặc định này là null.Chỉ định giá trị thuộc tính mặc định là NULL trong Spring

Something như thế này:

... 
<ctx:property-placeholder location="file://${configuration.location}" 
          ignore-unresolvable="true" order="2" 
          properties-ref="defaultConfiguration"/> 

<util:properties id="defaultConfiguration"> 
    <prop key="email.username" > 
     <null /> 
    </prop> 
    <prop key="email.password"> 
     <null /> 
    </prop> 
</util:properties> 
... 

này không hoạt động. Thậm chí có thể xác định null giá trị mặc định cho các thuộc tính trong cấu hình Spring XML không?

+0

Bạn đã trả lời câu hỏi của riêng bạn. Sử dụng ooops

+0

Nó không hoạt động theo cách này: 'Nội dung không hợp lệ bắt đầu bằng phần tử 'null'. Không có yếu tố con nào được mong đợi vào thời điểm này.' –

+0

tôi không nghĩ bạn có thể làm điều đó. Có thể loại bỏ các thuộc tính đó là đủ. Các thuộc tính Java trả về null nếu một thuộc tính không được định nghĩa. – soulcheck

Trả lời

66

Nó là tốt hơn để sử dụng Spring EL theo cách như vậy

<property name="password" value="${email.password:#{null}}"/> 

nó kiểm tra xem email.password được chỉ định và đặt nó vào null (không "null" String) khác

+0

Hoàn hảo! Điều này có giới thiệu sự phụ thuộc vào spring-el không? –

2

Bạn có thể thử sử dụng Spring EL.

<prop key="email.username">#{null}</prop> 
+0

Điều này không hiệu quả. 'prop' không có thuộc tính' value'. Tôi nghĩ rằng nếu có một giải pháp, cái gì khác hơn là 'prop' phải được sử dụng. –

+0

Bạn có thể đặt EL giữa các thẻ, anwser đã sửa đổi. – YoK

+2

Bằng cách này, nó ném NPE 'Gây ra bởi: org.springframework.beans.factory.BeanCreationException: Lỗi tạo bean có tên 'defaultConfiguration': Khởi tạo bean không thành công; ngoại lệ lồng nhau là java.lang.NullPointerException' –

2

có một cái nhìn tại PropertyPlaceholderConfigurer#setNullValue(String)

Nó tuyên bố rằng:

Theo mặc định, không có giá trị null nào được xác định. Điều này có nghĩa rằng không có cách nào để diễn tả null như một giá trị tài sản, trừ khi bạn explictly bản đồ một giá trị tương ứng

Vì vậy, chỉ xác định chuỗi "null" để lập bản đồ giá trị null trong PropertyPlaceholderConfigurer của bạn:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="nullValue" value="null"/> 
    <property name="location" value="testing.properties"/> 
</bean> 

Bây giờ bạn có thể sử dụng nó trong các tập tin thuộc tính của bạn:

db.connectionCustomizerClass=null 
db.idleConnectionTestPeriod=21600 
+1

Điều này cũng có nghĩa là bạn sẽ không được phép sử dụng String "null" –

+0

Hãy trung thực, người đặt một chuỗi '' null ''rõ ràng thay vì' null'? – EpicPandaForce

+0

Tài sản Hibernate db.connectionCustomizerClass: Tôi muốn đặt com.mchange.v2.c3p0.example.InitSqlConnectionCustomizer hoặc null. Cài đặt được định cấu hình qua lọc Maven. –

0

có vẻ bạn có thể làm như sau:

@Value("${some.value:null}") 
private String someValue; 

@Bean 
public static PropertySourcesPlaceholderConfigurer propertyConfig() { 
    PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer(); 
    propertySourcesPlaceholderConfigurer.setNullValue("null"); 
    return propertySourcesPlaceholderConfigurer; 
} 
Các vấn đề liên quan