- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们使用 Terraform resource 创建了一个 Azure 函数azurerm_function_app_function
地形代码
resource "azurerm_function_app_function" "default" {
name = "MyAzureFunction"
function_app_id = azurerm_linux_function_app.default.id
language = "Java"
file {
name = "my-java-app-1.0-SNAPSHOT.jar"
content = filebase64("my-java-app-1.0-SNAPSHOT.jar")
}
config_json = jsonencode({
"scriptFile" : "my-java-app-1.0-SNAPSHOT.jar",
"entryPoint" : "com.mypackage.MyClass.runEvent",
"bindings" : [
{
"type" : "eventGridTrigger",
"direction" : "in",
"name" : "eventGridEvent"
}
]
})
}
Java代码
package com.mypackage;
import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.annotation.EventGridTrigger;
import com.microsoft.azure.functions.annotation.FunctionName;
public class MyClass {
@FunctionName("MyAzureFunction")
public void runEvent(@EventGridTrigger(name = "eventGridEvent") String event, final ExecutionContext context) {
context.getLogger().info("Java Event Grid trigger function executed.");
context.getLogger().info(event);
}
}
但不幸的是我们面临着 ClassNotFoundException 异常:
Result: Failure Exception: ClassNotFoundException: com.mypackage.MyClass Stack: java.lang.ClassNotFoundException: com.mypackage.MyClass
java.base/java.net.URLClassLoader.findClass(Unknown Source)
java.base/java.lang.ClassLoader.loadClass(Unknown Source)
java.base/java.lang.ClassLoader.loadClass(Unknown Source)
java.base/java.lang.Class.forName0(Native Method)
java.base/java.lang.Class.forName(Unknown Source)
com.microsoft.azure.functions.worker.broker.EnhancedJavaMethodExecutorImpl.getContainingClass(EnhancedJavaMethodExecutorImpl.java:63)
com.microsoft.azure.functions.worker.broker.EnhancedJavaMethodExecutorImpl.<init>(EnhancedJavaMethodExecutorImpl.java:22)
com.microsoft.azure.functions.worker.broker.FactoryJavaMethodExecutor.getJavaMethodExecutor(FactoryJavaMethodExecutor.java:20)
com.microsoft.azure.functions.worker.broker.JavaFunctionBroker.loadMethod(JavaFunctionBroker.java:35)
com.microsoft.azure.functions.worker.handler.FunctionLoadRequestHandler.execute(FunctionLoadRequestHandler.java:27)
com.microsoft.azure.functions.worker.handler.FunctionLoadRequestHandler.execute(FunctionLoadRequestHandler.java:9)
com.microsoft.azure.functions.worker.handler.MessageHandler.handle(MessageHandler.java:45)
com.microsoft.azure.functions.worker.JavaWorkerClient$StreamingMessagePeer.lambda$onNext$0(JavaWorkerClient.java:92)
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
java.base/java.util.concurrent.FutureTask.run(Unknown Source)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.base/java.lang.Thread.run(Unknown Source)
最佳答案
尽管使用了 Maven 插件或 func CLI,但几乎没有关于如何部署 java 函数的文档。在官方 azure 文档中,他们提到可以上传包含 java 二进制文件、库、配置等的 ZIP - 但它被记录为与对某些外来 API 的 HTTP 调用一起使用。
最后我深入研究了maven插件的来源来了解部署是如何发生的。由于我们目前在 null_resource
的帮助下通过 func 进行部署,我没有完成如何使用terraform only部署的研究。我深入研究了功能部署的maven插件源并停在这里:https://github.com/microsoft/azure-maven-plugins/blob/b260278dff807794f2d7e2781a6fd4d212337ab0/azure-toolkit-libs/azure-toolkit-appservice-lib/src/main/java/com/microsoft/azure/toolkit/lib/appservice/function/FunctionAppBase.java#L55 。这揭示了target/azure-functions/<project_name>
下的完整目录内容将被压缩,上传到函数的存储帐户,并且将设置函数应用程序中的一些属性,具体为 WEBSITE_RUN_FROM_PACKAGE
.
我建议您使用 Maven 插件打包函数应用程序,使用插件或函数核心工具进行部署,并在 azure 门户上检查函数应用程序云资源的状态,以对官方 azure 文档缺少的内容进行逆向工程.
关于通过 terraform azurerm_function_app_function 的 Azure 函数抛出 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71849412/
我们使用 Terraform resource 创建了一个 Azure 函数azurerm_function_app_function 地形代码 Terraform v1.1.0 提供商 azurer
我是一名优秀的程序员,十分优秀!