从另一个线程调用@Transactional方法(可运行)
有没有简单的解决方案可以在新线程中使用JPA将数据保存到数据库中?
我的基于Spring的Web应用程序允许用户管理计划的任务。在运行时,他可以创建和启动预定义任务的新实例。我正在使用Spring的TaskScheduler,一切正常。
但是我需要将每个触发任务的布尔结果保存到数据库中。我该怎么做?
编辑:我必须概括我的问题:我需要从任务中调用@Service类上的方法。因为任务结果在保存到数据库之前必须“处理”。
编辑2:我的问题代码的简化版本来到这里。当从调度程序调用 saveTaskResult() 时,将打印出消息,但不会将任何内容保存到 db 中。但是每当我从控制器调用 saveTaskResult() 时,记录就会正确保存到数据库中。
@Service
public class DemoService {
@Autowired
private TaskResultDao taskResultDao;
@Autowired
private TaskScheduler scheduler;
public void scheduleNewTask() {
scheduler.scheduleWithFixedDelay(new Runnable() {
public void run() {
// do some action here
saveTaskResult(new TaskResult("result"));
}
}, 1000L);
}
@Transactional
public void saveTaskResult(TaskResult result) {
System.out.println("saving task result");
taskResultDao.persist(result);
}
}