微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Spring Batch 写入 Azure Blob?

如何解决如何使用 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 举报,一经查实,本站将立刻删除。