Maison  >  Article  >  Java  >  Partager l'introduction de Spring Batch

Partager l'introduction de Spring Batch

零下一度
零下一度original
2017-06-17 11:52:311866parcourir

Cet article vous présente principalement les informations pertinentes pour démarrer avec Spring Batch. L'introduction dans l'article est très détaillée et a une certaine valeur de référence et d'apprentissage pour tous les amis qui en ont besoin, veuillez suivre l'éditeur pour apprendre ensemble. .

Introduction à SpringBatch :

SpringBatch est un framework de traitement parallèle de données volumineuses. Il est généralement utilisé pour la migration hors ligne des données et du traitement des données. Il prend en charge les transactions, la concurrence, les processus, la surveillance, l'expansion verticale et horizontale, et fournit une gestion unifiée des interfaces et des tâches. SpringBatch est une application développée par SpringSource et Accenture pour unifier le parallèle de l'industrie ; normes de traitement. Fournir aux développeurs un ensemble de cadres qui facilitent le développement.

Adresse officielle : github.com/spring-projects/spring-batch

  • SpringBatch lui-même fournit une nouvelle tentative, Gestion des exceptions, sauter, redémarrer, statistiques de traitement des tâches, gestion des ressources et autres fonctionnalités, telles sont les principales raisons pour lesquelles les développeurs l'apprécient ;

  • SpringBatch est un framework léger de traitement par lots ;

  • La structure SpringBatch est en couches, les stratégies et structures commerciales et de traitement sont séparées ;

  • L'instance en cours d'exécution de la tâchestatut, les données d'exécution et les paramètres seront tous Implémenté dans la base de données ;

Démarrage rapide

pom.xml ajouté


 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-batch</artifactId>
</dependency>

Créer BatchConfig (peut être un autre nom de classe)


@Configuration
@EnableBatchProcessing
public class BatchConfig {
 // tag::readerwriterprocessor[]
 @Bean
 public FlatFileItemReader<Person> flatFileItemReader() {
  FlatFileItemReader<Person> reader = new FlatFileItemReader<>();
  reader.setResource(new ClassPathResource("sample-data.csv"));
  FixedLengthTokenizer fixedLengthTokenizer = new FixedLengthTokenizer();
  reader.setLineMapper(new DefaultLineMapper<Person>() {{
   setLineTokenizer(new DelimitedLineTokenizer() {{
    setNames(new String[]{"firstName", "lastName"});
   }});
   setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
    setTargetType(Person.class);
   }});
  }});
  return reader;
 }
 @Bean
 public JdbcPagingItemReader<Person> jdbcPagingItemReader(DataSource dataSource) {
  JdbcPagingItemReader<Person> reader = new JdbcPagingItemReader<>();
  reader.setDataSource(dataSource);
  reader.setFetchSize(100);
  reader.setQueryProvider(new MySqlPagingQueryProvider() {{
   setSelectClause("SELECT person_id,first_name,last_name");
   setFromClause("from people");
   setWhereClause("last_name=:lastName");
   setSortKeys(new HashMap<String, Order>() {{
    put("person_id", Order.ASCENDING);
   }});
  }});
  reader.setParameterValues(new HashMap<String, Object>() {{
   put("lastName", "DOE");
  }});
  reader.setRowMapper(new BeanPropertyRowMapper<>(Person.class));
  return reader;
 }
 @Bean
 public JdbcBatchItemWriter<Person> jdbcBatchItemWriter(DataSource dataSource) {
  JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<>();
  writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
  writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
  writer.setDataSource(dataSource);
  return writer;
 }
 /*@Bean
 public FlatFileItemWriter<Person> flatFileItemWriter(DataSource dataSource) {
  FlatFileItemWriter<Person> writer = new FlatFileItemWriter<>();
  writer.setAppendAllowed(true);
  writer.setEncoding("UTF-8");
//  writer.set(dataSource);
  return writer;
 }*/
 // end::readerwriterprocessor[]
 // tag::jobstep[]
 @Bean
 public Job importUserJob(JobBuilderFactory jobBuilderFactory, JobCompletionNotificationListener listener, Step step) {
  return jobBuilderFactory.get("importUserJob")
    .incrementer(new RunIdIncrementer())
    .listener(listener)
    .start(step)
    .build();
 }
 @Bean
 public Step step1(StepBuilderFactory stepBuilderFactory, PersonItemProcessor processor, ItemWriter jdbcBatchItemWriter, ItemReader flatFileItemReader) {
  /*CompositeItemProcessor compositeItemProcessor = new CompositeItemProcessor();
  compositeItemProcessor.setDelegates(Lists.newArrayList(processor, processor));*/
  return stepBuilderFactory.get("step1")
    .<Person, Person>chunk(10)
    .reader(flatFileItemReader)
    .processor(processor)
    .writer(jdbcBatchItemWriter)
    .build();
 }
 // end::jobstep[]
}

Architecture en couches de Spring Batch

  • Gestion des politiques d'infrastructure : y compris les nouvelles tentatives d'échec des tâches, la gestion des exceptions, les transactions, les sauts et les entrées et sorties de données (fichiers texte, base de données, Message)

  • Core : Le cœur de springBatch, y compris JobLauch, job, step, etc.

  • Application : Traitement métier, création de tâches, déterminer la méthode d'exécution de la tâche (tâches planifiées, déclenchement manuel, etc.)


Processus d'exécution Spring Batch

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn