- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经在 jHipster 服务器中配置了quartz 作业,它在 System.out.println
上运行良好。声明但是当我尝试使用与持久性相关的工作时它给了我一个异常(exception)。我有@Autowire
JdbcTemplate jdbcTemplate;但它仍然为空,原因是当 jHipster 服务器运行时它告诉:
Scheduler meta-data: Quartz Scheduler (v2.2.1) 'schedulerFactoryBean' with instanceId **'NON_CLUSTERED'**
Scheduler class: 'org.quartz.core.QuartzScheduler' - **running locally**.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - **which does not support persistence. and is not clustered**.
2017-09-26 10:56:10.523 INFO 10188 --- [ restartedMain] org.quartz.impl.StdSchedulerFactory : Quartz scheduler **'schedulerFactoryBean' initialized from an externally provided properties** instance.
2017-09-26 10:56:10.523 INFO 10188 --- [ restartedMain] org.quartz.impl.StdSchedulerFactory : Quartz scheduler version: 2.2.1
2017-09-26 10:56:10.523 INFO 10188 --- [ restartedMain] org.quartz.core.QuartzScheduler : JobFactory set to: org.springframework.scheduling.quartz
这些是 jhipster 打印的日志,请告诉我如何将持久性与 jdbcTemplet 结合使用,我不想打开单独的 JDBC 连接。如果可能的话,我想使用现有的服务类,但这也会出错。
这是我的配置文件和作业文件
@Configuration
@ComponentScan("com.jobs")
public class QuartzJobSchedulerConf {
//http://www.concretepage.com/spring-4/spring-4-quartz-2-scheduler integration-annotation-example-using-javaconfig
//todo make common function for simple jobs to set attributes
//todo make common function for complex jobs to set attributes
@Bean //this is simple job1
public MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean() {
MethodInvokingJobDetailFactoryBean obj = new MethodInvokingJobDetailFactoryBean();
obj.setTargetBeanName("jobone");
obj.setTargetMethod("myTask");
return obj;
}
@Bean
public SimpleTriggerFactoryBean simpleTriggerFactoryBean(){
//This trigger will schedule the job after 3 seconds and repeat after every 30 seconds for 3+1 times.
SimpleTriggerFactoryBean stFactory = new SimpleTriggerFactoryBean();
stFactory.setJobDetail(methodInvokingJobDetailFactoryBean().getObject());
stFactory.setStartDelay(3000);
stFactory.setRepeatInterval(30000);
stFactory.setRepeatCount(3);//todo repeat counter remove or use
return stFactory;
}
@Bean //this is simple job2
public MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean2() {
MethodInvokingJobDetailFactoryBean obj = new MethodInvokingJobDetailFactoryBean();
obj.setTargetBeanName("jobtwo");
obj.setTargetMethod("myTask");
return obj;
}
@Bean
public SimpleTriggerFactoryBean simpleTriggerFactoryBean2(){
SimpleTriggerFactoryBean stFactory = new SimpleTriggerFactoryBean();
stFactory.setJobDetail(methodInvokingJobDetailFactoryBean2().getObject());
stFactory.setStartDelay(3000);
stFactory.setRepeatInterval(30000);
stFactory.setRepeatCount(3);//todo repeat counter remove or use
return stFactory;
}
@Bean//this is complex job1
public JobDetailFactoryBean jobDetailFactoryBean(){
/*To pass the parameter to job by JavaConfig, we can have setter method and
the property should be configured with setJobDataAsMap() in JobDetailFactoryBean
configuration in JavaConfig*/
JobDetailFactoryBean factory = new JobDetailFactoryBean();
factory.setJobClass(SampleComplexJob.class);
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "RAM");
map.put(SampleComplexJob.COUNT, 1);
factory.setJobDataAsMap(map);
factory.setGroup("mygroup");
factory.setName("myjob");
return factory;
}
@Bean
public CronTriggerFactoryBean cronTriggerFactoryBean(){
CronTriggerFactoryBean stFactory = new CronTriggerFactoryBean();
stFactory.setJobDetail(jobDetailFactoryBean().getObject());
stFactory.setStartDelay(3000);
stFactory.setName("mytrigger");
stFactory.setGroup("mygroup");
stFactory.setCronExpression("0 0/1 * 1/1 * ? *");
return stFactory;
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
scheduler.setTriggers(simpleTriggerFactoryBean().getObject(),
simpleTriggerFactoryBean2().getObject(),
cronTriggerFactoryBean().getObject());
return scheduler;
}
}
有工作类别代码
/*If we want to persist the changes in JobDataMap, we will annotate our class by @PersistJobDataAfterExecution */
@PersistJobDataAfterExecution
/*if there is more than one trigger which are scheduling same job then to avoid race condition, we have to annotate our job with @DisallowConcurrentExecution.*/
@DisallowConcurrentExecution
public class SampleComplexJob extends QuartzJobBean {
@Autowired
JdbcTemplate jdbcTemplate;
public static final String COUNT = "count";
private String name;
protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException {
for(String role:findRoleByPrivilegeSQLExample("PRIV_USER_SETTING")){
System.out.println(role);
}
JobDataMap dataMap = ctx.getJobDetail().getJobDataMap();
int cnt = dataMap.getInt(COUNT);
JobKey jobKey = ctx.getJobDetail().getKey();
System.out.println(jobKey+": "+name+": "+ cnt);
cnt++;
dataMap.put(COUNT, cnt);
}
public void setName(String name) {
this.name = name;
}
public List<String> findRoleByPrivilegeSQLExample(String privilege){
///this is SQL example
List<String> rolePrivilegesList = new ArrayList<String>();
if(!privilege.isEmpty()){
StringBuilder sql=new StringBuilder()
.append("SELECT ID_ROLE FROM ROLE_PRIVILEGES WHERE ")
.append("UPPER(ID_PRIVILEGE) = '")
.append(privilege.toUpperCase()).append("'");
rolePrivilegesList = jdbcTemplate.queryForList(sql.toString(),String.class);
}
return rolePrivilegesList;
}
}
如果有其他方法在 jHipster 中配置 Quartz 作业,请告诉我。或者,如果 jHipster 为 Scheduler 工作提供开箱即用的功能,那就太好了。
quartz 作业依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
最佳答案
1) 为什么我的 bean 没有被自动配置是因为它配置不正确。
更新了类QuartzJobSchedulerConf.java
@Configuration
@ComponentScan("com.jobs")
public class QuartzJobSchedulerConf {
@Bean//this is complex job1
public JobDetailFactoryBean jobDetailFactoryBean(ComplexJobService complexJobService){
JobDetailFactoryBean factory = new JobDetailFactoryBean();
factory.setJobClass(ComplexScheduledJob.class);
Map<String,Object> map = new HashMap<String,Object>();
map.put("complexJobService", complexJobService);
factory.setJobDataAsMap(map);
factory.setDurability(true);
return factory;
}
@Bean
public CronTriggerFactoryBean cronTriggerFactoryBean(ComplexJobService complexJobService){
CronTriggerFactoryBean stFactory = new CronTriggerFactoryBean();
stFactory.setJobDetail(jobDetailFactoryBean(complexJobService).getObject());
stFactory.setCronExpression("0 0/1 * 1/1 * ? *");
stFactory.setStartDelay(3000);
return stFactory;
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean(ComplexJobService complexJobService) {
SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
scheduler.setConfigLocation(new ClassPathResource("properties/quartz.properties"));
scheduler.setTriggers(
cronTriggerFactoryBean(complexJobService).getObject());
return scheduler;
}
}
添加的类ComplexJobService.java
@Component("complexJobService")
public class ComplexJobService {
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
UtilityService utilityService;
protected void execute() {
// utilityService.fetchCountriesDTO();
}
}
ComplexScheduledJob.java
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
@Component
public class ComplexScheduledJob extends QuartzJobBean{
@Autowired
private ComplexJobService complexJobService;
private static int count;
@Override
protected void executeInternal(JobExecutionContext jobContext)
throws JobExecutionException {
complexJobService.execute();
count++;
System.out.println("Job count " + count);
}
public void setComplexJobService(ComplexJobService complexJobService) {
this.complexJobService = complexJobService;
}
}
This java configuration replaces the XML configuration of Quartz Scheduler e.g.
<bean name="complexJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.jobs.ComplexScheduledJo" />
<property name="jobDataMap">
<map>
<entry key="complexJobService" value-ref="complexJobService" />
</map>
</property>
<property name="durability" value="true" />
</bean>
关于java - 如何在jHipster中配置Quartz作业? [在 jHipster 中配置 Quartz 作业时出现问题],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46419678/
我只是不喜欢 Logback 的 XML 或 Groovy 配置,而更喜欢用 Java 进行配置(这也是因为我将在初始化后的不同时间在运行时更改配置)。 似乎对 Logback 进行 Java 配置的
我的 sphinx 配置是: ================================ config/sphinx.yml development: bin_path: "/usr/loc
我们计划在生产服务器中部署我们的系统。我有兴趣了解更多有关优化网站性能的信息。 Sitecore 有哪些优化建议? (缓存,网络配置中的其他设置) 我们可以在 IIS 中做哪些优化? 找不到关于这些主
我有一个 Django 应用程序,可以处理网站的两个(或更多)部分,例如网站的“admin”和“api”部分。我还为网站的其余部分提供了普通的 html 页面,其中不需要 Django。 例如,我希望
我刚刚开始研究Docker。我有一个 Node 应用程序,可以调整大小和图像,然后在完成后向 aws 发送 SQS 消息。我已成功创建应用程序的 docker 镜像,并从本地计算机复制它,但遇到了无法
如何配置 checkstyle(在 Ant nt Maven 中)任务?我尝试了一点,但没有正确收到报告。这是我的 Ant 脚本。
我正在使用 Quartz 和 Spring 框架重写一个遗留项目。原始配置是 XML 格式,现在我将其转换为 Java Config。 xml 配置使用 jobDetail 设置触发器 bean 的作
tl;rd: 使用主键对数据库进行分区 索引大小问题。 数据库大小每天增长约 1-3 GB 突袭设置。 您有使用 Hypertable 的经验吗? 长版: 我刚刚建立/购买了一个家庭服务器: 至强 E
在安装 gcp 应用程序后,我们尝试使用 GCP 的图形 api 配置 Azure Active Directory saml 配置。我们正在遵循相同的 AWS graph api saml 设置 U
我刚刚了解了 spring security 并想使用 java hibernate 配置连接到数据库,但我发现的示例或教程很少。我通过使用 xml 配置找到了更多。我在这里使用 Spring 4.0
我们最近切换到 Java 8 以使用 java.time API(LocalDate、LocalDateTime,...)。因此,我们将 Hibernate 依赖项更新到版本 4.3.10。我们编写了
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《quarkus实战》系列的第六篇,咱
我是 NGINX 的新手,我正在尝试对我们的 ERP 网络服务器进行负载平衡。我有 3 个网络服务器在由 websphere 提供支持的端口 80 上运行,这对我来说是一个黑盒子: * web01.e
我们想使用 gerrit 进行代码审查,但我们在 webview 中缺少一些设置。 是否可以禁止提交者审查/验证他们自己的 提交? 是否有可能两个审稿人给 +1 一个累积它 到+2,以便可以提交? 谢
配置根据运行模式应用于 AEM 实例。在多个运行模式和多个配置的情况下,AEM 如何确定要选择的配置文件?假设以下配置在 AEM 项目中可用, /apps /myproject - con
我正在使用 Neo4j 服务器。我遇到了负载相对较低的问题。但是,响应时间相当长。我认为为请求提供服务的线程数太少了。有没有办法调整为 HTTP 请求提供服务的线程池的大小。那可能吗? 最佳答案 线程
我在/etc/default/celeryd 中有以下配置 CELERYD_NODES = "worker1 worker2 worker3" CELERYD_CHDIR = "path to pro
Plone 在其页面中显示来 self 的母语(巴西葡萄牙语)的特殊字符。但是,当我使用我创建的 spt 页面时,它会显示转义序列,例如: Educa\xc3\xa7\xc3\xa3o 代替 Educ
我正在尝试开始使用 Emacs/Clojure。安装 emacs 扩展的正确方法是什么。我正在尝试安装以下插件: https://bitbucket.org/kotarak/vimclojure 我已
我有一个简单的 C 项目结构: proj/ src/ docs/ build/ tests/ lib/ 尝试编写合适的 CMake 文件。 到目前为止我的尝试:http://pas
我是一名优秀的程序员,十分优秀!