使用 Java 的 Azure 函数 - 如何创建 @BlobTrigger

Azure functions using Java - How to created @BlobTrigger

我需要使用 Java 创建 Azure 函数 BlobTrigger 来监控我的存储容器中的新的和更新的 blob。

尝试使用以下代码

import java.util.*;
import com.microsoft.azure.serverless.functions.annotation.*;
import com.microsoft.azure.serverless.functions.*;
import java.nio.file.*;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import com.microsoft.azure.storage.*;
import com.microsoft.azure.storage.blob.*;

@FunctionName("testblobtrigger")
 public String testblobtrigger(@BlobTrigger(name = "test", path = "testcontainer/{name}") String content) {
     try {
         return String.format("Blob content : %s!", content);

     } catch (Exception e) {
         // Output the stack trace.
         e.printStackTrace();
         return "Access Error!";
     }
 }

执行时显示错误

Storage binding (blob/queue/table) must have non-empty connection. Invalid storage binding found on method:

添加连接字符串后正常工作

public String kafkablobtrigger(@BlobTrigger(name = "test", path = "testjavablobstorage/{name}",connection=storageConnectionString) String content) {

为什么我在使用 blobtrigger 时需要添加连接字符串?

在 C# 中,它在没有连接字符串的情况下工作:

public static void ProcessBlobContainer1([BlobTrigger("container1/{blobName}")] CloudBlockBlob blob, string blobName)
{
    ProcessBlob("container1", blobName, blob);
}

我没有看到任何 Java @BlobTrigger 的 Azure 函数示例。

毕竟connection是触发器识别容器位置所必需的

经过测试,我发现@Mikhail 是对的。 对于 C#,如果 connection 被忽略,将使用默认值(在 local.settings.json 或门户中的应用程序设置中)。但不幸的是 java 没有相同的设置。

您可以在 @FuncionName 下方添加 @StorageAccount("YourStorageConnection"),因为这是另一种有效的选择方式。 local.settings.json 或门户应用程序设置中 YourStorageConnection 的值由您决定。

您可以关注 this tutorial,使用 mvn azure-functions:add 找到 java 的四个(Http/Blob/Queue/TimerTrigger)模板。