2015-04-30 24 views
23

Cho một "tiêu chuẩn" ứng dụng khởi động mùa xuân với một @RestController, ví dụ:Có thể khởi động Spring @RestController bằng cách sử dụng các thuộc tính không?

@RestController 
@RequestMapping(value = "foo", produces = "application/json;charset=UTF-8") 
public class MyController { 
    @RequestMapping(value = "bar") 
    public ResponseEntity<String> bar(
     return new ResponseEntity<>("Hello world", HttpStatus.OK); 
    } 
} 

Có một chú thích hoặc kỹ thuật có thể ngăn chặn các thiết bị đầu cuối từ khi bắt đầu ở tất cả nếu/trừ khi một tài sản ứng dụng nhất định tồn tại/không làm hiện hữu.

Lưu ý: Thử nghiệm thuộc tính bên trong phương thức và giải mã không phải là giải pháp, vì điểm cuối sẽ tồn tại.

Tôi không quan tâm đến mức độ chi tiết: nghĩa là bật/tắt chỉ một phương thức hoặc cả lớp đều ổn.


Vì hồ sơ không phải là tài sản, kiểm soát thông qua tiểu sử không giải quyết được sự cố của tôi.

Trả lời

34

Tôi tìm thấy một giải pháp đơn giản sử dụng @ConditionalOnExpression:

@RestController 
@ConditionalOnExpression("${my.controller.enabled:false}") 
@RequestMapping(value = "foo", produces = "application/json;charset=UTF-8") 
public class MyController { 
    @RequestMapping(value = "bar") 
    public ResponseEntity<String> bar(
     return new ResponseEntity<>("Hello world", HttpStatus.OK); 
    } 
} 

Với chú thích này nói thêm, trừ khi tôi có

my.controller.enabled=true 

trong tập tin application.properties của tôi, bộ điều khiển sẽ không bắt đầu ở tất cả.

Bạn cũng có thể sử dụng thuận tiện hơn:

@ConditionalOnProperty("my.property") 

nào cư xử chính xác như trên; nếu thuộc tính có mặt và "true", thành phần bắt đầu, nếu không nó sẽ không.

+9

Bạn có thể muốn xem xét '@ ConditionalOnProperty' vì nó nhanh hơn một chút so với đánh giá SpEL. Hãy thử '@ConditionalOnProperty (prefix =" my.controller ", name =" enabled ")' –

+0

Cảm ơn, một giải thích bổ sung về mức độ chú thích này có thể được áp dụng: http://stackoverflow.com/questions/30065945/conditionalonproperty-conditionally -works – codesalsa

+1

Sử dụng ConditionalOnProperty hoặc ConditionalOnExpression sau khi RestController không hoạt động đối với tôi. Bean đang được tạo ra của URL vẫn có thể truy cập nhận được sau trong các bản ghi cho AdminController RestController: DozerInitializer - Dozer JMX MBean [org.dozer.jmx: type = DozerAdminController] tự động đăng ký với Platform MBean Server bất kỳ trợ giúp? –

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