如何解决如何使用 Spring Batch 写入 Azure Blob?
我正在尝试使用 Spring Batch 将逐行 csv 写入 Azure Blob。
自动装配 Azure 存储:
@Value("${azure.storage.ConnectionString}")
private String connectionString;
@Value("${azure.storage.container.name}")
private String containerName;
@Bean
@StepScope
public FlatFileItemWriter<Pojo> writer(
@Value("#{stepExecutionContext['marketName']}") String marketName,@Value("#{jobParameters['startDate']}") String startDate,@Value("#{jobParameters['YYYY-MM']}") String yearMonth
) {
// Create writer instance
FlatFileItemWriter<Pojo> writer = new FlatFileItemWriter<>();
String fullPath = yearMonth + "/" + marketName + "/" +
marketName + "_" + startDate;
BlobContainerClient container = new BlobContainerClientBuilder()
.connectionString(connectionString)
.containerName(containerName)
.buildClient();
BlobClient blob = container.getBlobClient(fullPath);
// Set output file location
writer.setResource((Resource) blob);
// All job repetitions should "append" to same output file
writer.setAppendAllowed(true);
// Name field values sequence based on object properties
writer.setLineAggregator(new DelimitedLineAggregator<Pojo>() {
{
setDelimiter(",");
setFieldExtractor(new BeanWrapperFieldExtractor<Pojo>() {
{
setNames(new String[] {
"market","epsg","xbin","ybin","latitude","longitude","totalDownlinkVol","totalUplinkVol"
});
}
});
}
});
return writer;
}
然后我得到错误:
org.springframework.beans.factory.BeanCreationException:在类路径资源[com/example/dbreader/configuration/BatchConfig.class]中定义名称为“scopedTarget.writer”的bean创建错误:通过工厂方法的Bean实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.springframework.batch.item.file.FlatFileItemWriter]:工厂方法“writer”抛出异常;嵌套异常是 java.lang.classCastException: com.azure.storage.blob.BlobClient 不能转换为 org.springframework.core.io.Resource
Spring 抱怨我无法将 Blob 转换为资源。
有人知道如何在 Spring Batch Writer 中指向 Azure Blob 存储吗?
谢谢,马库斯。
解决方法
FlatFileItemWriter
需要 org.springframework.core.io.Resource
才能写入数据。如果您使用的 API 未实现此接口,则它不能与 FlatFileItemWriter
一起使用。您需要为 Azure 提供 Resource
实现或寻找实现它的库,例如 round()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。