Csvファイルの解析にSpringBatchを使用しています。リソースディレクトリにファイルする場合はうまく機能しますが、別の場所からは機能しません。サックエラーが発生する
Caused by: Java.lang.IllegalStateException: Input resource must exist (reader is in 'strict' mode): class path resource [c:/data/geodata1.csv]
私のコード
spring.datasource:
driverClassName: org.h2.Driver
url: jdbc:h2:mem:mydb;MODE=Oracle
server:
port: 9001
geodata:
file: c:/data/geodata1.csv
@Value("${geodata.file}")
private String filePath;
@Bean
public FlatFileItemReader<Person> reader() {
FlatFileItemReader<Person> reader = new FlatFileItemReader<Person>();
reader.setResource(new ClassPathResource(filePath));
reader.setLineMapper(new DefaultLineMapper<Person>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[] {"clientId", "longitude", "latitude", });
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
setTargetType(Person.class);
}});
}});
return reader;
}
しかし、このコードはうまく機能します
File file = new File(filePath);
解決策がorg.springframework.core.io.UrlResource;
の代わりにorg.springframework.core.io.ClassPathResource;
クラスを使用していることがわかりました
同じ問題を見つけたので、次のようなorg.springframework.core.io.FileSystemResourceクラスを使用します。file:c:\ data\geodata1.csv reader.setResource(new FileSystemResource(file));