我正在寻找最佳解决方案来创建一个java Web应用程序来生成excel / PDf格式的报告.类似于Google Adwords的一些内容,用户可以在以后生成报告时创建计划报告并下载.
我正在考虑开发和java应用程序,其中用户登录,选择预定义的报告并提供输入参数(如报告日期等),此请求将排队或保存为Quarts Job(更喜欢持久性队列).作业将监视队列/作业并执行作业,生成报告(输出excel / pdf)并存储在磁盘中.
当用户刷新屏幕或稍后重新登录时,报告应该可用于下载.
使用Spring批处理和Quartz调度程序可以这样做吗?我也期待像Spring管理员,在那里我可以看到队列中的请求数(排队的作业),并停止队列处理等.
解决方法:
如果您想同时处理所有报告请求,可能会使用spring-batch,可能是在您的服务器没有处理实时用户请求(甚至在缓慢期间的白天)处理的晚上.
如果要每隔几秒/分钟/小时/等检查新作业,并在指定的时间间隔处理其中一个/多个作业,则可以使用石英作业.
因此,quartz是一个调度程序,批处理是一个过程.您可以使用quartz来安排批处理作业在特定时间运行.它们不是竞争技术,它们是免费的.
关于你的问题:
鉴于你谈论队列及其持久性,但听起来很像你的问题适合简单的jms模型.你需要一些消息传递软件.如果你想让自己变得简单,我建议使用spring-jms作为基本Java EE JMS api的包装器 – spring包装器比基本的jms简单.对于消息传递服务,我会看一下RabbitMQ,因为它再次非常简单.
使用jms体系结构,您可以将用户请求发布到队列,您已将其配置为持久性.您在队列上有一个自定义侦听器,每当它运行时都会将请求传递给报表生成器.您可以将一个或多个线程分配给侦听器,这意味着您应该很容易调整报表生成器的性能.
有一个非常有用的DZone article关于通过spring-integration使用rabbitmq(一组预构建的模式实现,有助于将事物相互连接).