如何将 JAR 外部的资源加载到 MultiResourceItemReader 中?
How to load Resources that are outside of JAR into MultiResourceItemReader?
我正在尝试将 Resource[]
加载到 `MultiResourceItemReader。 运行 本地应用程序,我可以直接注入资源,因为它们包含在资源目录中。
但是,应用程序将作为 jar 部署到服务器,此时资源(平面文件)将位于 jar 之外。我在使用 PathMatchingResourcePatternResolver
时遇到问题 -- 我一直收到 "No resources found" 错误。
MultiResourceItemReader
可以从 jar 外部路径读取。只需尝试提供资源的绝对路径。
假设您在 /data/inputs/csv/ 目录中有输入文件 example*.csv,然后在 application.properties
文件中你可以有
input.files.location=/data/inputs/csv/
input.file.pattern=example*.csv
然后在MultiResourceItemReader
配置中,你可以给出如下,
@Value("file:${input.files.location}${input.file.pattern}")
private Resource[] inputResources; //thus inputResources will have files matching pattern example*.csv in folder
@Bean
public MultiResourceItemReader<T> multiResourceItemReader()
{
MultiResourceItemReader<T> resourceItemReader = new MultiResourceItemReader<T>();
resourceItemReader.setResources(inputResources);
resourceItemReader.setDelegate(reader());
return resourceItemReader;
}
我正在尝试将 Resource[]
加载到 `MultiResourceItemReader。 运行 本地应用程序,我可以直接注入资源,因为它们包含在资源目录中。
但是,应用程序将作为 jar 部署到服务器,此时资源(平面文件)将位于 jar 之外。我在使用 PathMatchingResourcePatternResolver
时遇到问题 -- 我一直收到 "No resources found" 错误。
MultiResourceItemReader
可以从 jar 外部路径读取。只需尝试提供资源的绝对路径。
假设您在 /data/inputs/csv/ 目录中有输入文件 example*.csv,然后在 application.properties
文件中你可以有
input.files.location=/data/inputs/csv/
input.file.pattern=example*.csv
然后在MultiResourceItemReader
配置中,你可以给出如下,
@Value("file:${input.files.location}${input.file.pattern}")
private Resource[] inputResources; //thus inputResources will have files matching pattern example*.csv in folder
@Bean
public MultiResourceItemReader<T> multiResourceItemReader()
{
MultiResourceItemReader<T> resourceItemReader = new MultiResourceItemReader<T>();
resourceItemReader.setResources(inputResources);
resourceItemReader.setDelegate(reader());
return resourceItemReader;
}