Spring Cloud的无服务器函数Bean简介

栏目: Java · 发布时间: 6年前

内容简介:Spring Cloud云函数可以实现无服务器功能,快速浏览Spring Cloud 2.0提供的一些改进,包括更快的启动和“全函数”的能力。而且,由于它是在Spring Boot之上构建的,因此不再需要servlet容器。Spring Cloud Function 2.0是基于Spring Boot 2.1和Spring Framework 5.1以上版本实现,不同于传统的Bean的定义,显著改善了在无服务器架构中的冷启动性能。下面是1.0版本的Spring的云函数功能应用,通过@Configurati

Spring Cloud云函数可以实现无服务器功能,快速浏览Spring Cloud 2.0提供的一些改进,包括更快的启动和“全函数”的能力。而且,由于它是在Spring Boot之上构建的,因此不再需要servlet容器。Spring Cloud Function 2.0是基于Spring Boot 2.1和Spring Framework 5.1以上版本实现,不同于传统的Bean的定义,显著改善了在无服务器架构中的冷启动性能。

下面是1.0版本的Spring的云函数功能应用,通过@Configuration和@Bean等声明式注解一起实现:

@SpringBootApplication
<b>public</b> <b>class</b> DemoApplication {

  @Bean
  <b>public</b> Function<String, String> uppercase() {
    <b>return</b> value -> value.toUpperCase();
  }

  <b>public</b> <b>static</b> <b>void</b> main(String args) {
    SpringApplication.run(DemoApplication.<b>class</b>, args);
  }

}

可以在AWS Lambda中运行,还支持 Azure FunctionsApache OpenWhisk ,以及其他无服务器支持(例如 Oracle FnRiff )。

将spring-cloud-function-starter-web放在类路径中,就能访问端点:

$ curl localhost:8080 -d foo

返回的是大写FOO,说明上面代码中@Bean注解的函数转换功能起作用了。

1.0中Web适配器是使用Spring MVC实现的,这样你就需要启动一个Servlet容器才能运行Spring MVC。在Spring Cloud Function 2.0中,如果想使用Servlet容器,默认服务器是netty;还可以使用Webflux - 只需包含 spring-cloud-starter-function-webflux依赖项。

在2.0中,云函数功能实现代码有所区别:

@SpringBootConfiguration
<b>public</b> <b>class</b> DemoApplication
    implements ApplicationContextInitializer<GenericApplicationContext> {

  <b>public</b> <b>static</b> <b>void</b> main(String args) {
    FunctionalSpringApplication.run(DemoApplication.<b>class</b>, args);
  }

  <b>public</b> Function<String, String> uppercase() {
    <b>return</b> value -> value.toUpperCase();
  }

  @Override
  <b>public</b> <b>void</b> initialize(GenericApplicationContext context) {
    context.registerBean(<font>"demo"</font><font>, FunctionRegistration.<b>class</b>,
        () -> <b>new</b> FunctionRegistration<>(uppercase())
            .type(FunctionType.from(String.<b>class</b>).to(String.<b>class</b>)));
  }

}
</font>

主要区别是:

  • 主要实现类是ApplicationContextInitializer。
  • @Bean方法已被转换为调用context.registerBean()
  • @SpringBootApplication已被替换@SpringBootConfiguration,表示不会让Spring启动后实现自动配置,但是仍然标记这个类作为一个启动“入口点”。
  • SpringApplication已经被替换为FunctionalSpringApplication,这是云功能新类(SpringApplication的一个子类)。

在Spring Cloud Function应用程序中注册的业务逻辑bean属于类型FunctionRegistration。这是一个包装器,包含有关输入和输出类型的函数和信息。在@Bean应用程序的形式中,信息可以反射性地导出,但在函数bean注册中,除非我们使用FunctionRegistration,否则其中一些信息会丢失。

还有一种方法是使应用自己直接实现Function (或Consumer 或Supplier):

@SpringBootConfiguration
<b>public</b> <b>class</b> DemoApplication implements Function<String, String> {

  <b>public</b> <b>static</b> <b>void</b> main(String args) {
    FunctionalSpringApplication.run(DemoApplication.<b>class</b>, args);
  }

  @Override
  <b>public</b> String apply(String value) {
    <b>return</b> value.toUpperCase();
  }

}

Spring Boot在函数功能bean注册方面运行良好 - Spring Cloud Function在Spring Boot基础上构建和运行 - 但Spring Boot中的一些最有用的功能,即自动配置,都是以非函数性方式编码的。与整个Spring Boot相比,大多数Spring Cloud Function应用程序的范围相对较小,因此我们可以轻松地将其适应这些功能bean定义。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Coming of Age in Second Life

Coming of Age in Second Life

Tom Boellstorff / Princeton University Press / 2008-04-21 / USD 29.95

The gap between the virtual and the physical, and its effect on the ideas of personhood and relationships, is the most interesting aspect of Boellstorff's analysis... Boellstorff's portrayal of a virt......一起来看看 《Coming of Age in Second Life》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具