Primavera de arranque resultado inmediato retorno no puede ejecutar la función

user1007522:

Quiero volver inmediatamente el resultado de una consulta de base de datos, pero quiero empezar un hilo diferente, que hace algunas cosas.

Ahora he intentado con un ejecutor de esta manera:

  Executors.newScheduledThreadPool(1).schedule(
        () -> fooFunction(),
        1, TimeUnit.SECONDS
    );

pero la función no se ejecuta después de que el método devuelve.

código completo:

@Override
@Transactional
public FooDto updateInfo(UpdateTaskDto updateTask) {
       // updating the entity

    Executors.newScheduledThreadPool(1).schedule(
        () -> fooFunction(),
        1, TimeUnit.SECONDS
    );

   return FooDto()
}

Donde fooFunction es sólo una función que ahorra algo a la base de datos y devuelve void.

Esta función es updateInfo dentro de una clase @Service anotada.

¿Por qué esto no funciona?

EDITAR:

@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());
}
Simon Martinelli:

Simplemente puede inyectar el TaskExecutor o TaskScheduler y utilizarla:

@RestController
@RequestMapping("/demo")
public static class DemoRestController {

    private final TaskExecutor taskExecutor;

    public DemoRestController(TaskExecutor taskExecutor) {
        this.taskExecutor = taskExecutor;
    }

    @GetMapping
    public String get() {
        taskExecutor.execute(() -> {
            System.out.println("Hello from Task");
        });
        return "hello";
    }
}

A partir de los documentos:

  1. Ejecución de tareas y programación En ausencia de un bean Ejecutor en el contexto, la primavera de arranque auto-configura un ThreadPoolTaskExecutor con los valores iniciales adecuados que se pueden asociar automáticamente a la ejecución asíncrona de la tarea (@EnableAsync) y el procesamiento de solicitud asincrónica Spring MVC.

Fuente: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-task-execution-scheduling

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=337844&siteId=1
Recomendado
Clasificación