springbatch不读取process
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springbatch不读取process相关的知识,希望对你有一定的参考价值。
首先,Spring Batch运行的基本单位是一个Job,一个Job就做一件批处理的事情。一个Job包含很多Step,step就是每个job要执行的单个步骤。
如下图所示,Step里面,会有Tasklet,Tasklet是一个任务单元,它是属于可以重复利用的东西。
然后是Chunk,chunk就是数据块,你需要定义多大的数据量是一个chunk。
Chunk里面就是不断循环的一个流程,读数据,处理数据,然后写数据。Spring Batch会不断的循环这个流程,直到批处理数据完成。
read是负责读取数据。spring batch 有很多其实现,能够针对不同的场景进行选择。例如:经常会用到的文件读取实现FlatFileItemReader,能够针对大部分文件进行读取。
process是数据处理器,在数据流从read到writer过程中,可以对数据流进行校验。使之能够对输入的数据进行检查。
writer是负责写数据。spring batch也有很多实现。例如:AmqItemWriter,FlatFileItemWriter,MybatisBatchItemWriter,ListItemWriter等等。
在对以上的基本概念和流程进行了解后,对于项目的功能已经有了初步的代码实现。
就当开始编写代码时,遇到了一个问题。spring batch提供的reader,不能读取项目中所使用的文件。项目中使用的是.gz的压缩型文件,spring batch FlatFileItemReader 不能正确的读取文件内容。尝试着对.gz文件的解压文件进行读取,能够得到正确文件内容。如果这样的话,每次读取文件都要先解压再去读取,比较麻烦。就在一筹莫展之际,突然灵机一动,联想到之前做过的项目能够对.gz文件进行读取的GZIPInputStream,其实也算是一种数据流,既然都是数据流,能不能把.gz的数据流适配到FlatFileItemReader中。说干就干,于是翻看了FlatFileItemReader的源码,发现其接收一个Resource的参数。其中就是对数据流的包裹。
FaltFileItemReader
截图中显示通过resource创建出BufferedReader能够对文件进行行读取操作。
然后我通过继承Resource接口然后通过对象适配器模式,适配FileSystemRes 参考技术A 最近,在对一个新接手的项目进行功能的添加,关于批量数据导入数据库的功能。项目中已经有了类似的批量数据处理的功能,于是就梳理之前的代码。发现了spring batch这个框架。说实话,spring 之前一直都在接触,使用。其实也只是使用一些基本的功能。对于一些其他的spring模块了解的并不是很多。所以,当时看了一遍代码,没怎么看懂。然后上网搜了一些关于spring batch 的介绍,发现了一张图片很好的解释了spring batch 的工作流程。
节点js,process.env不读取环境变量
【中文标题】节点js,process.env不读取环境变量【英文标题】:Node js, process.env not reading enviroment variables 【发布时间】:2021-08-12 03:25:16 【问题描述】:即使我可以看到在 Windows 上创建了一个环境变量,process.env
总是返回 undefined
。我确实设置了所有变量,当我手动检查它们时,它们都出现在提示符中,但 process.env
始终保持未定义。
附:我没有管理员权限,除非我查看process.env.NODE_ENV
。
【问题讨论】:
【参考方案1】:您需要先阅读它们。
使用dotenv 包。
安装:
npm install dotenv
在你的项目代码中:
require('dotenv').config()
在您的项目文件夹中添加 .env 文件,如下所示:
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
尝试像这样获取环境变量:
const db = require('db')
db.connect(
host: process.env.DB_HOST,
username: process.env.DB_USER,
password: process.env.DB_PASS
)
顺便说一句,将它们写入文件以使其成为环境变量是不够的。您需要在控制台中编写它们,然后它们成为环境变量。 .env 文件方法允许您将它们写入文件并通过 donenv 包从那里读取它们。
【讨论】:
其实我不知道为什么读取已经创建好的环境变量不起作用。但在这种情况下,只需使用 .env 文件即可。 好吧,我很尴尬地说这都是一个错字,你看我有阅读障碍,我写的是 EVN 而不是 ENV。这就是为什么我无法弄清楚我一直盯着这个问题的问题,但我没有意识到我打错了。我确实正确设置了变量,我什至检查了 H_KEY_LOCAL_MACHINE。感谢您的快速回答, @DardanGjoka 有趣。好吧,如果你这么想的话,我也有阅读障碍,因为我有时会注意力不集中,而且我也会把事情搞混。祝你有美好的一天!以上是关于springbatch不读取process的主要内容,如果未能解决你的问题,请参考以下文章
Spring Batch:ItemProcessor 不处理所有记录
如何从 2 个集合中读取数据并从两个集合中保存数据并将其保存在 SpringBatch 的第 3 个集合中