Вызов методов @Transactional из другого потока (Runnable)

Есть ли простое решение для сохранения данных в базе данных с использованием JPA в новом потоке?

Веб-приложение My Spring позволяет пользователю управлять запланированными задачами. Во время выполнения он может создавать и запускать новые экземпляры предопределенных задач. Я использую Spring TaskScheduler, и все работает хорошо.

Но мне нужно сохранить логический результат каждой запущенной задачи в базу данных. Как я могу это сделать?

РЕДАКТИРОВАТЬ :Я должен обобщить свой вопрос :Мне нужно вызвать метод моего класса @Service из задач. Потому что результат задачи должен быть «обработан» перед сохранением в базе данных.

РЕДАКТИРОВАТЬ 2 :Упрощенная версия моего проблемного кода здесь. Когда saveTaskResult ()вызывается из планировщика, сообщение распечатывается, но ничего не сохраняется в БД. Но всякий раз, когда я вызываю 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);
    }

}
16
задан DataNucleus 1 July 2012 в 08:45
поделиться