当前位置: 首页 > 知识库问答 >
问题:

在Spring Batch中清理后步文件夹失败

厉令
2023-03-14
public class CleanUpListener implements StepExecutionListener {

private static final Logger logger = LoggerFactory.getLogger(CleanUpListener.class);

private String folderToBeDeleted;

@Override
public ExitStatus afterStep(StepExecution arg0) {
    try {
        logger.info("Deleting folder: " + folderToBeDeleted + " ...");
        File file = new File(folderToBeDeleted);
        logger.info("folder contains: " + file.listFiles().length);
        FileUtils.deleteDirectory(file);
        logger.info("Deleted folder: " + folderToBeDeleted);
    } catch (IOException e) {
        logger.error("Failed to delete folder: " + folderToBeDeleted + " with exception: " + e.toString());
    }
    return null;
}

@Override
public void beforeStep(StepExecution arg0) {
    // TODO Auto-generated method stub

}

public String getFolderToBeDeleted() {
    return folderToBeDeleted;
}

public void setFolderToBeDeleted(String folderToBeDeleted) {
    this.folderToBeDeleted = folderToBeDeleted;
}
11/03/2014 13:53:56.804 [http-bio-8080-exec-2] [] INFO                 CleanUpListener - Line (29) Deleting folder: C:/Myfolder ...
11/03/2014 13:53:56.806 [http-bio-8080-exec-2] [] INFO                 CleanUpListener - Line (31) folder contains: 14
11/03/2014 13:53:56.826 [http-bio-8080-exec-2] [] ERROR                CleanUpListener - Line (35) Failed to delete folder: C:/Myfolder with exception: java.io.IOException: Unable to delete file: C:/Myfolder/14.xml

更新:步骤的阅读器:

<bean id="modelReader"
        class="org.springframework.batch.item.file.MultiResourceItemReader"
        scope="step">
        <property name="resources" value="file:${step3.reader.resource}/*.xml"></property>
        <property name="delegate" ref="staxPatentReader"></property>
        <property name="strict" value="true"></property>
    </bean>

    <bean id="staxPatentReader" class="org.springframework.batch.item.xml.StaxEventItemReader">
        <property name="fragmentRootElementName" value="Root" />
        <property name="unmarshaller" ref="modelMarshaller" />
    </bean>

    <bean id="modelMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="classesToBeBound">
            <list>
                <value>com.sample.MyModel</value>
            </list>
        </property>
    </bean>

共有1个答案

松和泰
2023-03-14

要执行此类步骤,请使用自定义Tasklet实现。

class DeleteFilesTasklet implements Tasklet {
  execute(StepContribution, ChunkContext) throws Exception {
    // do deletion and return the right value
  }
}

在job.xml中

<job>// previous steps
  <step id="deleteFiles">
    <tasklet ref="deleteFiles" />
  </step>
  <bean class="DeleteFilesTasklet" id="deleteFiles" />
</job>

这样,您就可以确定所有文件(和其他资源)都已在上一步中关闭。

 类似资料:
  • 我想用3个步骤建立一个批次。我想配置这个步骤,就像如果有100条记录,当step1读取、处理和写入一个10块时,step02,然后step03开始和结束,然后再次返回step1,读取下一个块。这在Spring批量可能吗?

  • 我似乎无法使用完成捆绑包的安装

  • 我有一个包含TypeScript的Spring MVC应用程序。通过gradle任务将typescript从文件夹传输到 则结果JavaScript文件通过以下方式包含在WAR文件中: 当我在gradle和IntelliJ之间进行同步时,它会创建一个类似于以下内容的工件: 我该怎么做才能从一开始就得到工件中的文件夹?我应该针对Intellij提交一个bug吗?

  • 问题内容: 假设我安装了项目包,其中包含要安装的模块。一段时间后,我发现我不需要某些特定的模块,并从中删除了对它的依赖。然后,我从中删除了一些其他模块,因为不再需要它们,而其他模块则被替换。 现在,我要清理文件夹,以便只有其中列出的模块可以呆在那里,其余的必须进入,如。我知道我可以手动将其删除,但希望为此可以使用糖功能。 问题答案: 我想你在找 此命令删除“外部”软件包。如果提供了软件包名称,则仅

  • 将文件从documentdirectory移动到子目录的简单脚本不起作用 移动失败,错误为:操作无法完成。(可可错误4。) 我用Xcode的模拟器来尝试它。下面的函数返回true,因为文件存在于DocumentDirectory中。此外,destinationfolder存在,destinationfolder为空。 /Users/RWollenSchlaeger/Library/Develope

  • 我有6个PDF,通过6个单独的按钮加载。这只是一个侧函数来查看我用来创建程序的数据。 程序在集成开发环境中按预期运行,PDF顺利加载,主程序正常工作。然而,经过清理和构建,主程序仍然工作,但PDFS没有加载。 我注意到,如果在清理和构建之后手动将PDF放入dist文件夹中,程序实际上会运行。然而,如果我再次清理并构建,它显然会删除并替换dist文件夹的内容。 我在大学里的场景是把课程交给一位客户,