2016-06-20 16 views

Antwort

1

Wie Sie sagen, egal ob JobContext oder StepContext, ihre Methode setTransientUserData(Object) kann nur 1 Variable übergeben und das ist nicht praktikabel. Vielleicht sind sie einfach nicht für eine komplexe Nutzung gedacht, da bin ich mir nicht sicher.

Sie können jedoch Ihren eigenen Kontext definieren, um Variablen zu speichern. Machen Sie es Singleton, wenn Sie für jede Klasse diese Instanz gemeinsam nutzen möchten:

import javax.inject.Named; 
import javax.inject.Singleton; 

@Named 
@Singleton 
public class MyContext { 

    private int rowCount; 
    private Map<String, String> params; 
    // or other things ... 

} 

Dann Sie Ihre individuelle Kontextklasse MyContext in Ihrem ItemWriter verwenden können, StepListener über CDI:

public class MyItemWriter implements ItemWriter { 

    @Inject 
    private MyContext myContext; 

    // then use it in your preferred method 
} 

Doch wie Sie Habe in der vorherigen Frage Schritt-Partitionen erwähnt, dein Job läuft wahrscheinlich in Multi-Thread. Sie sollten sich des Nebenläufigkeitsproblems bewusst sein: Sie müssen die richtige Datenstruktur für Attribute in MyContext verwenden.

0

setTransientUserData (Objekt) sollte ausreichen, das Objekt wird wie gewünscht aufgebaut. Sie können ein komplexeres Objekt erstellen, das viele andere Objekte enthält.