Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring引导计划在方法级别启用/禁用任务_Java_Spring Boot_Scheduled Tasks - Fatal编程技术网

Java spring引导计划在方法级别启用/禁用任务

Java spring引导计划在方法级别启用/禁用任务,java,spring-boot,scheduled-tasks,Java,Spring Boot,Scheduled Tasks,我按照这个指南开始在SpringBoot中安排任务 我想在同一个类中为不同的任务添加更多的方法,想知道是否可以通过属性和@ConditionalOnProperty在方法级别上启用/禁用任务,似乎@ConditionalOnProperty只在类级别上工作,而不是在方法级别上工作(根据下面的代码示例,它不工作). 有其他办法吗?或者必须创建另一个包含task 2的类才能分别禁用/启用它们 @Component public class SchedulingTasks { pr

我按照这个指南开始在SpringBoot中安排任务

我想在同一个类中为不同的任务添加更多的方法,想知道是否可以通过属性和
@ConditionalOnProperty
在方法级别上启用/禁用任务,似乎
@ConditionalOnProperty
只在类级别上工作,而不是在方法级别上工作(根据下面的代码示例,它不工作). 有其他办法吗?或者必须创建另一个包含task 2的类才能分别禁用/启用它们

@Component    
public class SchedulingTasks {

    private static final Logger log =    LoggerFactory.getLogger(SchedulingTasks.class);

    @Scheduled(fixedRate = 50000)
    public void jobOne() {
        log.info("job one started at {}", LocalDateTime.now());
    }

    @Scheduled(fixedRate = 50000)
    @ConditionalOnProperty(name="job.two", havingValue="true")  
    public void jobTwo() {
        log.info("just two started at {}", LocalDateTime.now());
    }
}
您可以应用于方法和类型,但这似乎只适用于注册bean的方法(请参阅文档)

您应该创建单独的Bean,在其中可以控制@ConditionalOnProperty的注册,然后将注释应用于Bean中的方法

例如:

@Slf4j
@服务
@ConditionalOnProperty(prefix=“schedule”,name={“job.one”},havingValue=“true”)
公共类JobOneScheduler{
@已计划(cron=“*/2*****”)
public void runJob(){
debug(“正在运行作业一…{}”,LocalDateTime.now());
}
}
@Slf4j
@服务
@ConditionalOnProperty(prefix=“schedule”,name={“job.two”},havingValue=“true”)
公共类JobTwoScheduler{
@已计划(cron=“*/5*****”)
public void runJob(){
debug(“正在运行作业二…{}”,LocalDateTime.now());
}
}
application.properties:

schedule.job.one=true
schedule.job.two=false

我只想创建单独的类。在
app.properties
文件中是否有
job.two=true
?是的,我在application.properties文件中有job.two=false,但是这两种方法都会记录信息。使用相同的属性设置,如果在类级别上移动@ConditionalOnProperty注释,这两个方法都不会记录信息。只有当
@ConditionalOnProperty
返回
@Bean
时,才能将其用作方法级别的注释