我想知道在nifi中线程是如何工作的,我的意思是一个处理器有一个线程,或者它们在一个主线程中?,也许我想从处理器获得一个文件,然后更新它。
我试过使用java文件锁,但它似乎不太好--这是我的代码,
File file = new File("C://Users//user//Desktop//try2//nifi-
1.3.0//4//conf2.xml");
String content = "";
String material = "";
BufferedReader s;
BufferedWriter w;
int m;
RandomAccessFile ini = new RandomAccessFile(file, "rwd");
FileLock lock = ini.getChannel().lock();
DocumentBuilder dBuilder;
Document document, doc;
String date="";
String data="";
boolean make = false;
try {
String sCurrentLine;
s = new BufferedReader(Channels.newReader(ini.getChannel(), "UTF-8"));
while ((sCurrentLine = s.readLine()) != null) {
content += sCurrentLine;
}
ini.seek(0);发布于 2017-10-20 09:41:29
我想知道在nifi中线程是如何工作的,我的意思是一个处理器有一个线程,还是它们在一个主线程中?
Nifi有一个可配置的线程池( ( sandwich menu -> controller settings -> general ) ),当任何处理器计划执行时,系统从池中获取空闲线程,在该线程中执行处理器,并将线程返回到线程池。因此,每个处理器在一个单独的随机线程中执行。
除了使用processor =false操作之外,如何防止一次由多个处理器获取文件数据?
您需要存储一个标志file XXX processed。你要怎么储存它-这是你的选择。例如,您可以创建一个具有相同名称但添加了扩展名:conf.xml -> conf.xml.done的空文件。在代码中,只需检查文件conf.xml.done是否存在,然后跳过conf.xml文件处理。
您可以将标志存储在数据库、缓存系统等中。
在执行脚本处理器代码中可以使用Thread.sleep吗?
有可能,但我看不出有什么意义。
是否可以通过groovy创建相同的逻辑?
您可以在groovy中完成任何事情:)
https://stackoverflow.com/questions/46843397
复制相似问题