web-dev-qa-db-ja.com

Spring Batch入​​力リソースが存在する必要があります(リーダーは「厳密」モードです)エラー

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);
4
ttt

解決策がorg.springframework.core.io.UrlResource;の代わりにorg.springframework.core.io.ClassPathResource;クラスを使用していることがわかりました

1
ttt

同じ問題を見つけたので、次のようなorg.springframework.core.io.FileSystemResourceクラスを使用します。file:c:\ data\geodata1.csv reader.setResource(new FileSystemResource(file));

3
zedtimi