我正在使用带有Hibernate的Spring REST,我开发了一个程序,其中数据来自数据库计算,并且它被更新到数据库中的另一个表中。但是我想在一天中的某一天运行这个程序,因为我想在一天中只计算一次结果。我怎么能这样做?
这是我的 DAO 类
@SuppressWarnings({ "unchecked", "rawtypes" })
public List<Result> getPostList() throws Exception {
session = sessionFactory.openSession();
tx = session.beginTransaction();
Criteria cr = session.createCriteria(Post.class);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.sum("val"), "topValue");
projList.add(Projections.groupProperty("userId"), "uid");
cr.addOrder(Order.desc("topValue"));
cr.setProjection(projList);
cr.setResultTransformer(Transformers.aliasToBean(Result.class));
List<Result> postList = cr.list();
// please make sure that you are using the class field name rather than database field name in below query.
String updateHql = "update Result set topValue = :topValue where id = :uid";
Query query = null;
int count = 1;
for(Result result : postList){
query=session.createQuery(updateHql);
// query.setLong("topValue", result.getTopValue());
query.setLong("topValue", count);
query.setLong("uid", result.getUid());
count++;
query.executeUpdate();
session.flush();
}
session.flush();
tx.commit();
return postList;
}
这是我的控制器
@RequestMapping(value = "/posts", method = RequestMethod.GET)
public @ResponseBody
List<Result> getEmployee() {
List<Result> postList = null;
try {
postList = profileService.getPostList();
} catch (Exception e) {
e.printStackTrace();
}
return postList;
}
答案 0 :(得分:3)
http://quartz-scheduler.org/
你需要一个调度程序。您可以配置每天安排的方法,如下面春季所述:
1)在spring config中:
<task:scheduler id="scheduler" pool-size="10" />
<task:executor id="executor" pool-size="10" />
<task:annotation-driven scheduler="scheduler" executor="executor" />
2)启用注释:
<context:component-scan annotation-config="true" base-package="" />
3)使用您想要安排的@Scheduled注释注释方法
@Scheduled(cron="0 0 12 * * ?")
public void scheduledTask(){
}
上面的cron表达式将每天中午12点(中午)安排该方法 某些通用cron表达式的链接:http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger
答案 1 :(得分:0)
您可以考虑使用
答案 2 :(得分:0)
我建议你做一些关于Spring Task Execution and Scheduling的阅读。它有很好的记录。 基本上是:
ThreadPoolTaskScheduler
bean 按照以下方式安排您的任务:
scheduler.schedule(task,new CronTrigger(“* 15 9-17 * * MON-FRI”));