2012-02-24 6 views
5

Tôi có một tập tin cấu hình mùa xuân trong đó bao gồm các yếu tố sau:Tôi có thể mặc định thuộc tính hệ thống cho hàm tạo-arg trong tệp cấu hình mùa xuân không?

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

<bean id="theVar" class="java.lang.String"> 
    <constructor-arg value="${varName}"/> 
</bean> 

"VARNAME" hiện đang chuyển từ các thuộc tính tập tin để sở hữu một hệ thống. Nó đang được thêm vào khi tôi bắt đầu một Maven xây dựng:

mvn clean install -DvarName=data 

Tôi muốn cũng chạy build của tôi mà không chỉ định VARNAME:

mvn clean install 

Có một số cách để mặc định VARNAME trong cấu hình mùa xuân của tôi? Mặc dù điều này không làm việc, một ví dụ về khái niệm về những gì tôi đang tìm kiếm là:

<bean id="theVar" class="java.lang.String"> 
    <constructor-arg value="${varName}" default="theDefaultValue"/> 
</bean> 
+0

Có cần phải là thuộc tính hệ thống không? Nó có thể được chỉ định trong một tệp khác không? –

+0

Nó cần phải năng động tại thời gian xây dựng. Tôi đang mở để gợi ý về cách thức. Tôi cần phải xác định các giá trị khác nhau cho varName khi tôi gọi một build, và tôi cũng cần phải gọi một build mà không cần chỉ định varName. – TERACytE

+0

Việc chỉ định nhiều tệp thuộc tính có giúp ích không?Phần tử 'location' hỗ trợ nhiều tệp được phân tách bằng dấu phẩy (,). Bạn có thể chỉ định một tệp khác có 'mặc định hệ thống' trong đó và nếu nó không thể được giải quyết bởi 'classpath: default.properties', thì nó sẽ cố gắng giải quyết bằng tệp thuộc tính tiếp theo. –

Trả lời

4

Nó chỉ ra rằng vào mùa xuân v2.5 +, nếu có một hệ thống tài sản được xác định, nó có thể được sử dụng thay cho một thuộc tính được định nghĩa trong tệp thuộc tính. Bạn chỉ cần đảm bảo cùng một tên được sử dụng và tùy chọn 'ghi đè' được bật.

Ví dụ, đưa ra:

<!-- my spring config file --> 
<context:property-placeholder location="classpath:default.properties" system-properties-mode="OVERRIDE"/> 

Và:

# default.properties file 
theVariable=One 

Khi tôi thực hiện:

mvn clean install 

"One" được chọn-up cho theVariable. Nếu tôi thực hiện:

mvn clean install -DtheVariable=Two 

"Hai" được chọn thay thế.

3

Tôi không chắc chắn nếu điều này sẽ giúp đỡ, nhưng nếu bạn đang chú thích các lớp học và muốn có một giá trị mặc định khi một tài sản hệ thống không được trình bày này là những gì tôi đang làm:

@Value("#{systemProperties['fee.cc']?:'0.0225'}") 
public void setCcFeePercentage(BigDecimal ccFeePercentage) { 
    this.setCcFeePercentage(ccFeePercentage); 
} 
1

Nó có thể được thực hiện như @sebastien đã mô tả nhưng trong tập tin cấu hình như bạn muốn:

<bean id="theVar" class="java.lang.String"> 
    <constructor-arg value="#{systemProperties['varName'] == null ? 'default_value' : systemProperties['varName']}"/> 
</bean> 

Nếu biến số varName của bạn không có, giá trị mặc định sẽ được đặt.