【发布时间】:2019-03-18 11:17:02
【问题描述】:
我有一个基本的 Spring Cloud Function 应用程序,其中包含两个声明的函数“小写”和“大写”。如果我将应用程序创建为普通的 @SpringBootApplication 并将两个函数都注释为 @Beans (功能性 bean),那么一切正常。这两个函数都通过单独的 HTTP 端点公开,我可以通过以下方式调用函数:
- curl localhost:8080/大写 -H "Content-Type: text/plain" -d 'My 输入文字'
- curl localhost:8080/小写 -H "Content-Type: text/plain" -d '我的输入文本'
现在我将应用程序的主类转换为“函数形式”以缩短应用程序启动时间(如官方文档中的建议:http://cloud.spring.io/spring-cloud-function/multi/multi__functional_bean_definitions.html):
@SpringBootConfiguration
public class LambdaMicroserviceApplication implements ApplicationContextInitializer<GenericApplicationContext> {
public Function<String, String> uppercase() {
return String::toUpperCase;
}
public Function<String, String> lowercase() {
return String::toLowerCase;
}
public static void main(String[] args) {
FunctionalSpringApplication.run(LambdaMicroserviceApplication.class, args);
}
@Override
public void initialize(GenericApplicationContext context) {
context.registerBean("uppercase", FunctionRegistration.class,
() -> new FunctionRegistration<>(uppercase())
.type(FunctionType.from(String.class).to(String.class)));
context.registerBean("lowercase", FunctionRegistration.class,
() -> new FunctionRegistration<>(lowercase())
.type(FunctionType.from(String.class).to(String.class)));
}
}
问题:
现在只有 一个 单个端点直接暴露在根路径:
curl localhost:8080/ -H "Content-Type: text/plain" -d '我的输入文本'
它在内部调用“大写”函数,而不考虑 initialize 函数中 bean 的注册顺序。
问题:
有没有办法通过它们的专用端点再次调用 both 函数:localhost:8080/uppercase 和 localhost:8080/lowercase?
【问题讨论】:
标签: java spring spring-cloud serverless spring-cloud-function