现在,我正在使用jobParameters获取我的FlatFileItemReader和FlatFileItemWriter的文件名.可以测试我的批处理,但我的目标是读取某个目录中的文件(此目录中只有此文件),文件名可能会更改.输出文件名应取决于输入文件名.
因此,我考虑在我的工作中添加一个新步骤,此步骤将通过搜索好目录并在其中查找文件来设置输出和输入文件名.我从Spring文档中读取了将数据传递给Future Steps,以及来自SO的这个线程,但是我无法使其工作,文件总是"空".
首先,我定义了以下Tasklet
public class SettingFilenamesTasklet implements Tasklet {
private StepExecution stepExecution;
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
// TODO Search folder and set real filenames
String inputFilename = "D:/TestInputFolder/dataFile.csv";
String outputFilename = "D:/TestOutputFolder/dataFile-processed.csv";
ExecutionContext stepContext = stepExecution.getExecutionContext();
stepContext.put("inputFile", inputFilename);
stepContext.put("outputFile", outputFilename);
return RepeatStatus.FINISHED;
}
@BeforeStep
public void saveStepExecution(StepExecution stepExec) {
stepExecution = stepExec;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我添加了promotionListener bean
@Bean
public ExecutionContextPromotionListener promotionListener() {
ExecutionContextPromotionListener listener = new ExecutionContextPromotionListener();
listener.setKeys(new String[]{
"inputFile", …Run Code Online (Sandbox Code Playgroud) 我正在使用Maven开发一个Spring Boot项目(由Spring Initializr生成).我想创建一个CrudRepository,但是我收到错误"CrudRepository无法解析为某个类型"而包org.springframework.data.repository不包含CrudRepository类.我试着按照一堆教程来理解什么是错的,我没有找到任何东西.我的POM看起来对我来说,当我运行maven clean和package目标时,我没有任何构建失败,我试图更新项目并下载源代码,但没有任何作用.Eclipse无法找到CrudRepository类.
这是我的POM文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myquickstart</groupId>
<artifactId>SpringQuickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SpringQuickstart</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
我的存储库:
package com.myquickstart.repositories;
import org.springframework.stereotype.Repository;
import org.springframework.data.repository.CrudRepository; …Run Code Online (Sandbox Code Playgroud) 我在Ubuntu上遇到Android Studio问题.到目前为止,我曾经通过访问android-studio/bin文件夹并运行studio.sh来在控制台模式下运行Android Studio.它工作得很好,但每次我想运行它时输入命令都很无聊,我更喜欢只需单击一个快捷方式打开它.所以,我试图在我的任务栏中创建一个快捷方式.
在/usr/share/applications,我创建了一个名为"android-studio.desktop"的文件.这是文件的内容:
[Desktop Entry]
Type=Application
Terminal=false
Name=Android Studio
Icon=/home/chugrothas/android-studio/bin/androidstudio.svg
Exec=/home/chugrothas/android-studio/bin/studio.sh
Run Code Online (Sandbox Code Playgroud)
然后我将桌面文件拖到任务栏上.当我尝试使用新的快捷方式打开Android Studio时,我得到:
找不到JDK.请验证STUDIO_JDK,JDK_HOME或JAVA_HOME环境变量指向有效的JDK安装.
但是,当我运行该命令时echo $JAVA_HOME,我得到以下路径:
/home/chugrothas/jdk1.7.0_71
在我的PATH变量中(只是复制PATH内容的结尾):
:/home/chugrothas/jdk1.7.0_71/bin
因为Android Studio在我使用命令行运行时工作并且因为JAVA_HOME设置正确,所以我不明白为什么我的快捷方式不起作用...
我在互联网上搜索,没有发现任何人处于同样的情况.这不是一个大问题,因为我仍然可以运行AS,但我真的很想理解为什么快捷方式不起作用.
谢谢您的帮助 !
我在启动时运行了一个Job.我希望以编程方式在我的应用程序的特定位置运行此作业,而不是在我启动应用程序时.
在启动时运行时我没有问题,但是No job configuration with the name [importCityFileJob] was registered当我尝试以编程方式运行它时,我得到了一个"NoSuchJobException"().
在网上看后,我认为这是与JobRegistry有关的问题,但我不知道如何解决它.
注意:我的整个批处理配置是以编程方式设置的,我不使用任何XML文件来配置我的批处理和我的工作.这是我问题的一个重要部分,而我缺少例子......
这是我运行Job的代码:
public String runBatch() {
try {
JobLauncher launcher = new SimpleJobLauncher();
JobLocator locator = new MapJobRegistry();
Job job = locator.getJob("importCityFileJob");
JobParameters jobParameters = new JobParameters(); // ... ?
launcher.run(job, jobParameters);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Something went wrong");
}
return "Job is running";
}
Run Code Online (Sandbox Code Playgroud)
我的工作声明:
@Bean
public Job importCityFileJob(JobBuilderFactory jobs, Step step) {
return jobs.get("importFileJob").incrementer(new RunIdIncrementer()).flow(step).end().build();
}
Run Code Online (Sandbox Code Playgroud)
(我试过,以取代importCityFileJob由importFileJob我runBatch方法,但它没有工作)
我的BatchConfiguration文件包含上面的作业声明,步骤声明,itemReader/itemWriter/itemProcessor,以及所有.我使用@EnableBatchProcessing …
我有一个 tasklet 将一些信息设置到我的 JobContext 中,另一个 tasklet 检查一些东西以了解我是否可以执行批处理中的后续步骤。如果我在我的工作流程中使用两个不同的步骤,这两个小任务都可以很好地工作,但我想在同一步骤中使用这两个小任务。
我尝试在批处理配置中添加两次“.tasklet(taskletName)”,如下所示:
return stepBuilderFactory.get("stepSettings").tasklet(taskletSettings).tasklet(taskletChecking).listener(executionContextListener).listener(stepExecutionListener).build();
Run Code Online (Sandbox Code Playgroud)
它不起作用:只执行了一个 tasklet(它似乎是第二个)。我在 spring 文档中什么也没看到;有没有办法做到这一点 ?或者 Spring 不允许在同一步骤中有多个 tasklet 吗?
spring-batch ×3
java ×2
spring ×2
android ×1
jobs ×1
maven ×1
repository ×1
shortcut ×1
spring-boot ×1
tasklet ×1
ubuntu ×1