Как предоставить несколько конечных точек функций с помощью Spring Cloud Function?
У меня есть базовое приложение Spring Cloud Function с двумя объявленными функциями "нижний регистр" и "верхний регистр". Если я создаю приложение как обычное @SpringBootApplication и аннотирую обе функции как @Beans (функциональные компоненты), все работает просто отлично. Обе функции доступны через отдельные конечные точки HTTP, и я могу вызывать функции через:
- curl localhost: 8080 / uppercase -H "Тип содержимого: текст / обычный" -d 'Мой вводимый текст'
- curl localhost: 8080 / нижний регистр -H "Тип содержимого: текст / обычный" -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 "Тип содержимого: текст / обычный" -d "Мой вводимый текст"
Он вызывает функцию "верхнего регистра" внутри, независимо от порядка регистрации бинов в функции инициализации.
Вопрос:
Есть ли способ снова вызвать обе функции через их выделенные конечные точки: localhost: 8080 / uppercase и localhost: 8080 / lowercase?
1 ответ
Оказалось, что это на самом деле недостающий функционал в функциональной форме Spring Cloud Function. Теперь он реализован в версии 2.1.0.M1.
Смотрите: https://github.com/spring-cloud/spring-cloud-function/issues/293