Cualquier buen Primavera roscar con unos ejemplos TaskExecutor? [cerrado]
-
21-08-2019 - |
Pregunta
Estoy tratando de tener una idea de cómo poner en práctica de roscado en una aplicación Java que utiliza Spring para la gestión de transacciones. He encontrado la sección TaskExecutor en el rel="noreferrer"> y ThreadPoolTaskExecutor parece que podría encajar mis necesidades;
ThreadPoolTaskExecutor
Esta aplicación sólo se puede utilizar en un entorno Java 5, pero también es el más comúnmente utilizado uno en ese entorno. Expone las propiedades del bean para configurar un java.util.concurrent.ThreadPoolExecutor y lo envuelve en un TaskExecutor. Si necesita algo avanzado, tales como ScheduledThreadPoolExecutor, se recomienda que utilice un ConcurrentTaskExecutor lugar.
Sin embargo no tengo idea de cómo hacer para usarlo. He estado buscando un buen ejemplo para un rato ahora sin suerte. Si alguien me puede ayudar lo agradecería.
Solución
Es muy sencillo. La idea es que usted tiene un objeto ejecutor que es un grano, que se pasa en cualquier objeto que quiere despedir a la nueva tarea (en un nuevo hilo). Lo bueno es que se puede modificar el tipo de ejecutor de tareas para usar con sólo cambiar la configuración de la primavera. En el siguiente ejemplo que estoy tomando alguna clase de ejemplo (ClassWithMethodToFire) y envolviéndolo en un objeto Ejecutable para hacer el fuego; también se puede aplicar en realidad Ejecutable en una clase de su propio, y luego en el método de ejecución que le acaba de llamar classWithMethodToFire.run()
.
Este es un ejemplo muy simple.
public class SomethingThatShouldHappenInAThread {
private TaskExecutor taskExecutor;
private ClassWithMethodToFire classWithMethodToFire;
public SomethingThatShouldHappenInAThread(TaskExecutor taskExecutor,
ClassWithMethodToFire classWithMethodToFire) {
this.taskExecutor = taskExecutor;
this.classWithMethodToFire = classWithMethodToFire;
}
public void fire(final SomeParameterClass parameter) {
taskExecutor.execute( new Runnable() {
public void run() {
classWithMethodToFire.doSomething( parameter );
}
});
}
}
Y aquí están los granos de primavera:
<bean name="somethingThatShouldHappenInAThread" class="package.name.SomethingThatShouldHappenInAThread">
<constructor-arg type="org.springframework.core.task.TaskExecutor" ref="taskExecutor" />
<constructor-arg type="package.name.ClassWithMethodToFire" ref="classWithMethodToFireBean"/>
</bean>
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="5" />
<property name="maxPoolSize" value="10" />
<property name="queueCapacity" value="25" />
</bean>