【发布时间】:2021-05-09 07:29:42
【问题描述】:
我正在尝试使用 @Value 注释获取输入文件并将其设置为 MultiResourceItemReader 的资源数组,如下所示;
@Value("classpath*:/input/userdata*.csv")
private Resource[] inputFiles;
当我将输入文件文件夹放在资源文件夹中时,它在 IDE 中工作正常。问题是当我运行 jar 文件时。如果文件在 IDE 中的 jar 中,它也可以正常工作。但是当我将输入文件夹放在 jar 文件的同一目录中时,它并没有出现。这是我的配置;
@Value("classpath*:/input/userdata*.csv")
private Resource[] inputFiles;
@Bean
public MultiResourceItemReader<UserInfo> multiResourceItemreader() {
MultiResourceItemReader<UserInfo> reader = new MultiResourceItemReader<>();
reader.setDelegate(userDataItemReader());
reader.setResources(inputFiles);
return reader;
}
它没有给出任何错误,只是控制台中的以下消息
2021-02-04 16:31:42.959 WARN 15772 --- [ main] o.s.b.item.file.MultiResourceItemReader : No resources to read. Set strict=true if this should be an error condition.
我不确定我在这里缺少什么。尝试在 @Value 中不使用类路径前缀,但它给了我以下异常
java.lang.IllegalArgumentException: Could not resolve resource location pattern [/input/userdata*.csv]
不确定除了@Value 注解之外还有其他方法可以为 MultiResourceItemReader 设置资源。非常感谢您的帮助!
编辑:- 这是一个 Spring Boot 批处理应用程序,这里是目录结构
apps
├── input
│ ├── userdata6.csv
│ ├── userdata7.csv
│ ├── userdata8.csv
│ └── userdata9.csv
└── multisource-batch.jar
我从同一个应用程序目录运行如下 jar 文件
java -jar multisource-batch.jar
build.gradle
plugins {
id 'org.springframework.boot' version '2.4.2'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.thomsoncodes.batch'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
}
ext {
set('springCloudVersion', "2020.0.0")
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-batch'
runtimeOnly 'mysql:mysql-connector-java'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.batch:spring-batch-test'
implementation 'org.projectlombok:lombok:1.18.2'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
test {
useJUnitPlatform()
}
更新:- 最后我得到了它的工作!即使我删除了 Web 依赖项,spring 仍然认为这是 web.xml 。按照 Mahmoud Ben Hassine 的建议,进行了干净的构建并更新了 @Value("file:/input/userdata*.csv")!
【问题讨论】:
标签: java spring spring-boot spring-batch