Извините, я неправильно прочитал ваш вопрос.
Вы можете автоматически подключить BindingsEndpoint
, но, к сожалению, его State
перечисление является закрытым, поэтому вы не можете вызвать changeState()
программно.
У меня открыта проблема для этого .
РЕДАКТИРОВАТЬ
Вы можете сделать это с помощью отражения, но это немного уродливо ...
@SpringBootApplication
@EnableBinding(Sink.class)
public class So53476384Application {
public static void main(String[] args) {
SpringApplication.run(So53476384Application.class, args);
}
@Autowired
BindingsEndpoint binding;
@Bean
public ApplicationRunner runner() {
return args -> {
Class<?> clazz = ClassUtils.forName("org.springframework.cloud.stream.endpoint.BindingsEndpoint$State",
So53476384Application.class.getClassLoader());
ReflectionUtils.doWithMethods(BindingsEndpoint.class, method -> {
try {
method.invoke(this.binding, "input", clazz.getEnumConstants()[2]); // PAUSE
}
catch (InvocationTargetException e) {
e.printStackTrace();
}
}, method -> method.getName().equals("changeState"));
};
}
@StreamListener(Sink.INPUT)
public void listen(String in) {
}
}