我目前有一个tomcat容器 - 在其上运行的servlet监听请求.我需要HTTP请求的结果是作业队列的提交,然后将异步处理.我希望每个"作业"在数据库中连续保存,以便在发生故障时进行跟踪和恢复.我一直在做很多阅读.这是我的选择(注意我必须使用开源的东西).
1)JMS - 使用ActiveMQ(但是在这种情况下谁是该作业的消费者另一个servlet?)
2)让我的请求在数据库中创建一行.在我的Tomcat容器中有一个始终运行的独立servlet - 它使用Quartz Scheduler或java.util.concurrent中提供的实用程序来连续处理作为作业的行(使用线程池).
我倾向于后者,因为查看JMS文档让我头疼,虽然我知道它是一个更强大的解决方案,但我需要相对快速地实现它.在任何情况下,在部署此服务器的早期我都没有预料到会产生巨大的负载.
很多人都认为Spring可能对1或2都有好处.但是我从未使用过Spring,我甚至不知道如何开始使用它来解决这个问题.任何有关如何潜入而无需重新编写整个项目的指针都会很有用.
否则,如果您可以权衡选项1或2,这也是有用的.
澄清:异步过程是屏幕抓取第三方网站,并向原始请求者发送消息通知.第三方网站有点不稳定和缓慢,这就是为什么它将作为异步进程处理(内置几次重试尝试).我还将从该站点提取文件并将其存储在S3中.
我在Web应用程序中调度作业时遇到问题.如果我们必须在Web应用程序中安排作业,我们可以使用java util Timer/TimerTask或Quartz(还有其他调度机制,但我考虑过Quartz).我正在考虑使用哪一个,当我点击网站http://oreilly.com/pub/a/java/archive/quartz.html?page=1时说使用计时器有一个不好的效果,因为它创建了一个线程在最后一行没有容器控制.其他页面讨论了Quartz及其功能,但我可以读到Quartz还使用线程和/或线程池来安排任务.我的猜测是这些线程也不受容器控制
任何人都可以向我澄清这是否可以安全地在我的Web应用程序中使用Quartz而不创建挂起线程或线程锁定问题?提前致谢
在Quarts中,我可以使用单个触发器来安排多个作业,以便所有作业并行执行.做这个的最好方式是什么.
例如,每小时并行执行Jobs j1,j2,...,jn.假设作业之间没有依赖关系.
随Quartz Scheduler一起提供的SimpleThreadPool类没有FIFO行为.我想确保如果我继续向调度程序添加作业,它们将以先进先出的方式解决.有没有可用的ThreadPool?或者有没有其他方法来实现这一目标?
我发现这个答案:1.对Quartz要求数据源的答案很长,但是,如果你想要更深入的答案,我相信我需要深入研究源代码或做更多的研究:a.JobStoreCMT依赖于使用Quartz的应用程序管理的事务.在尝试安排(或取消安排)作业/触发器之前,必须正在进行JTA事务.这允许调度的"工作"成为应用程序"更大"事务的一部分.JobStoreCMT实际上需要使用两个数据源 - 一个具有由应用程序服务器管理的连接的事务(通过JTA)和一个具有不参与全局(JTA)事务的连接的数据源.当应用程序使用JTA事务(例如通过EJB会话Bean)执行其工作时,JobStoreCMT是合适的.(参考; http://quartz-scheduler.org/documentation/quartz-1.x/configuration/ConfigJobStoreCMT)
但是,在我们的特定应用程序中存在与非事务驱动程序的冲突.有谁知道Quartz(JobsStoreCMT)是否可以只使用事务数据源?
我们的商店目前使用Quartz进行现有项目.唯一的缺点是Quartz线程不受管理.
我们正在转向EJB 3.1,我想知道是否有任何方法可以复制Quartz作业调度的动态特性.具体来说,我想知道是否有人听说有人编写GUI前端来使用EJB 3.1处理,管理或编辑作业.
从我所读到的,这似乎不可能或非常麻烦.似乎EJB 3.1计时器对它们所在的bean是私有的,这使得收集它们并检查它们的过程相当困难.此外,似乎EJB 3.1计时器纯粹是程序/声明,即它们需要重新部署来修改其参数或设置.
在这个舞台上的任何想法,想法或经验?
最后请注意,我们正在使用Websphere 8.0.
我在Microsoft Bot Framework的应用程序中使用Quartz.NET.我正在本地计算机上调试它(尽管数据库仍在Azure上).
由于某种原因,所有工作都会失败,他们不会再次开火,即使我尝试了各种各样的.WithMisfire ......选项.
我将工作设置为每15-20秒运行一次以进行测试.我在我的作业类中的Execute()的第一行设置了一个断点,但它从未到达那一点.因此,所有作业都失败,甚至没有达到Execute().
我可以看到在数据库中创建的作业和触发器TRIGGER_STATE = WAITING.在达到指定的执行时间后,州改变为ERROR.
这是我启动调度程序的代码:
public static IScheduler StartAndGetScheduler()
{
NameValueCollection properties = new NameValueCollection();
properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz";
properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
properties["quartz.jobStore.dataSource"] = "default";
properties["quartz.dataSource.default.connectionString"] = "Server=*************.database.windows.net,1433;Initial Catalog=*************;" +
"Persist Security Info=False;User ID=***********;Password=**********;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;";
properties["quartz.dataSource.default.provider"] = "SqlServer-20";
properties["quartz.jobStore.useProperties"] = "true";
properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz";
properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";
ISchedulerFactory sf = new StdSchedulerFactory(properties);
scheduler = sf.GetScheduler();
scheduler.Start();
return scheduler;
}
Run Code Online (Sandbox Code Playgroud)
这是调度作业(用于测试)的代码:
try {
Random rnd = …Run Code Online (Sandbox Code Playgroud) 我有一个使用dropwizard框架创建的应用程序,我已经注册了一个计划在每个指定的持续时间后运行的quartz-scheduler作业.此作业向SQL Server DB发出SQL查询并迭代ResultSet并将数据设置为POJO类,稍后将其推送到队列.
SQL查询使UNION连接多个表,这些表使用where子句中相关表的last_modified_time列获取在增量时间内修改的记录的数据.pom.xml中包含的DB jar是sqljdbc-4.4.0,quartz版本是2.2.1
查询如下所示:
SELECT
u.last_modified_date,
u.account_id,
u.user_id,
ud.is_active
FROM user u WITH (NOLOCK)
JOIN user_details ud with (NOLOCK) ON u.account_id = ud.account_id AND u.user_id = ud.user_id
WHERE u.last_modifed_date > ? AND ud.last_modifed_date <= ?
UNION
SELECT
u.last_modified_date,
u.account_id,
u.user_id,
ud.is_active
FROM user u WITH (NOLOCK)
JOIN user_details ud with (NOLOCK) ON u.account_id = ud.account_id AND u.user_id = ud.user_id
JOIN user_registration_details urd WITH (NOLOCK) ON urd.account_id = u.account_id AND urd.user_id = u.user_id AND urd.reg_id = ud.reg_id
WHERE urd.last_modifed_date …Run Code Online (Sandbox Code Playgroud) 我试着在春天使用石英调度器.配置多个作业时,我得到以下异常
Job2中方法jobTrigger的参数0需要一个无法找到的类型为'org.quartz.JobDetail'的bean.
quartz - v2.3,Spring - v4.2.x
配置类
@Configuration
public class SchedulerConfig {
private static final Logger LOG = LoggerFactory.getLogger(SchedulerConfig.class);
@Autowired
List<Trigger> triggers;
@Bean
public JobFactory jobFactory(ApplicationContext applicationContext) {
AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
jobFactory.setApplicationContext(applicationContext);
return jobFactory;
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory) throws IOException {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setAutoStartup(true);
factory.setJobFactory(jobFactory);
factory.setQuartzProperties(quartzProperties());
if (triggers != null && !triggers.isEmpty()) {
LOG.info("starting jobs... Total Triggers - " + triggers.size());
factory.setTriggers(triggers.toArray(new Trigger[triggers.size()]));
}
return factory;
}
@Bean
public Properties quartzProperties() throws …Run Code Online (Sandbox Code Playgroud) 我正在使用quartz-scheduler来安排我的工作.我有一个错误的cron表达式:
1 15 10 ? * *ssddddfd
Run Code Online (Sandbox Code Playgroud)
当我做:
String cronExpression = "1 15 10 ? * *ssdddfd";
boolean checkCronExpression = CronExpression.isValidExpression(cronExpression);
Run Code Online (Sandbox Code Playgroud)
checkCronExpression是true.但是,当我看到表达时,这显然是错误的.有没有其他人也遇到过类似的问题?
注意:包是:package org.quartz;
石英版本是:2.2.3
请从http://www.javadoc.io/doc/org.quartz-scheduler/quartz/2.2.3查看CronExpression类.
我也试过课的validateExpression方法CronExpression没有成功.
quartz-scheduler ×10
java ×7
asynchronous ×1
c# ×1
cron ×1
database ×1
datasource ×1
dropwizard ×1
ejb ×1
ejb-3.1 ×1
jms ×1
quartz ×1
quartz.net ×1
spring ×1
spring-boot ×1
sql-server ×1
tomcat ×1
websphere ×1
xa ×1