我想在一段时间内发送一个post请求。我创造了这样的方法;
@Scheduled(cron = "0 0 */6 * *")
@PostMapping
public List<TagsRes> getTags(Date date) {
return null;
}
@Scheduled(cron = "0 0 5 * * ?")
@PostMapping
public List<TagsRes> getAll() {
return null;
}
我应该在控制器中使用@Scheduled吗?有更好的方法吗?
谢谢
为了安排spring boot应用程序中的作业定期运行,spring boot提供@EnableScheduling和@Scheduled注释。在我看来,因为spring boot为调度器提供了注释和功能,所以使用它会更有意义
@EnableScheduling
注释@EnableScheduling
是Spring上下文模块注释。它通过@Import(SchedulingConfiguration.class)指令在内部导入SchedulingConfiguration@SpringBootApplication
@EnableScheduling
public class SpringBootWebApplication {
}
现在,您可以在要调度的方法上添加@Scheduled
注释。唯一的条件是方法应该没有参数。
将由导入的SchedulingConfiguration
创建的ScheduledAnnotationBeanPostProcessor
扫描所有声明的bean,查看是否存在@Scheduled
注释。
对于每个不带参数的注释方法,将创建适当的执行器线程池。这个线程池将管理注释方法的计划调用。
@Scheduled(initialDelay = 1000, fixedRate = 10000)
public void run() {
logger.info("Current time is :: " + Calendar.getInstance().getTime());
}
来源:https://howtodoinjava.com/spring-boot/enable-scheduling-scheduled-job-example/
控制器用于接收Web请求,而不是发布任何内容。您可以将它们视为应用程序公开的终结点,并由外部服务不时调用。
现在,控制器抽象本身应该执行任何业务逻辑。您可能希望验证请求中接收到的一些参数,或者通过一些定制将请求参数转换为java对象,然后调用实际执行业务逻辑的类(在spring universe中通常称为服务)。
现在回到你的问题。我怀疑您不应该“发布请求”,而应该“像有人调用控制器的方法(endpoint)”一样调用某段代码。但这次不是外部“用户”导致代码执行,而是内部调度程序。
如果是这样,您可以稍微重构代码以获得更好的清晰度:
不要忘记添加@EnableScheduling
注释,否则计划的代码将无法运行。
public class MyService {
public void doBusinessLogic(){ ... }
}
@RestController
public class MyController {
@Autowired
private MyService service;
public void myPostMethod(...) {
service.doBusinessLogic(...);
}
}
public class MyScheduledInvoker {
@Autowired
private MyService service;
@Scheduled(...cron expression or whatever...)
public void invokeScheduled() {
service.doBusinessLogic(...);
}
}
@SpringBootApplication
@EnableScheduling
public class MyApp {
public static void main(String [] args) { .... run the app ...}
}
我有一个简单的计划任务,它是使用@计划注释创建的。类似这样的东西- 我还有一个蓝绿色升级场景,在这个场景中,这个计划任务可能会在蓝色和绿色集群中运行。鉴于这个计划任务修改了数据库,其中一个节点可能会覆盖来自另一个节点的数据——或者最坏情况下的竞争条件。 我想暂停绿色集群上所有计划的任务,直到它准备好接受流量。我已经有了代码来监听应用程序状态的变化。 我探索了几个选择- 只需在任务开始时添加一个布尔
本文向大家介绍MySQL的查询计划中ken_len的值计算方法,包括了MySQL的查询计划中ken_len的值计算方法的使用技巧和注意事项,需要的朋友参考一下 key_len的含义 在MySQL中,可以通过explain查看SQL语句所走的路径,如下所示: 其中,key_len表示使用的索引长度,是以字节为单位。在上面的例子中,由于int型占用4个字节,而索引中只包含了1列,所以,key_len是
关于Java定时器类或ScheduledExecutorService接口,我可以在执行器线程(其他调度器)的运行方法(或TimerTask)内设置调度器(或定时器)吗? 案例研究:我有一个数据库,其中包含歌曲列表(10000首)和播放歌曲的时间表。 所以我想创建一个调度程序(比如1)(周期为1小时),它将搜索数据库,并为计划在一小时内播放的所有歌曲创建调度程序。 一小时后,scheduler1将
我用SpringBoot创建了一个简单的演示应用程序,其中包括执行器。带有@Scheduled注释的任务显示在执行器中,但以编程方式启动的任务不会显示。有没有办法让他们也出现? 我已经注释了@Enable调度。 我的组件如下所示: 执行器的结果仅显示带注释的任务:
我正在运行Spring 3.2.3。RELEASE和我在@Service修饰类中有几个方法,它们是计划任务,因此用@Scheduled注释修饰。 所有Springbean都在容器中被检测和实例化,但是从不调用@Scheduled注释。 我有几个应用程序上下文,但主文件描述如下: 另一个重要文件作为“core task scheduler.xml”导入。其配置如下: 最初,executor引用(如上
我正在尝试编写一个apex类,当特定日期与今天的日期相差不到30天时,它会在自定义对象上检查chekbox。该课程应该每周运行一次,以不断检查应该更新的记录。我对Apex一无所知,我的代码是由我在其他线程中发现的各种snipped组成的。我想我几乎就知道了,但它一直显示以下错误消息:方法不存在或签名不正确:CustomersDateCheck类型中的void DateCheck()。 有人能帮我一