W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
這是一種普通的Spring Cloud函數(shù)應(yīng)用程序,具有相似的@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); } }
您可以在無(wú)服務(wù)器平臺(tái)(如AWS Lambda或Azure Functions)中運(yùn)行以上命令,也可以僅在類路徑中包含spring-cloud-function-starter-web
,即可在其自己的HTTP服務(wù)器中運(yùn)行上述命令。運(yùn)行main方法將公開(kāi)一個(gè)端點(diǎn),您可以使用該端點(diǎn)ping uppercase
函數(shù):
$ curl localhost:8080 -d foo FOO
spring-cloud-function-starter-web
中的web適配器使用Spring MVC,因此您需要一個(gè)Servlet容器。您也可以在默認(rèn)服務(wù)器為netty的地方使用Webflux(即使您仍然愿意使用Servlet容器),也可以使用spring-cloud-starter-function-webflux
依賴項(xiàng)。
功能相同,并且兩者都可以使用用戶應(yīng)用程序代碼。
現(xiàn)在,對(duì)于功能beans:用戶應(yīng)用程序代碼可以重鑄為“功能”形式,如下所示:
@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))); } }
主要區(qū)別在于:
ApplicationContextInitializer
。
@Bean
方法已轉(zhuǎn)換為對(duì)context.registerBean()
的調(diào)用
@SpringBootApplication
已替換為@SpringBootConfiguration
,以表示我們未啟用Spring引導(dǎo)自動(dòng)配置,但仍將該類標(biāo)記為“入口點(diǎn)”。
SpringApplication
已被Spring Cloud函數(shù)中的FunctionalSpringApplication
取代(它是一個(gè)子類)。
您在Spring Cloud Function應(yīng)用程序中注冊(cè)的業(yè)務(wù)邏輯beans的類型為FunctionRegistration
。這是一個(gè)包裝,其中包含函數(shù)以及有關(guān)輸入和輸出類型的信息。在本應(yīng)用程序的@Bean
形式中,信息可以反射性地導(dǎo)出,但是在功能性bean注冊(cè)中,除非我們使用FunctionRegistration
,否則其中的一些信息會(huì)丟失。
使用ApplicationContextInitializer
和FunctionRegistration
的替代方法是使應(yīng)用程序本身實(shí)現(xiàn)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 uppercase(String value) { return value.toUpperCase(); } }
如果您添加類型為Function
的獨(dú)立類,并使用run()
方法的另一種形式向SpringApplication
注冊(cè),它也將起作用。最主要的是,泛型類型信息可在運(yùn)行時(shí)通過(guò)類聲明獲得。
如果您添加spring-cloud-starter-function-webflux
,則該應(yīng)用程序?qū)⒃谄渥约旱腍TTP服務(wù)器上運(yùn)行(由于尚未實(shí)現(xiàn)嵌入式Servlet容器的功能形式,因此它目前無(wú)法與MVC啟動(dòng)器一起使用)。該應(yīng)用程序還可以在AWS Lambda或Azure Functions中正常運(yùn)行,并且啟動(dòng)時(shí)間的改善是巨大的。
“精簡(jiǎn)型” web服務(wù)器對(duì)
Function
簽名的范圍有一些限制-特別是它(目前)還不支持Message
輸入和輸出,但是POJO和任何類型的Publisher
應(yīng)該沒(méi)事。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: