当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring Batch写入Azure Blob?

柴亦
2023-03-14

我正在尝试用Spring批处理将一行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 . spring framework . beans . factory . beancreationexception:创建在类路径资源[com/example/db reader/configuration/batch config . class]中定义的名为“scopedTarget.writer”的bean时出错:通过工厂方法进行的Bean实例化失败;嵌套异常为org . spring framework . beans . bean instantiation exception:无法实例化[org . spring framework . batch . item . file . flat file item Writer]:工厂方法“writer”引发了异常;嵌套异常是Java . lang . classcastexception:com . azure . storage . blob . blob client不能转换为org . spring framework . core . io . resource

Spring抱怨我无法将Blob强制转换为资源。

有没有人知道如何在Spring Batch Writer中指向Azure Blob存储?

谢谢,马库斯。

共有1个答案

申屠泉
2023-03-14

< code>FlatFileItemWriter需要一个< code > org . spring framework . core . io . resource 来写入数据。如果您使用的API没有实现此接口,则它不能与< code>FlatFileItemWriter一起使用。你需要为Azure提供一个< code>Resource实现,或者寻找一个实现它的库,比如Azure Spring Boot Java Starter Storage client library。

 类似资料:
  • 问题内容: 我如何将分数写入文件? 问题答案: 您可以手动打开和关闭文件,但最好使用它,因为它可以为您处理关闭文件。 表示追加到文件中,该文件不会覆盖以前的内容- 这可能是您想要的。据我所知,您将要在print语句之后或之前添加它。如果您不懂读写文件,则应查看此链接。

  • 考虑以下代码: 我唯一发现的是: dump(Object data)方法接受Java对象并生成YAML文档 和 是只有我一个人,还是文档感觉非常神秘和指定?其中一半是关于我甚至从未听说过的特殊应用。我只看着它就觉得自己很傻,这让我有点生气。 不管怎样;如果你能给我任何帮助,我将不胜感激。

  • 问题内容: 我目前正在编写一个使用BufferedWriter生成多个日志文件的应用程序。但是,在调试时,我想写入System.out而不是文件。我认为我可以从以下方面进行更改: 至: 相对于: 但是,新选项无法正常工作。我如何只更改BufferedWriter构造函数内部的对象,以从文件重定向到标准输出。由于我将要写入多个日志文件,因此实际上无法使用System.out并将输出更改为文件。 问题

  • 问题内容: 我想知道如何将以下代码转换为将这些行输出到文本文件,而不是标准输出: 该属性文件是: 谢谢。 问题答案: 将ConsoleAppender更改为FileAppender。 我发现 有用。如果使用此选项,则必须为fileName添加一个属性,并且可能还要设置maxFileSize。这是一个示例(将它们放在log4j.properties文件中): 还有其他附加程序。 根据时间滚动。 不滚

  • 问题内容: 我使用下面的方法来写到: 我想知道这是否是使用NIO的正确方法。我已经阅读了一个方法,该方法带有三个参数: ReadableByteChannel src 好仓 长计 在我的情况下,我只有,而没有and和,有什么方法可以使用此方法来创建文件? 此外,对于Image,还有什么更好的方法可以仅从和NIO 创建映像? 任何信息对我来说都是非常有用的。在SO中也有类似的问题,但是我找不到适合我

  • 我有一个.xlsx文件,其中包含多个包含不同数据的工作表。在所有的工作表中,一个工作表需要容纳接近100,000行数据,并且需要使用带有POI的Java来写入数据。 对于SXSSFWorkbook,这似乎相当快速和简单,在这里我只能在内存中保留100行,但缺点是我只能写入一个新文件(或覆盖现有文件)。 此外,我不允许‘加载’一个现有的文件,即 null null 我可以使用工作簿工厂: null