【问题标题】:Use Scala with Azure Functions将 Scala 与 Azure Functions 结合使用
【发布时间】:2021-11-03 13:49:47
【问题描述】:

Azure Functions 当前支持以下languages:C#、JavaScript、F#、Java、Powershell、Python、Typescript。 Scala 不在列表中。

如何使用 scala 编写 azure 函数?

【问题讨论】:

    标签: azure scala azure-functions


    【解决方案1】:

    Azure Functions 支持 Java。让它适用于 scala 非常简单:

    
    import com.microsoft.azure.functions.ExecutionContext
    import com.microsoft.azure.functions.HttpMethod
    import com.microsoft.azure.functions.HttpRequestMessage
    import com.microsoft.azure.functions.HttpResponseMessage
    import com.microsoft.azure.functions.HttpStatus
    import com.microsoft.azure.functions.annotation.AuthorizationLevel
    import com.microsoft.azure.functions.annotation.FunctionName
    import com.microsoft.azure.functions.annotation.HttpTrigger
    
    import java.util.Optional
    
    class ScalaFunction {
      /**
       * This function listens at endpoint "/api/ScalaFunction"
       */
      @FunctionName("ScalaFunction")
      def run(
               @HttpTrigger(
                 name = "req",
                 methods = Array(HttpMethod.GET, HttpMethod.POST),
                 authLevel = AuthorizationLevel.ANONYMOUS) request: HttpRequestMessage[Optional[String]],
               context: ExecutionContext): HttpResponseMessage = {
        context.getLogger.info("Scala HTTP trigger processed a request.")
        request.createResponseBuilder(HttpStatus.OK).body("This is written in Scala. Hello, ").build
      }
    }
    
    

    这就是 pom.xml 的外观。增加了对 scala 和 maven-scala-plugin 插件的依赖。

    <?xml version="1.0" encoding="UTF-8" ?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.jp</groupId>
        <artifactId>AzurePrac</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>Azure Java Functions</name>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <java.version>1.8</java.version>
            <azure.functions.maven.plugin.version>1.13.0</azure.functions.maven.plugin.version>
            <azure.functions.java.library.version>1.4.2</azure.functions.java.library.version>
            <functionAppName>azureprac-20210906165023338</functionAppName>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>com.microsoft.azure.functions</groupId>
                <artifactId>azure-functions-java-library</artifactId>
                <version>${azure.functions.java.library.version}</version>
            </dependency>
    
            <!-- Test -->
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter</artifactId>
                <version>5.4.2</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-core</artifactId>
                <version>2.23.4</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-library</artifactId>
                <version>2.12.12</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <encoding>${project.build.sourceEncoding}</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.microsoft.azure</groupId>
                    <artifactId>azure-functions-maven-plugin</artifactId>
                    <version>${azure.functions.maven.plugin.version}</version>
                    <configuration>
                        <!-- function app name -->
                        <appName>${functionAppName}</appName>
                        <!-- function app resource group -->
                        <resourceGroup>java-functions-group</resourceGroup>
                        <!-- function app service plan name -->
                        <appServicePlanName>java-functions-app-service-plan</appServicePlanName>
                        <!-- function app region-->
                        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-regions for all valid values -->
                        <region>westus</region>
                        <!-- function pricingTier, default to be consumption if not specified -->
                        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-pricing-tiers for all valid values -->
                        <!-- <pricingTier></pricingTier> -->
                        <!-- Whether to disable application insights, default is false -->
                        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details for all valid configurations for application insights-->
                        <!-- <disableAppInsights></disableAppInsights> -->
                        <runtime>
                            <!-- runtime os, could be windows, linux or docker-->
                            <os>windows</os>
                            <javaVersion>8</javaVersion>
                        </runtime>
                        <appSettings>
                            <property>
                                <name>FUNCTIONS_EXTENSION_VERSION</name>
                                <value>~3</value>
                            </property>
                        </appSettings>
                    </configuration>
                    <executions>
                        <execution>
                            <id>package-functions</id>
                            <goals>
                                <goal>package</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!--Remove obj folder generated by .NET SDK in maven clean-->
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                    <configuration>
                        <filesets>
                            <fileset>
                                <directory>obj</directory>
                            </fileset>
                        </filesets>
                    </configuration>
                </plugin>
    
                <plugin>
                    <groupId>org.scala-tools</groupId>
                    <artifactId>maven-scala-plugin</artifactId>
                    <version>2.15.2</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>compile</goal>
                                <goal>testCompile</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>
    
    

    最后发布:mvn clean package; mvn azure-functions:deploy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多