2014-10-19 36 views
12

Tôi đang sử dụng Spring-Boot-1.1.7. Mục đích của tôi là thêm bean vào ngữ cảnh của tôi theo giá trị của thuộc tính của chuỗi loại.Khởi động mùa xuân - @ConditionalOnProperty hoặc @ConditionalOnExpression

Ý tôi là, tôi có thể nhìn thấy rất nhiều ví dụ về giá trị boolean như thế này:

@ConditionalOnExpression("${xxx.enabled:true}") 

Nhưng tôi muốn một biểu thức dựa trên giá trị của một tài sản, ví dụ:

@ConditionalOnExpression("${server.host==localhost} or ${server.port==8080} ") 

hoặc một cái gì đó như thế.

Ai đó có thể cho tôi xem ví dụ về cách thực hiện không?

Trả lời

11

Cuối cùng, chương trình này làm việc cho tôi:

@ConditionalOnExpression("'${server.host}'=='localhost'") 
+0

Vâng điều đó sẽ làm việc (rõ ràng thực sự). Bạn đang so sánh 2 chữ. –

+1

Chỉ để xác nhận, mặc dù được trích dẫn, $ {server.host} được giải quyết chính xác? Vì vậy, nếu server.host là 'foobar', biểu thức được đánh giá là 'foobar' == 'localhost'? – JBCP

+0

Có, và việc đánh giá được thực hiện đúng, chỉ khi bạn báo giá. – Modi

1

Nếu giá trị bạn muốn so sánh bằng chữ, bạn cần báo giá nó và trình giữ chỗ sẽ đi quanh tên thuộc tính (không phải toàn bộ biểu thức), ví dụ: ${server.host}=='localhost'

+0

Đặt ví dụ của bạn kết thúc với ngoại lệ này: 'Nguyên nhân: org.springframework.expression .spel.SpelEvaluationException: EL1008E: (pos 0): Thuộc tính hoặc trường 'localhost' không thể tìm thấy trên đối tượng kiểu 'org.springframework.beans.factory.config.BeanExpressionContext' - có thể không công khai? ' Tôi thêm vào các biểu thức làm việc (đáng ngạc nhiên, tôi phải nói) tại câu trả lời dưới đây. Dù sao, cảm ơn bạn. – Modi

15

Đối với giá trị tài sản có điều kiện tôi đã sử dụng:

@ConditionalOnProperty(name="server.host", havingValue="localhost") 
Các vấn đề liên quan