在跑task任务的时候需要配置是否开启任务,比如在application.properties文件中添加"my.task.run=true",然后配合使用@ConditionalOnProperty注解,当my.task.run=true时候,下面的scheduled才会生效。
@Component
@ConditionalOnProperty("my.task.run")
public class MyScheduler
{
@Scheduled(fixedRate = 10 * 60 * 1000L)
public void runningScheduler()
{
performTask();
}
}
但是,有时候只想把任务放到集群服务器中的一个服务器上,这个时候最好的办法就是需要spring从tomcat获取配置,而不是从application.properties获取。
方法如下,使用@Conditional注解。
首先,需要定义一个Condition类并实现Condition接口,重写matches方法:
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class MyCondition implements Condition
{
@Override
public boolean matches( ConditionContext context, AnnotatedTypeMetadata metadata )
{
return "true".equalsIgnoreCase(context.getEnvironment().getProperty("my.task.run"));
}
}
task类如下:
@Component
@Conditional(MyCondition.class)
public class MyScheduler
{
@Scheduled(fixedRate = 10 * 60 * 1000L)
public void runningScheduler()
{
performTask();
}
}
最后需要在tomcat目录下的bin\catalina.bat中添加 :
set my.task.run=true
即可。