精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBatch高階應(yīng)用:大數(shù)據(jù)批處理框架實(shí)戰(zhàn)指南

開發(fā) 前端
配置Job,Job是封裝整個批處理流程的實(shí)體。在 Spring Batch 中,Job只是Step實(shí)例的容器。它將邏輯上屬于一個流程的多個步驟組合在一起,并允許對所有步驟的全局屬性(如可重啟性)進(jìn)行配置。

本篇文章主要內(nèi)容:通過Spring Batch從一個庫中讀取數(shù)據(jù)進(jìn)過處理后寫入到另外一個庫中。

1. 環(huán)境準(zhǔn)備

1.1 引入依賴

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

2.2 配置Job

配置Job啟動器

@Bean
JobLauncher userJobLauncher(JobRepository userJobRepository) {
  SimpleJobLauncher jobLauncher = new SimpleJobLauncher() ;
  jobLauncher.setJobRepository(userJobRepository) ;
  return jobLauncher ;
}

配置任務(wù)Repository存儲元信息

@Bean
JobRepository userJobRepository(DataSource dataSource, PlatformTransactionManager transactionManager) {
  JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean() ;
  factory.setDatabaseType("mysql") ;
  factory.setTransactionManager(transactionManager) ;
  factory.setDataSource(dataSource) ;
  try {
    factory.afterPropertiesSet() ; 
    return factory.getObject() ;
  } catch (Exception e) {
    throw new RuntimeException(e) ;
  }
}

配置ItemReader讀取器

@Bean
ItemReader<User> userReader(JobOperator jobOperator) throws Exception {
  JpaPagingItemReaderBuilder<User> builder = new JpaPagingItemReaderBuilder<>() ;
  builder.entityManagerFactory(entityManagerFactory) ;
  // 每次分頁查詢多少條數(shù)據(jù)
  builder.pageSize(10) ;
  builder.queryString("select u from User u where u.uid <= 50") ;
  builder.saveState(true) ;
  builder.name("userReader") ;
  return builder.build() ;
}

配置數(shù)據(jù)源,該數(shù)據(jù)源是用來寫入操作的

public DataSource dataSource() {
  HikariDataSource dataSource = new HikariDataSource() ;
  dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/testjpa?serverTimezone=GMT%2B8&useSSL=false") ;
  dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver") ;
  dataSource.setUsername("root") ;
  dataSource.setPassword("xxxooo") ;
  return dataSource ;
}

配置ItemWriter用來寫入操作(當(dāng)前庫的數(shù)據(jù)寫入到另外一個庫,上面的數(shù)據(jù)源)

@Bean
ItemWriter<User> userWriter() {
  // 通過JDBC批量處理
  JdbcBatchItemWriterBuilder<User> builder = new JdbcBatchItemWriterBuilder<>() ;
  DataSource dataSource = dataSource() ;
  builder.dataSource(dataSource) ;
  builder.sql("insert into st (id, name, sex, mobile, age, birthday) values (?, ?, ?, ?, ?, ?)") ;
  builder.itemPreparedStatementSetter(new ItemPreparedStatementSetter<User>() {
    @Override
    public void setValues(User item, PreparedStatement ps) throws SQLException {
      ps.setInt(1, item.getUid()) ;
      ps.setString(2, item.getName()) ;
      ps.setString(3, item.getSex()) ;
      ps.setString(4, item.getMobile()) ;
      ps.setInt(5, item.getAge()) ;
      ps.setObject(6, item.getBirthday()) ;
    }
  }) ;
  return builder.build() ;
}

配置ItemProcessor處理器,數(shù)據(jù)從當(dāng)前庫讀取處理后經(jīng)過處理后再寫入另外的庫中

@Bean
ItemProcessor<User, User> userProcessor() {
  return new ItemProcessor<User, User>() {
    @Override
    public User process(User item) throws Exception {
      System.out.printf("%s - 開始處理數(shù)據(jù):%s%n", Thread.currentThread().getName(), item.toString()) ;
      // 模擬耗時操作
      TimeUnit.SECONDS.sleep(1) ;
      // 在這里你可以對數(shù)據(jù)進(jìn)行相應(yīng)的處理。
      return item ;
    }
  } ;
}

配置Step將ItemReader、ItemProcessor、ItemWriter串聯(lián)在一起。

@Bean
Step userStep1(ItemReader<User> userReader, ItemProcessor<User, User> userProcessor, ItemWriter<User> userWriter) {
  return steps.get("userStep1")
    .<User, User>chunk(5)
    .reader(userReader)
    .processor(userProcessor)
    .writer(userWriter)
    .build() ;
}

配置Job,Job是封裝整個批處理流程的實(shí)體。在 Spring Batch 中,Job只是Step實(shí)例的容器。它將邏輯上屬于一個流程的多個步驟組合在一起,并允許對所有步驟的全局屬性(如可重啟性)進(jìn)行配置。作業(yè)配置包含:

  • 簡單的工作名稱。
  • Step實(shí)例的定義和排序。
  • Job是否可重新啟動。
@Bean
Job userJob(Step userStep1, Step userStep2) {
  return jobs.get("userJob").start(userStep1).build();
}

以上是Spring Batch定義配置一個Job所需的核心組件。接下來會以上面的基礎(chǔ)配置進(jìn)行高階知識點(diǎn)進(jìn)行介紹。

2. 高階配置管理

2.1 通過Controller接口啟動Job

@RequestMapping("/userJob")
public class UserJobController {
  @Resource
  private JobLauncher userJobLauncher ;
  @GetMapping("/start")
  public Object start() throws Exception {
    JobParameters jobParameters = new JobParameters() ;
    this.userJobLauncher.run(userJob, jobParameters) ;
    return "started" ;
  }
}

通過JobLauncher#run方法啟動Job。當(dāng)你調(diào)用該接口時,你會發(fā)現(xiàn)接口一直不會返回,一直阻塞,下圖是Job的啟動序列

圖片圖片

根據(jù)上圖能知道,當(dāng)你調(diào)用run方法后,會等待整個Job退出狀態(tài)為FINISHED或者FAILED后才能結(jié)束。所以,你需要異步完成,以便 SimpleJobLauncher 立即返回給調(diào)用者。而正確的序列應(yīng)該是如下:

圖片圖片

上圖通過異步方式啟動Job序列。

2.2 異步啟動Job

@Bean
TaskExecutor taskExecutor() {
  ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor() ;
  taskExecutor.setThreadNamePrefix("spring_batch_launcher") ;
  taskExecutor.setCorePoolSize(10) ;
  taskExecutor.setMaxPoolSize(10) ;
  taskExecutor.initialize() ; 
  return taskExecutor ;
}
@Bean
JobLauncher userJobLauncher(JobRepository userJobRepository) {
  SimpleJobLauncher jobLauncher = new SimpleJobLauncher() ;
  jobLauncher.setJobRepository(userJobRepository) ;
  jobLauncher.setTaskExecutor(taskExecutor()) ;
  return jobLauncher ;
}

通過上面配置后,Job啟動將是異步的會直接返回JobExecution。

2.3 重啟Job

當(dāng)一個Job正在執(zhí)行,由于斷電或者強(qiáng)制終止了程序。當(dāng)程序恢復(fù)后你希望能夠接著程序終止前的進(jìn)度繼續(xù)執(zhí)行,這時候你需要進(jìn)行如下的操作(本人沒有發(fā)現(xiàn)有什么API能夠操作的,可能文檔沒看仔細(xì))。

當(dāng)程序非正常終止是,下面兩張表的狀態(tài)都是STARTED,END_TIME為null

batch_job_execution表

圖片圖片

batch_step_execution表

圖片圖片

想要重新啟動必須將上面的狀態(tài)修改為STOPPED,END_TIME字段設(shè)置上值(是什么值無所謂)。

然后我們就可以繼續(xù)使用上面的Controller接口啟動任務(wù)繼續(xù)執(zhí)行了。

2.4 多線程執(zhí)行Step

為了加快程序的執(zhí)行,我們可以為Step配置線程池

@Bean
Step userStep1(ItemReader<User> userReader, ItemProcessor<User, User> userProcessor, ItemWriter<User> userWriter) {
  return steps.get("userStep1")
    .<User, User>chunk(5)
    .reader(userReader)
    .processor(userProcessor)
    .writer(userWriter)
    // 配置線程池
    .taskExecutor(taskExecutor())
    .build() ;
}

注意:Step中使用的任何池化資源(如數(shù)據(jù)源)都可能對并發(fā)性設(shè)置限制。請確保這些資源池至少與步驟中所需的并發(fā)線程數(shù)一樣大。

通過上面配置線程池后,你將在控制臺看到如下輸出。

圖片圖片

默認(rèn)將有4個線程同時進(jìn)行處理。可以通過如下配置進(jìn)行調(diào)整

@Bean
Step userStep1(ItemReader<User> userReader, ItemProcessor<User, User> userProcessor, ItemWriter<User> userWriter) {
  return steps.get("userStep1")
      // ...
      // 節(jié)流限制10,這里配置的大小應(yīng)該與你的數(shù)據(jù)庫連接池大小及使用的線程池核心線程數(shù)一致。
      .throttleLimit(10)
      .build() ;
}

2.5 重復(fù)啟動Job

要想重復(fù)啟動Job,我們可以在啟動Job時設(shè)置不同的JobParameters參數(shù),只要參數(shù)不同那么就可以重復(fù)的啟動Job。如下示例:

@GetMapping("/start/{page}")
public Object start(@PathVariable("page") Long page) throws Exception {
  Map<String, JobParameter> parameters = new HashMap<>() ;
  // 每次設(shè)置的參數(shù)值不同即可。
  parameters.put("page", new JobParameter(page)) ;
  JobParameters jobParameters = new JobParameters(parameters) ;
  this.userJobLauncher.run(userJob, jobParameters) ;
  return "started" ;
}

以上是本篇文章的全部內(nèi)容,希望對你有幫助。

責(zé)任編輯:武曉燕 來源: Spring全家桶實(shí)戰(zhàn)案例源碼
相關(guān)推薦

2024-12-27 14:45:59

2023-08-22 08:01:42

SpringBatch事務(wù)管理

2017-01-12 14:50:15

大數(shù)據(jù)Spring Batc框架

2012-02-20 09:49:42

ibmdw

2016-11-15 09:44:21

大數(shù)據(jù)批處理流處理

2022-08-02 20:47:38

Spring框架應(yīng)用程序

2015-06-25 13:06:48

大數(shù)據(jù)從選擇到應(yīng)用

2025-07-29 02:00:00

2022-03-07 14:39:01

前端框架批處理

2016-12-18 15:03:57

Python Scikit Lea數(shù)據(jù)

2020-10-26 07:05:02

大數(shù)據(jù)管道編排編排框架

2018-04-03 10:33:15

大數(shù)據(jù)

2017-09-06 17:05:54

大數(shù)據(jù)處理流程處理框架

2022-03-01 08:40:34

StormHadoop批處理

2016-12-20 16:07:13

Python數(shù)據(jù)預(yù)處理

2025-07-10 00:25:00

2019-05-29 10:42:06

大數(shù)據(jù)IT人工智能

2018-12-04 15:32:09

數(shù)據(jù)處理大數(shù)據(jù)數(shù)據(jù)分析

2018-11-05 15:15:38

大數(shù)據(jù)流式數(shù)據(jù)互聯(lián)網(wǎng)

2017-09-18 17:59:23

Hadoop數(shù)據(jù)分析
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产欧美一区二区精品性色超碰 | 久久精品日韩一区二区三区| 91国内在线视频| 久久久视频6r| 亚洲人妖av一区二区| 亚洲成人中文字幕| aaaaaa亚洲| 黄av在线免费观看| 久久久美女毛片| 91一区二区三区| 国产亚洲第一页| av日韩在线播放| 欧美亚洲国产bt| 日本中文字幕在线视频观看| 亚洲国产剧情在线观看| 激情综合中文娱乐网| 亚洲天堂成人在线| 国产精品成人一区| 国产精品夜夜夜爽张柏芝| 黄瓜视频在线免费观看| 欧美日本一区| 俺去了亚洲欧美日韩| 日韩福利视频在线| 国产精品一品| 成人免费毛片嘿嘿连载视频| 国产精品久久久久久一区二区 | 日韩电影精品| 欧美午夜片在线免费观看| 一级特黄妇女高潮| 思思99re6国产在线播放| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产精品77777| 蜜臀久久99精品久久久无需会员 | 久久久久久久久久美女| 国产伦精品一区二区三区照片| 国产精品视频久久久久久久| 欧美在线黄色| 久久成人免费视频| 永久免费未视频| 久久视频在线| 精品国产凹凸成av人导航| 成人久久久久久久久| 一卡二卡在线观看| 久久一二三四| 国产成人精品综合久久久| 青青草成人av| 国产日韩欧美三区| 日韩有码片在线观看| 中文字幕在线观看免费高清| 精品视频91| 亚洲永久在线观看| 欧美亚洲另类小说| 9色国产精品| 久久久爽爽爽美女图片| 国产精品无码永久免费不卡| 欧美成人一二区| 波多野结衣中文一区| 97av自拍| 欧美性受xxxx狂喷水| 成人v精品蜜桃久久一区| 国产九色精品| 免费高清不卡av| 精品国产不卡一区二区三区| 久久久久狠狠高潮亚洲精品| 国产传媒在线| 欧美视频一区二区三区…| 亚洲图片都市激情| 免费观看在线黄色网| 国产精品理论片在线观看| 亚洲日本欧美在线| 99福利在线| 亚洲一区二区免费视频| 霍思燕三级露全乳照| 大胆人体一区二区| 欧美性受极品xxxx喷水| 欧美不卡在线播放| 好吊色一区二区| 不卡影院免费观看| 蜜桃臀一区二区三区| 91精东传媒理伦片在线观看| 激情五月激情综合网| 亚洲自拍小视频免费观看| 丰满岳乱妇国产精品一区| 97久久精品人人做人人爽50路| 午夜精品一区二区三区在线播放| 肉色超薄丝袜脚交69xx图片| 九九亚洲精品| 中文字幕亚洲综合久久筱田步美| 一本色道久久综合亚洲精品图片| 神马久久午夜| 欧美亚洲国产一区二区三区| 色黄视频免费看| 久久动漫网址| 日韩精品电影一区二区| 制服丝袜专区在线| 欧美日韩一区小说| 四虎国产精品免费| 要久久电视剧全集免费| 91精品福利视频| 国产欧美123| 偷拍精品精品一区二区三区| 3d动漫精品啪啪1区2区免费| 亚洲天堂2024| 亚洲最新av| 国产成人97精品免费看片| 99久久一区二区| 久久人人97超碰com| 青青视频免费在线| 日韩高清在线| 亚洲国产小视频| 黄色工厂在线观看| 欧美xxx在线观看| 国产精品第100页| 好吊色视频一区二区| 国产精品久久久一本精品| 日韩黄色片视频| 9l亚洲国产成人精品一区二三| 精品av久久707| 精品在线观看一区| 久久三级视频| 精品视频一区在线| 亚洲精品视频专区| 成人黄色av电影| 久久99导航| 在线观看三级视频| 欧美日韩大陆一区二区| 日本黄色一级网站| 久久人人88| 国产精品久久久久久影视| 亚洲av激情无码专区在线播放| 久久人人爽爽爽人久久久| 极品粉嫩国产18尤物| 亚洲1区在线观看| 久久精品亚洲一区| 波多野结衣影片| 久久日一线二线三线suv| 综合久久国产| 成人在线视频观看| 国产一区二区三区视频在线观看| 免费一级suv好看的国产网站| 日韩成人av在线资源| 欧美激情一区二区三区在线视频观看| 国产精品久久久免费视频| 国产成人精品免费网站| 中文字幕在线乱| 日韩av福利| 国产亚洲精品高潮| 亚洲男人天堂网址| 中文字幕不卡一区| 日本激情综合网| 欧美xxxx中国| 亚洲影视九九影院在线观看| 日本一区高清| 日本久久一区二区| 成人在线手机视频| 久久精品国产亚洲高清剧情介绍| 欧美自拍视频在线| 中文字幕av久久爽| 国产精品久久久久久久第一福利| 777av视频| 色狠狠久久av综合| 国产成人精品999| 最近高清中文在线字幕在线观看| 午夜国产不卡在线观看视频| 中文av字幕在线观看| 这里只有精品在线| 国产免费一区二区三区| 黄网页免费在线观看| 欧美一区二区三区性视频| 成人在线观看免费高清| 久久99在线观看| 日韩精品久久一区二区| 欧美大片网址| 国产精品免费观看在线| a级毛片免费观看在线| 欧美性极品少妇| 在线观看美女av| www.一区二区| 自拍偷拍 国产| 欧美a级在线| 蜜桃视频日韩| 成人在线啊v| 2019日本中文字幕| 欧美videos极品另类| 欧美videos中文字幕| 黄色在线视频网址| 亚洲日本乱码在线观看| 亚洲欧美日韩三级| 在线成人亚洲| 亚洲欧美日韩精品在线| 成人看片爽爽爽| 国产欧美日韩最新| 欧产日产国产精品视频 | 成年丰满熟妇午夜免费视频| 欧洲亚洲视频| 亚洲精品欧美日韩专区| 在线黄色的网站| 九九综合九九综合| wwwwww在线观看| 国产亚洲午夜高清国产拍精品 | 免费看欧美女人艹b| 日本人妻伦在线中文字幕| 沈樵精品国产成av片| 999国产在线| 51一区二区三区| 78色国产精品| 国产特黄在线| 欧美日韩一区二区三区在线看| 日韩av片在线免费观看| 99re成人精品视频| 日韩精品国产一区| 久久精品国产**网站演员| 女人喷潮完整视频| 国内精品久久久久国产盗摄免费观看完整版| 91成人免费视频| 日本少妇一区| 538国产精品视频一区二区| 污污网站在线观看| 日韩天堂在线视频| yiren22综合网成人| 日韩的一区二区| 成人午夜免费在线观看| 欧美一区二区三区视频免费| 国产系列精品av| 亚洲精品视频在线观看免费| 亚洲色图偷拍视频| 天堂蜜桃一区二区三区| 久久久亚洲精品无码| 欧美色一级片| xxxxxx在线观看| 久久久久久久久国产一区| 超碰97在线播放| 999精品视频在线观看| 久久久亚洲国产| 污片视频在线免费观看| 欧美www在线| 日本一卡二卡四卡精品| 亚洲精品720p| 97超碰人人草| 欧美日韩三级一区二区| 人人妻人人爽人人澡人人精品| 亚洲精品成a人| 在线观看国产网站| 久久se这里有精品| 国产日韩亚洲欧美在线| 日韩大片在线观看| 亚洲激情图片| 国产精品99久久久久久动医院| 黄色99视频| 西瓜成人精品人成网站| 欧美大香线蕉线伊人久久国产精品| 超黄网站在线观看| 欧美国产精品人人做人人爱| 欧美高清成人| 欧美一卡二卡三卡四卡| 国产伦理一区二区| 岛国av一区二区三区| 欧美精品亚洲精品日韩精品| 精品国产成人在线| 人人爽人人爽人人片av| 一区二区三区免费网站| 亚洲欧美va天堂人熟伦| 中文字幕国产一区| 日韩成人短视频| 亚洲一区在线播放| www.日本精品| 欧美在线观看一二区| 国产精品无码白浆高潮| 欧美自拍丝袜亚洲| 国产精品国产av| 亚洲成人网在线| 亚洲国产成人精品一区二区三区| 69p69国产精品| 国产 日韩 欧美 综合| 日韩成人在线视频观看| aⅴ在线视频男人的天堂| 欧美成人精品在线观看| 黄频免费在线观看| 国产精品影院在线观看| 高潮久久久久久久久久久久久久| 欧美激情一区二区三区久久久| 九义人在线观看完整免费版电视剧| 亚洲片在线资源| 精品欧美不卡一区二区在线观看| 日韩成人av在线| 色综合久久影院| 91成人性视频| 91亚洲精品在看在线观看高清| 91热精品视频| 奇米影视777在线欧美电影观看| 好看的日韩精品视频在线| 成人影院天天5g天天爽无毒影院| 亚洲成人午夜在线| 欧美午夜在线| 一区二区三区入口| 成人av资源站| 91精品少妇一区二区三区蜜桃臀| 中文字幕一区二区三区不卡在线| 国产成人精品视频免费| 午夜av一区二区三区| 一级做a爱片久久毛片| 4438成人网| 国产精品久久一区二区三区不卡| 中国china体内裑精亚洲片| 97天天综合网| 92看片淫黄大片看国产片| 精品国产乱码久久久久久果冻传媒| 日韩精品电影网站| 亚洲韩日在线| 亚洲精品在线网址| www.亚洲色图.com| 破处女黄色一级片| 欧美三区在线观看| 欧美日韩影视| 午夜免费日韩视频| 日韩精品一区二区三区中文字幕 | 欧美男人操女人视频| 中文字幕在线乱| 亚洲久久一区| 精品国产一二区| 亚洲人xxxx| 中文字幕 亚洲视频| 亚洲欧洲日产国码av系列天堂| 日本在线观看视频| 国产精品久久久久久网站| 国产一区二区三区四区大秀| av7777777| 成人动漫中文字幕| 免费视频91蜜桃| 色婷婷综合视频在线观看| 亚洲国产av一区二区三区| 亚洲国产天堂久久国产91| 国产在线观看网站| 热草久综合在线| 午夜a一级毛片亚洲欧洲| 黄色免费视频大全| 91片黄在线观看| 日韩一区二区视频在线| 日韩国产精品亚洲а∨天堂免| 国产小视频免费在线观看| 色综合久久精品亚洲国产| 国产高清精品二区| 妞干网这里只有精品| 国内不卡的二区三区中文字幕| 亚洲天堂成人av| 最新热久久免费视频| 91影院在线播放| 欧美成人精品激情在线观看| 激情五月综合婷婷| 热久久最新地址| 岛国精品在线播放| 国产福利拍拍拍| 日韩色在线观看| 黄色大片在线| 精品久久一区二区三区蜜桃| 国产日韩一区二区三区在线播放| 国产不卡的av| 亚洲精品视频在线观看免费| 亚洲精品字幕在线| 97视频免费看| 国产精品一区二区三区av麻| 美女网站色免费| 亚洲啪啪综合av一区二区三区| 久久久久久久久久成人| 亚洲高清av在线| 欧美亚洲韩国| 精品久久精品久久| 日韩综合小视频| av成人免费网站| 亚洲福利在线视频| 韩日精品一区| 欧美日韩精品免费看| 裸体一区二区三区| 妺妺窝人体色www聚色窝仙踪| 91精品国产91久久综合桃花| 秋霞午夜在线观看| 999精品在线观看| 国产精品亚洲欧美| 萌白酱视频在线| 精品电影一区二区| 伦理av在线| 日韩中文一区| 粉嫩绯色av一区二区在线观看| 男女性高潮免费网站| 日韩高清有码在线| 亚洲久草在线| 男人日女人逼逼| 中文成人综合网| 日本免费一区视频| 国产精品丝袜久久久久久不卡| av永久不卡| 精品1卡二卡三卡四卡老狼| 欧美视频一区在线观看| 91在线网址| 精品国产福利| 黑人巨大精品欧美一区| 黄色在线免费观看| 欧美极度另类性三渗透| 郴州新闻综合频道在线直播| 日韩成人av影院|