91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用SpringBoot和SpringBatch

發布時間:2021-05-17 17:18:19 來源:億速云 閱讀:147 作者:Leah 欄目:編程語言

如何使用SpringBoot和SpringBatch ?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

什么是Spring Batch

Spring Batch 是一個輕量級的、完善的批處理框架,旨在幫助企業建立健壯、高效的批處理應用。Spring Batch是Spring的一個子項目,使用Java語言并基于Spring框架為基礎開發,使的已經使用 Spring 框架的開發者或者企業更容易訪問和利用企業服務。

Spring Batch 提供了大量可重用的組件,包括了日志、追蹤、事務、任務作業統計、任務重啟、跳過、重復、資源管理。對于大數據量和高性能的批處理任務,Spring Batch 同樣提供了高級功能和特性來支持,比如分區功能、遠程功能。總之,通過 Spring Batch 能夠支持簡單的、復雜的和大數據量的批處理作業。

Spring Batch 使用

我們首先配置Spring Batch 在Spring Boot 中的使用,數據庫用的是mysql,pom文件如下,因為Spring Boot 中的Spring Batch 包含 hsqsldb 所以我們將其去除

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-batch</artifactId>
      <exclusions> <!-- 注意這里-->
        <exclusion>
          <groupId>org.hsqldb</groupId>
          <artifactId>hsqldb</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.21</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>

配置好我們需要的實體類。頁面就不展示了。

如果有數據校驗添加的話那么我們需要配置自定義的檢驗器。若果沒有課略過該步驟

public class CsvBeanValidator<T> implements Validator<T>,InitializingBean {
  private javax.validation.Validator  validator;
  @Override
  public void validate(T value) throws ValidationException {
    Set<ConstraintViolation<T >> constraintViolations=validator.validate(value);
    if(constraintViolations.size()>0){
      StringBuilder message=new StringBuilder();
      for(ConstraintViolation<T> constraintViolation:constraintViolations){
        message.append(constraintViolation.getMessage() +"\n");
      }
      throw new ValidationException(message.toString());
    }
  }
  //在這里我們使用的是JSR-303校驗數據,在此進行初始化
  @Override
  public void afterPropertiesSet() throws Exception { 
    ValidatorFactory validatorFactory= Validation.buildDefaultValidatorFactory();
    validator=validatorFactory.usingContext().getValidator();
  }
}
public class CsvItemProcessor extends ValidatingItemProcessor<Person> {
  @Override
  public Person process(Person item) throws ValidationException {
     super.process(item); // 在這里啟動 然后才會調用我們自定義的校驗器,否則不能通過 。
     if (item.getNation().equals("漢族")){
       item.setName("01");
     }else{
       item.setNation("02");
     }
     return item;
  }
}

進行job任務監聽 自定義類實現JobExecutionListener 即可

long startTime;
 long endTime;
 @Override
 public void beforeJob(JobExecution jobExecution) {
   startTime = System.currentTimeMillis();
   System.out.println("任務處理開始");
 }
 @Override
 public void afterJob(JobExecution jobExecution) {
   endTime = System.currentTimeMillis();
   System.out.println("耗時多長時間:" + (endTime - startTime) + "ms");
   System.out.println("任務處理結束");
 }

進行Spring Batch 的注入 方法有xml文件注入bean ,在這里選擇java注入

@Configuration
@EnableBatchProcessing //開啟批處理
public class CsvBatchConfig {
  /**1 首先我們通過 FlatFileItemReader 讀取我們需要的文件 通過setResource來實現
   * 2 設置map 在這里通過先設置解析器 setLineTokenizer 來解析我們csv文件中的數   據
   * 3 setFieldSetMapper 將我們需要的數據轉化為我們的實體對象 存儲
   * 4 如果想 跳過前面的幾行 需要使用setLinesToSkip就可以實現 
   */ 
 @Bean
 public ItemReader<Person> reader() throws Exception {
   FlatFileItemReader<Person> reader = new FlatFileItemReader<Person>(); //1
   reader.setResource(new ClassPathResource("people.csv")); //2
     reader.setLineMapper(new DefaultLineMapper<Person>() {{ //3
       setLineTokenizer(new DelimitedLineTokenizer() {{
         setNames(new String[] { "name","age", "nation" ,"address"});
       }});
       setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
         setTargetType(Person.class);
       }});
     }});
       reader.setLinesToSkip(3); 
     return reader;
 }
 @Bean
 public ItemProcessor<Person, Person> processor() {
   CsvItemProcessor processor = new CsvItemProcessor(); //1
   processor.setValidator(csvBeanValidator()); //2
   return processor;
 }
   /** 
    *寫入數據到數據庫中
    * 1執行的sql 語句 2 設置數據源 
     */
 @Bean
 public ItemWriter<Person> writer(DataSource dataSource) {//1
   JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<Person>(); //2
   writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<Person>());
   String sql = "insert into person " + "(id,name,age,nation,address) "
       + "values(hibernate_sequence.nextval, :name, :age, :nation,:address)";
   writer.setSql(sql); //3
   writer.setDataSource(dataSource);
   return writer;
 }
  // 作業的倉庫 就是設置數據源
 @Bean
 public JobRepository jobRepository(DataSource dataSource, PlatformTransactionManager transactionManager)
     throws Exception {
   JobRepositoryFactoryBean jobRepositoryFactoryBean = new JobRepositoryFactoryBean();
   jobRepositoryFactoryBean.setDataSource(dataSource);
   jobRepositoryFactoryBean.setTransactionManager(transactionManager);
   jobRepositoryFactoryBean.setDatabaseType("mysql");
   return jobRepositoryFactoryBean.getObject();
 }
   //調度器 使用它來執行 我們的批處理
 @Bean
 public SimpleJobLauncher jobLauncher(DataSource dataSource, PlatformTransactionManager transactionManager)
     throws Exception {
   SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
   jobLauncher.setJobRepository(jobRepository(dataSource, transactionManager));
   return jobLauncher;
 }
   //將監聽器加入到job中
 @Bean
 public Job importJob(JobBuilderFactory jobs, Step s1) {
   return jobs.get("importJob")
       .incrementer(new RunIdIncrementer())
       .flow(s1) //1
       .end()
       .listener(csvJobListener()) //2
       .build();
 }
   //步驟綁定 reader 與writer 一次性處理65000條記錄
 @Bean
 public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader<Person> reader, ItemWriter<Person> writer,
     ItemProcessor<Person,Person> processor) {
   return stepBuilderFactory
       .get("step1")
       .<Person, Person>chunk(65000) //1
       .reader(reader) //2
       .processor(processor) //3
       .writer(writer) //4
       .build();
 }
 @Bean
 public CsvJobListener csvJobListener() {
   return new CsvJobListener();
 }
 @Bean
 public Validator<Person> csvBeanValidator() {
   return new CsvBeanValidator<Person>();
 }
}

在配置文件中 啟動自動執行批處理

spring.batch.job.names = job1,job2 #啟動時要執行的Job,默認執行全部Job

spring.batch.job.enabled=true #是否自動執行定義的Job,默認是

spring.batch.initializer.enabled=true #是否初始化Spring Batch的數據庫,默認為是

spring.batch.schema=

spring.batch.table-prefix= #設置SpringBatch的數據庫表的前綴

springboot是什么

springboot一種全新的編程規范,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程,SpringBoot也是一個服務于框架的框架,服務范圍是簡化配置文件。

關于如何使用SpringBoot和SpringBatch 問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐业县| 崇阳县| 宣威市| 郸城县| 阆中市| 商水县| 象州县| 清水河县| 阿巴嘎旗| 晴隆县| 松江区| 斗六市| 新兴县| 九台市| 沙洋县| 响水县| 肥城市| 自治县| 凌源市| 明水县| 新田县| 柘城县| 汝阳县| 韶关市| 阳山县| 岑溪市| 郯城县| 长春市| 高密市| 会宁县| 永德县| 沐川县| 太湖县| 涞水县| 灌阳县| 孙吴县| 大足县| 陵川县| 盐亭县| 河北省| 济源市|