如何在 Spring Boot 中有条件地自动装配?

我创建了一个调度程序类


public class TestSchedulderNew {


@Scheduled(fixedDelay = 3000)

public void fixedRateJob1() {

System.out.println("Job 1 running");

}


@Scheduled(fixedDelay = 3000)

public void fixedRateJob2() {

System.out.println("Job 2 running");

}

}

在配置中,我放置了 @ConditionalOnProperty 注释以在有条件的情况下启用它。


 @Bean

@ConditionalOnProperty(value = "jobs.enabled")

public TestSchedulderNew testSchedulderNew() {

return new TestSchedulderNew();

}

现在在控制器中,我已经创建了“stopScheduler”方法来停止那些调度程序,在这个控制器中我已经自动装配了 TestSchedulderNew 类


 @RestController

 @RequestMapping("/api")

 public class TestCont {


private static final String SCHEDULED_TASKS = "testSchedulderNew";


 @Autowired

 private ScheduledAnnotationBeanPostProcessor postProcessor;    /]


 @Autowired

 private TestSchedulderNew testSchedulderNew;



 @GetMapping(value = "/stopScheduler")

 public String stopSchedule(){

  postProcessor.postProcessBeforeDestruction(testSchedulderNew, 

   SCHEDULED_TASKS);

  return "OK";

  }

 }     

现在的问题是,如果条件属性为 false 那么我会得到以下异常


   Field testSchedulderNew in com.sbill.app.web.rest.TestCont required a bean of type 'com.sbill.app.schedulerJob.TestSchedulderNew

如果是真的,一切正常,


我们有什么办法可以解决这个问题吗?


慕村225694
浏览 102回答 1
1回答

动漫人物

您可以使用@Autowired(required=false)null 签入stopScheduler方法。 @Autowired(required=false) private TestSchedulderNew testSchedulderNew; @GetMapping(value = "/stopScheduler") public String stopSchedule() {     if (testSchedulderNew != null) {         postProcessor.postProcessBeforeDestruction(testSchedulderNew,           SCHEDULED_TASKS);         return "OK";     }     return "NOT_OK"; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java