首页 > 解决方案 > 如何在 Spring 上有条件地创建 @Controller 和 @Service 实例

问题描述

我正在使用 Spring Boot 1.5.9。

有没有办法打开/关闭@Controller@Services

诸如@ConditionalOnProperty,@Conditional对于豆类的东西。

@ConditionalController // <--- something like this
@RestController
public class PingController {

    @Value("${version}")
    private String version;

    @RequestMapping(value = CoreHttpPathStore.PING, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity<Map<String, Object>> ping() throws Exception {
        HashMap<String, Object> map = new HashMap<>();
        map.put("message", "Welcome to our API");
        map.put("date", new Date());
        map.put("version", version);
        map.put("status", HttpStatus.OK);
        return new ResponseEntity<>(map, HttpStatus.OK);
    }

}

然后使用一些配置bean来加载它。

标签: javaspringspring-bootspring-mvcjavabeans

解决方案


@ConditionalOnProperty也应该适用于控制器(或服务),因为它也是一个 Spring bean。

添加到您的 PingController

@ConditionalOnProperty(prefix="ping.controller",
        name="enabled",
        havingValue="true")
@RestController
public class PingController {...}

并到 application.properties 打开/关闭它

ping.controller.enabled=false

推荐阅读