Domanda

Sto cercando di ottenere una maniglia su come implementare la filettatura in un'applicazione Java che utilizza Primavera per la gestione delle transazioni.Ho trovato il TaskExecutor sezione Primavera documentazione, e ThreadPoolTaskExecutor sembra si adatti alle mie esigenze;

ThreadPoolTaskExecutor

Questa implementazione può essere utilizzato solo in Java 5 ambiente, ma è anche quello più comunemente usato in tale ambiente.Espone la proprietà bean per la configurazione di java.util.simultanee.ThreadPoolExecutor e lo avvolge in un TaskExecutor.Se hai bisogno di qualcosa di avanzato come un ScheduledThreadPoolExecutor, si consiglia di utilizzare un ConcurrentTaskExecutor invece.

Tuttavia non ho idea di come fare uso di esso.Ho cercato per buoni esempi per un po ' ora senza fortuna.Se qualcuno mi può aiutare sarei grato.

È stato utile?

Soluzione

E ' abbastanza semplice.L'idea è che si dispone di un esecutore oggetto di un fagiolo, che è passata in un qualunque oggetto vuole fuoco per il nuovo compito (in un nuovo thread).La cosa bella è che è possibile modificare il tipo di attività che l'esecutore di utilizzare solo cambiando la Molla config.Nell'esempio riportato di seguito mi sto prendendo qualche esempio di classe (ClassWithMethodToFire) e avvolgendolo in un oggetto Praticabile per fare il fuoco;si potrebbe anche implementare effettivamente Praticabile in una classe di proprio, e poi nel metodo execute devi solo chiamare classWithMethodToFire.run().

Ecco un esempio molto semplice.

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

E qui sono i fagioli in 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top