Aufrufen von @ Transactional-Methoden aus einem anderen Thread (ausführbar)

Gibt es eine einfache Lösung zum Speichern von Daten in einer Datenbank mithilfe von JPA in einem neuen Thread?

Mit meiner auf Spring basierenden Webanwendung können Benutzer geplante Aufgaben verwalten. Zur Laufzeit kann er neue Instanzen vordefinierter Aufgaben erstellen und starten. Ich benutze den TaskScheduler von spring und alles funktioniert gut.

Aber ich muss das boolesche Ergebnis jeder abgefeuerten Aufgabe in der Datenbank speichern. Wie kann ich das machen?

EDIT: Ich muss meine Frage verallgemeinern: Ich muss eine Methode für meine @Service-Klasse von Tasks aufrufen. Weil das Ergebnis der Aufgabe vor dem Speichern in der Datenbank "verarbeitet" werden muss.

EDIT 2: Vereinfachte Version meines problematischen Codes kommt hier. Wenn saveTaskResult () vom Scheduler aufgerufen wird, wird die Nachricht ausgedruckt, aber nichts in db gespeichert. Aber wenn ich saveTaskResult () vom Controller aus aufrufe, wird der Datensatz korrekt in der Datenbank gespeichert.

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

}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage