新しいスレッドでJPAを使用してデータベースにデータを保存する簡単な解決策はありますか?
私のSpringベースのWebアプリケーションを使用すると、ユーザーはスケジュールされたタスクを管理できます。実行時に、事前定義されたタスクの新しいインスタンスを作成して開始できます。私は春の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);
}
}