使用Java Camel上传CSV到Azure Storage Blob无报错但上传失败如何解决?
问题原因及遗漏点
- Camel上下文未保持运行状态:调用
mycontext.start()后没有加阻塞逻辑,主进程会直接退出,异步执行的文件读取、上传逻辑根本来不及运行,所以不会有报错也不会生成文件。 - 目标容器未提前创建:Camel Azure Storage Blob组件默认不会自动创建目标容器,需要提前在Azure存储账号中创建名为
report的容器,否则上传会静默失败。 - 路径配置不规范:Windows系统下的文件路径写法存在问题,
c://folder2的格式可能导致Camel无法定位到目标文件,建议改为file:C:/folder2。 - 日志级别配置不合理:当前无报错大概率是日志级别设置过高,隐藏了权限校验、资源不存在类的错误,建议将
org.apache.camel、com.azure.storage包的日志级别调整为DEBUG排查潜在问题。 - 依赖缺失:需要确认项目已完整引入
camel-azure-storage-blob以及Azure Storage SDK的相关依赖,缺依赖也会导致逻辑不执行且无报错。
修正后参考代码
StorageSharedKeyCredential credential = new StorageSharedKeyCredential("test", "替换为实际的存储账号密钥"); String uri = "https://test.blob.core.windows.net"; BlobServiceClient client = new BlobServiceClientBuilder() .endpoint(uri) .credential(credential) .buildClient(); CamelContext mycontext = new DefaultCamelContext(); mycontext.getRegistry().bind("client", client); mycontext.setStreamCaching(true); mycontext.addRoutes(new RouteBuilder() { @Override public void configure() { // 修正路径写法 from("file:C:/folder2?fileName=MY_TEST_FILE.csv&noop=true") .to("azure-storage-blob://test/report?blobName=MY_TEST_FILE.csv&operation=uploadBlockBlob&serviceClient=#client"); } }); mycontext.start(); // 新增阻塞逻辑等待路由执行完成,生产环境建议使用Camel Main类保持服务长期运行 Thread.sleep(10000); mycontext.stop();
内容的提问来源于stack exchange,提问作者Ani
相关产品推荐
相关产品推荐

