石英2.2
我在运行时动态创建和调度Quartz作业,并将Quartz配置为JDBC-Job-Store。这些作业需要在应用程序执行之间保持不变。在作业执行期间,我需要访问完整的Spring上下文(Spring管理的bean和JPA事务)。
然而,如果我试图将任何东西自动加入到我的工作中,那么我会得到一个错误,比如…“通过字段MyAutowiredField表示的不满足的依赖项”
我想不通。我已经找到了无数的例子,展示如何让自动驾驶工作在石英工作,但几乎所有这些都只是静态的,硬编码的工作。而不是在运行时动态创建的作业。
下面的URL中的示例是最接近的。它动态地创造了就业机会,自动驾驶在其中发挥了很大的作用。然而,它是一个ram作业存储。当我切换到jdbc时,我又回到了原点。
https://icecarev.com/2016/11/05/spring-boot-1-4-and-quartz-scheduling-runtime-created-job-instances-from-a-configuration-file/
但是,他们的解决方案似乎都缺失了一些东西。例如,它们依赖于静态作业、触发器,或者只是简单的不工作等等。
有人有最新资源的提示或链接吗?
谢谢!
编辑%1
public class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory
{
private transient AutowireCapableBeanFactory beanFactory;
public AutowiringSpringBeanJobFactory(ApplicationContext context)
{
super();
this.beanFactory = context.getAutowireCapableBeanFactory();
MyJobClass job = new MyJobClass();
beanFactory.autowireBean(new MyJobClass()); /** no problem **/
beanFactory.initializeBean(job, "job");
}
@Override
protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception
{
final Object job = super.createJobInstance(bundle); /* job is an instance MyJobClass.. same as above */
beanFactory.autowireBean(job); /** "Unsatisfied dependency" exception **/
beanFactory.initializeBean(job, "job");
return job;
}
}
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
return bundle.getJobDetail().getJobClass().newInstance();
}
Object job = bundle.getJobDetail().getJobClass().newInstance();
MyJobClass myJob = (MyJobClass) job;
@Override
protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception
{
String className = bundle.getJobDetail().getJobClass().getName();
Object job = Class.forName(className).newInstance();
beanFactory.autowireBean(job);
job = beanFactory.applyBeanPostProcessorsAfterInitialization(job, "job"); // Without this, @Transactional in my job bean doesn't work
beanFactory.initializeBean(job, "job");
return job;
}
当您提到“不是在运行时动态创建的作业.”时,我将假设您在某个时刻执行类似于以下操作:MyJob job=new MyJob()
;
如果您希望使用Spring
的@autowire
在MyJob中注入依赖项,我想到的一种方法是:
@configurable(dependencyCheck=true)
java-javaagent:
...
我想使用Quartz、Spring和Hibernate创建动态作业。用户与web服务交互以创建此类作业: NoaJobInstancesDAO是一个简单的DAO类,它利用了Hibernate的EntityManager: 问题是,当这个作业触发时,会抛出一个异常: 我不明白为什么!在Manager类中,我以这种方式安排作业 其中排定程序作为 Edit1:应用程序上下文的实例似乎正确。问题不可能在那
在我的java应用程序中,我有一个Quartz作业,它每天运行一次,处理特定的任务。在我的方法中只有以下内容: 是一个实例变量。
在这些工作中,我想从另一个应用程序访问spring-security安全bean方法。 这是我的应用程序结构。 -core -webapp -jobs-app 但是,所有的工作我都得这么做。 有没有一种方法可以让所有的作业作为一个特定的用户运行?可能是什么配置?
我在grails中使用服务,并从控制器中的服务获取和设置数据,没有问题。我知道如何使用它。。。但是这个问题我解决不了,如果你知道出了什么问题,请帮助我。 有一个QuartzWork,我从控制器的服务时间表...数据存储在PostgreSQL中。使用所有插件和2.3.3 Grails的最新版本。在下面的代码中,我只想打印昵称,但我无法获得服务。试图得到豆,def grailsApplication但
问题内容: 我对Java Quartz不太熟悉,我们只是使用了每天安排的测试工作。对于我们的Struts2 Web应用程序,我们希望运行一些计划在一天中不同时间的日常工作。作业应处于持久状态,以便即使由于服务器关闭/应用程序失败而导致作业失败,也应在服务器启动后稍后重新执行。我还可以将作业的状态/结果存储在DB中,以便监视作业。任何的意见都将会有帮助。 - 谢谢 问题答案: 无论您提到什么,都可以