【发布时间】:2014-12-09 19:00:38
【问题描述】:
我正在尝试在某些时间间隔内执行一些数据库插入/更新查询。
为了实现这一点,我决定使用 Akka Actor 系统中内置的 Playframework。
我的课有方法:
public class Global extends GlobalSettings {
@Override
public void onStart(Application application) {
Akka.system().scheduler().schedule(
Duration.create(1, TimeUnit.SECONDS), // start task delay
Duration.create(24, TimeUnit.HOURS), // between task instance delay
//Duration.create(24, TimeUnit.HOURS), // between task instance delay
new Runnable() {
@Override
public void run() {
JPA.withTransaction(
ImportCrmData.start()
);
}
},
Akka.system().dispatcher()
);
以及actor系统调用的方法:
public class ImportCrmData extends Controller {
@Transactional
public static void start() {
List<Customer> customersToUpdate = CustomerCRM.importCrmData();
for(Customer c: customersToUpdate) {
c.toDataBase();
}
}
}
我在编译时遇到错误:
[error] app/modules/common/app/Global.java:39: error: 'void' type not allowed here ImportCrmData.start()
我知道问题的发生是因为 JPA.withTransaction() 要求我从ImportCrmData.start() 返回Callback0 或Function0<>,但我不知道该怎么做。
我的方法就是做this.persist。为什么我还要从那里返回一些东西?
【问题讨论】:
标签: java jpa transactions akka actor