Java 使用Spring在后台和按计划生成报告

Java 使用Spring在后台和按计划生成报告,java,multithreading,spring,scheduled-tasks,Java,Multithreading,Spring,Scheduled Tasks,用户可以通过两种方式生成报告 用户单击前端上的按钮,作业将运行以生成报告 用户可以安排报告生成每周、每月等 在场景1中,我决定首先将请求保存到一个表中,比如说“request\u TBL”。紧接着,我将运行ThreadPoolTaskExecutor,它从“request\u TBL”中提取特定请求。可能有很多用户可以请求生成报告。但每个用户一生最多只能生成30个报告(如果用户想要生成新报告,他需要删除任何旧报告) 在场景2中,用户可以安排某个报告每周或每月生成一次。然后,每周(或每月或etc)

用户可以通过两种方式生成报告

  • 用户单击前端上的按钮,作业将运行以生成报告
  • 用户可以安排报告生成每周、每月等
  • 在场景1中,我决定首先将请求保存到一个表中,比如说“request\u TBL”。紧接着,我将运行
    ThreadPoolTaskExecutor
    ,它从“request\u TBL”中提取特定请求。可能有很多用户可以请求生成报告。但每个用户一生最多只能生成30个报告(如果用户想要生成新报告,他需要删除任何旧报告)

    在场景2中,用户可以安排某个报告每周或每月生成一次。然后,每周(或每月或etc)作业将运行并生成用户计划的此报告

    现在,我不确定如何实现报表生成器工作。是否使用
    ThreadPoolTaskExecutor
    。或者使用相同的程序处理用户请求和用户计划的报告请求

    我计划让一个作业每分钟运行一次以读取“REQUEST_TBL”,并为每个记录运行ThreadPoolTaskExecutor.execute()。但是如果有1000个用户同时请求报告,那么我应该如何实现线程的创建呢。此外,对于计划的作业,我计划仅在当天运行它。计划作业将从同一“请求”中读取并查找已计划的请求。对于场景1,如果我想每隔(比如)2分钟运行一次作业,那么我应该在什么时候运行它?原因可能是在当天结束时,需要运行计划报告。此外,我还考虑每运行一次作业,比如说2分钟,因为如果服务器宕机,一旦服务器启动,就无法重新生成报告


    谢谢你的建议。你一下子问了很多问题。这里没有什么想法:

    • 绝对不要自己创建线程。使用其中一个线程,并以这种方式限制线程数
    • 对于其余部分,我将以最一致的方式进行:在需要生成时,
      REQUEST\u TBL
      中的每个记录都会有时间。因此,在场景1中,您将与请求一起保存当前时间。在场景2中,您将创建一个时间戳为周(月)的记录
    • 然后,您可以每隔一两分钟运行一次作业,以查询请求时间早于或等于
      的请求。并为每个返回的记录向执行者安排一个作业

    您看过Spring Batch吗?对不起,我的措辞错了。我编辑了我的问题。我要做的不是创建线程,而是运行ThreadPoolTaskExecutor.execute()。我不确定在用户请求之后运行这个execute()是否合适。对不起,我也不太擅长穿线(