Spring Cloud的無伺服器函式Bean簡介
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 public class DemoApplication { @Bean public Function<String, String> uppercase() { return value -> value.toUpperCase(); } public static void main(String args) { SpringApplication.run(DemoApplication.class, args); } } |
可以在AWS Lambda中執行,還支援 Azure Functions和Apache OpenWhisk,以及其他無伺服器支援(例如Oracle Fn和Riff)。
將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 public class DemoApplication implements ApplicationContextInitializer<GenericApplicationContext> { public static void main(String args) { FunctionalSpringApplication.run(DemoApplication.class, args); } public Function<String, String> uppercase() { return value -> value.toUpperCase(); } @Override public void initialize(GenericApplicationContext context) { context.registerBean("demo", FunctionRegistration.class, () -> new FunctionRegistration<>(uppercase()) .type(FunctionType.from(String.class).to(String.class))); } } |
主要區別是:
- 主要實現類是ApplicationContextInitializer。
- @Bean方法已被轉換為呼叫context.registerBean()
- @SpringBootApplication已被替換@SpringBootConfiguration,表示不會讓Spring啟動後實現自動配置,但是仍然標記這個類作為一個啟動“入口點”。
- SpringApplication已經被替換為FunctionalSpringApplication,這是雲功能新類(SpringApplication的一個子類)。
在Spring Cloud Function應用程式中註冊的業務邏輯bean屬於型別FunctionRegistration。這是一個包裝器,包含有關輸入和輸出型別的函式和資訊。在@Bean應用程式的形式中,資訊可以反射性地匯出,但在函式bean註冊中,除非我們使用FunctionRegistration,否則其中一些資訊會丟失。
還有一種方法是使應用自己直接實現Function (或Consumer 或Supplier):
@SpringBootConfiguration public class DemoApplication implements Function<String, String> { public static void main(String args) { FunctionalSpringApplication.run(DemoApplication.class, args); } @Override public String apply(String value) { return value.toUpperCase(); } } |
Spring Boot在函式功能bean註冊方面執行良好 - Spring Cloud Function在Spring Boot基礎上構建和執行 - 但Spring Boot中的一些最有用的功能,即自動配置,都是以非函式性方式編碼的。與整個Spring Boot相比,大多數Spring Cloud Function應用程式的範圍相對較小,因此我們可以輕鬆地將其適應這些功能bean定義。
相關文章
- Spring系列.Bean簡介SpringBean
- spring cloud微服務分散式雲架構 - Spring Cloud簡介SpringCloud微服務分散式架構
- (一)spring cloud微服務分散式雲架構 - Spring Cloud簡介SpringCloud微服務分散式架構
- (一)spring cloud微服務分散式雲架構-Spring Cloud簡介SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構 - Spring Cloud整合專案簡介SpringCloud微服務分散式架構
- Spring Cloud Gateway使用簡介SpringCloudGateway
- (三)spring cloud微服務分散式雲架構 - Spring Cloud整合專案簡介SpringCloud微服務分散式架構
- Java架構-(一)spring cloud微服務分散式雲架構 - Spring Cloud簡介Java架構SpringCloud微服務分散式
- Spring Cloud Gateway之RouteLocator簡介SpringCloudGateway
- 2、Spring Cloud和dubbo簡介SpringCloud
- Spring Cloud簡介和服務中心的搭建SpringCloud
- 函式式API簡介函式API
- spring cloud架構整合-springcloud簡介SpringCloud架構GC
- Spring cloud(1)-簡介以及選擇SpringCloud
- php 函式簡介PHP函式
- Spring Cloud微服務分散式雲架構—整合專案簡介SpringCloud微服務分散式架構
- 10-函式-1-函式簡介函式
- (十六)spring cloud微服務分散式雲架構-整合專案簡介SpringCloud微服務分散式架構
- (譯) 函式式 JS #1:簡介函式JS
- Spring Cloud系列(一):微服務架構簡介SpringCloud微服務架構
- 13 Spring Cloud Alibaba簡介和Nacos安裝SpringCloud
- Python中的高階函式簡介Python函式
- Spring Cloud資料流中的組合函式支援SpringCloud函式
- Spring bean詳細介紹SpringBean
- python函式作用域簡介Python函式
- 『無為則無心』Python函式 — 28、Python函式的簡單應用Python函式
- 實用函式式 Java (PFJ)簡介函式Java
- Spring Cloud Stream的函式式和響應式Reactive程式設計特點 - spring.ioSpringCloud函式React程式設計
- VFS簡介和核心操作函式函式
- Spring Cloud 中的元件介紹SpringCloud元件
- Spring Cloud負載均衡神器——Ribbon簡介與基本使用SpringCloud負載
- 簡單介紹JS函式防抖和函式節流JS函式
- 簡單介紹python的input,print,eval函式Python函式
- Spring Cloud(八)高可用的分散式配置中心 Spring Cloud ConfigSpringCloud分散式
- TypeScript基礎入門-函式-簡介TypeScript函式
- JAVA基礎之四-函式式介面和流的簡介Java函式
- (2)Spring Cloud版本介紹SpringCloud
- Spring Cloud Config伺服器SpringCloud伺服器