Я хочу немедленно вернуть результат запроса к базе данных, но я хочу запустить другой поток, который выполняет некоторые действия.
Теперь я попробовал с Executor следующим образом:
Executors.newScheduledThreadPool(1).schedule(
() -> fooFunction(),
1, TimeUnit.SECONDS
);
но функция не выполняется после возврата метода.
Полный код:
@Override
@Transactional
public FooDto updateInfo(UpdateTaskDto updateTask) {
// updating the entity
Executors.newScheduledThreadPool(1).schedule(
() -> fooFunction(),
1, TimeUnit.SECONDS
);
return FooDto()
}
Где fooFunction - это просто функция, которая что-то сохраняет в базу данных и возвращает void.
Эта функция updateInfo находится внутри аннотированного класса @Service.
Почему это не работает?
EDIT:
@Transactional
@Override
public update() {
if (hasStartDateChanges || hasEndDateChanges) {
taskExecutor.execute(() -> {
setNotifications(changedTaskDto, NotificationType.TASK_UPDATE_TIME, true, taskEntity.getProject().getCompany().getId(), currentUser);
});
}
}
public void setNotifications(TaskDto task, NotificationType type, boolean visibleForClient, Long companyId, UserDto currentUser) {
ProjectEntity projectEntity = repository.findBy(task.getProjectId());
}