EventGrid触发器的Azure Spring Cloud Java Function复制Blob抛空指针异常
问题解决思路
- 首先定位空指针的具体来源
在TestblobHandler的run方法开头先增加日志输出,分别打印event和content是否为null:
要是event为null,说明EventGrid触发器反序列化自定义EventSchema类失败,排查方向:- 确认
EventSchema类的字段结构、字段名(大小写敏感)和你接收的Event Grid事件 payload 完全匹配,尤其是嵌套的data字段必须有对应的get/set方法,且data下存在url属性 - 确认你使用的Event Grid事件架构和类结构匹配:如果是CloudEvent 1.0架构,字段结构和默认Event Grid架构不同,需要调整
EventSchema的定义
要是content为null,说明BlobInput绑定失败,排查方向: - 确认
@StorageAccount("AzureWebJobsStorage")对应的连接字符串对源容器container1有读取权限 - 确认
host.json中的Azure Functions扩展包版本为最新稳定版,旧版本的BlobInput绑定不支持直接通过完整URL绑定Blob - 可以先把
path写死为一个存在的Blob路径测试,排除绑定表达式{data.url}的解析问题
- 确认
- 检查业务代码的变量初始化
你TestBlobUpload类中的storageConnectionStringDest变量如果是从配置读取,必须添加@Value注解完成注入,未初始化的变量会直接为空,导致CloudStorageAccount.parse调用时抛出空指针异常 - 优化实现方案
无需将Blob全量读取到内存字节数组中,可以直接将@BlobInput的绑定类型改为CloudBlockBlob,拿到源Blob对象后调用startCopy方法直接完成跨容器复制,避免大文件场景下的内存溢出问题,同时性能更高
内容的提问来源于stack exchange,提问作者Augustus
相关产品推荐
相关产品推荐

