У меня есть базовое приложение Весенняя облачная функция с двумя объявленными функциями «нижний регистр» и «верхний регистр». Если я создам приложение как обычный @SpringBootApplication и аннотирую обе функции как @Бобы (функциональные компоненты), все будет работать нормально. Обе функции доступны через отдельные конечные точки HTTP, и я могу вызывать функции через:
Теперь я преобразовал основной класс приложения в «функциональную форму», чтобы улучшить время запуска приложения (как указано в официальном документе: 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 'Мой вводимый текст'
Он вызывает функцию «в верхнем регистре» внутри, независимо от порядка регистрации компонентов в функции инициализировать.
Вопрос:
Есть ли способ снова вызвать функции обе через их выделенные конечные точки: локальный: 8080/верхний регистр и локальный: 8080/нижний регистр?




Оказалось, что на самом деле это недостающая функциональность в функциональной форме Spring Cloud Function. Теперь он реализован в версии 2.1.0.M1.
См.: https://github.com/spring-cloud/spring-cloud-function/issues/293
Вы можете запустить это в AWS Lambda. Для меня это отлично работает, пока у меня в банке нет только одной функции. Я использовал «org.springframework.cloud.function.adapter.aws.SpringBootStreamHandler::handleRequest» в качестве обработчика времени выполнения и указал одно из имен функций в переменных среды для «spring_cloud_function_definition».