Spring Batch - Okuyucular, Yazarlar ve İşlemciler
Bir Item Reader Verileri belirli bir kaynaktan yay toplu uygulamasına okur, oysa bir Item Writer Spring Batch uygulamasından belirli bir hedefe veri yazar.
Bir Item processorYay yığınına okunan verileri işleyen işleme kodunu içeren bir sınıftır. Uygulama n kayıt okursa, işlemcideki kod her kayıtta çalıştırılacaktır.
Bir chunk alt öğesidir tasklet. Okuma, yazma ve işleme işlemlerini gerçekleştirmek için kullanılır. Bu öğeyi kullanarak okuyucu, yazıcı ve işlemcileri aşağıda gösterildiği gibi bir adımda yapılandırabiliriz.
<batch:job id = "helloWorldJob">
<batch:step id = "step1">
<batch:tasklet>
<batch:chunk reader = "cvsFileItemReader" writer = "xmlItemWriter"
processor = "itemProcessor" commit-interval = "10">
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
Spring Batch, okuyucuların ve yazarların MongoDB, Neo4j, MySQL, XML, flatfile, CSV, vb. Gibi çeşitli dosya sistemlerinden / veritabanlarından veri okumasını ve yazmasını sağlar.
Uygulamanıza bir okuyucu eklemek için, o okuyucu için bir çekirdek tanımlamanız, çekirdek içindeki tüm gerekli özelliklere değerler vermeniz ve id öbek öğesinin özniteliğine bir değer olarak böyle bir fasulye reader (aynısı writer).
Öğe Okuyucu
Verileri okuyan bir adımın (bir toplu işlemin) varlığıdır. Bir ItemReader her seferinde bir öğeyi okur. Spring Batch bir Arayüz sağlarItemReader. Hepsireaders bu arayüzü uygulayın.
Aşağıda, çeşitli kaynaklardan okumak için Spring Batch tarafından sağlanan önceden tanımlanmış ItemReader sınıflarından bazıları verilmiştir.
Okuyucu | Amaç |
---|---|
FlatFIleItemReader | Düz dosyalardan veri okumak için. |
StaxEventItemReader | XML dosyalarından veri okumak için. |
StoredProcedureItemReader | Bir veritabanının saklı yordamlarından verileri okumak için. |
JDBCPagingItemReader | İlişkisel veritabanları veritabanından veri okumak için. |
MongoItemReader | MongoDB'den veri okumak için. |
Neo4jItemReader | Neo4jItemReader'dan veri okumak için. |
Yapılandırmamız gerekiyor ItemReadersfasulyeleri yaratarak. Aşağıdaki bir örnekStaxEventItemReader XML dosyasındaki verileri okur.
<bean id = "mysqlItemWriter"
class = "org.springframework.batch.item.xml.StaxEventItemWriter">
<property name = "resource" value = "file:xml/outputs/userss.xml" />
<property name = "marshaller" ref = "reportMarshaller" />
<property name = "rootTagName" value = "Tutorial" />
</bean>
<bean id = "reportMarshaller"
class = "org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name = "classesToBeBound">
<list>
<value>Tutorial</value>
</list>
</property>
</bean>
Görüldüğü gibi, konfigürasyon yaparken gerekli okuyucunun ilgili sınıf adını belirtmemiz ve gerekli tüm özelliklere değer sağlamamız gerekiyor.
ItemWriter
Öğesinin unsurudur stepveri yazan bir toplu işlem. Bir ItemWriter her seferinde bir öğe yazar. Spring Batch bir Arayüz sağlarItemWriter. Tüm yazarlar bu arayüzü uygular.
Aşağıda, çeşitli kaynaklardan okumak için Spring Batch tarafından sağlanan önceden tanımlanmış ItemWriter sınıflarından bazıları verilmiştir.
yazar | Amaç |
---|---|
FlatFIleItemWriter | Verileri düz dosyalara yazmak için. |
StaxEventItemWriter | XML dosyalarına veri yazmak için. |
StoredProcedureItemWriter | Bir veritabanının saklı yordamlarına veri yazmak için. |
JDBCPagingItemWriter | İlişkisel veritabanları veritabanına veri yazmak. |
MongoItemWriter | MongoDB'ye veri yazmak için. |
Neo4jItemWriter | Neo4j'e veri yazmak için. |
Aynı şekilde, fasulyeleri oluşturarak ItemWriters'ı yapılandırmamız gerekiyor. Aşağıdaki bir örnekJdbcCursorItemReader Verileri bir MySQL veritabanına yazar.
<bean id = "dbItemReader"
class = "org.springframework.batch.item.database.JdbcCursorItemReader" scope = "step">
<property name = "dataSource" ref = "dataSource" />
<property name = "sql" value = "select * from tutorialsdata" />
<property name = "rowMapper">
<bean class = "TutorialRowMapper" />
</property>
</bean>
Öğe İşlemci
ItemProcessor: Verileri işlemek için bir Öğe İşlemci kullanılır. Verilen öğe geçerli olmadığında geri dönernullaksi takdirde verilen öğeyi işler ve işlenen sonucu döndürür. ArayüzItemProcessor<I,O> işlemciyi temsil eder.
Tasklet class - hayır olduğunda reader ve writerbir Görevlet, SpringBatch için bir işlemci görevi görür. Yalnızca tek bir görevi işler.
Arayüzü uygulayarak özel bir ürün işlemcisi tanımlayabiliriz ItemProcessor paketin org.springframework.batch.item.ItemProcessor. Bu ItemProcessor sınıfı bir nesneyi kabul eder ve verileri işler ve işlenen verileri başka bir nesne olarak döndürür.
Bir toplu işlemde, eğer "n"kayıtlar veya veri öğeleri okunur, daha sonra her kayıt için verileri okur, işler ve verileri yazıcıya yazar. Verileri işlemek için, geçen işlemciye aktarılır.
Örneğin, belirli bir PDF belgesini yüklemek, yeni bir sayfa oluşturmak, veri öğesini PDF'ye tablo biçiminde yazmak için kod yazdığınızı varsayalım. Bu uygulamayı çalıştırırsanız, XML belgesindeki tüm veri öğelerini okur, bunları MySQL veritabanında saklar ve bunları verilen PDF belgesinde ayrı sayfalarda yazdırır.
Misal
Aşağıda örnek bir ItemProcessor sınıfı verilmiştir.
import org.springframework.batch.item.ItemProcessor;
public class CustomItemProcessor implements ItemProcessor<Tutorial, Tutorial> {
@Override
public Tutorial process(Tutorial item) throws Exception {
System.out.println("Processing..." + item);
return item;
}
}