Wywoływanie metod @Transactional z innego wątku (Runnable)

Czy istnieje proste rozwiązanie do zapisywania danych w bazie danych przy użyciu JPA w nowym wątku?

Moja aplikacja internetowa na wiosnę pozwala użytkownikowi zarządzać zaplanowanymi zadaniami. W czasie wykonywania może tworzyć i uruchamiać nowe wystąpienia predefiniowanych zadań. Używam sprężynowego TaskSchedulera i wszystko działa dobrze.

Ale muszę zapisać wynik logiczny każdego uruchomionego zadania w bazie danych. Jak mogę to zrobić?

EDYCJA: Muszę uogólnić moje pytanie: muszę wywołać metodę w mojej klasie @Service z zadań. Ponieważ wynik zadania musi być „przetworzony” przed zapisaniem w bazie danych.

EDIT 2: Uproszczona wersja mojego problematycznego kodu jest dostępna tutaj. Gdy saveTaskResult () jest wywoływany z programu planującego, komunikat jest drukowany, ale nic nie jest zapisywane w db. Ale ilekroć wywołam saveTaskResult () z kontrolera, zapis jest poprawnie zapisywany w bazie danych.

@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);
    }

}

questionAnswers(2)

yourAnswerToTheQuestion