Передача аргументов из свойств приложения REST API в зарегистрированный ApplicationEventListener - PullRequest
0 голосов
/ 25 февраля 2019

В одном из моих вариантов использования я хочу передать несколько параметров из свойств ресурса приложения Spring boot Rest API, и эти параметры должны прослушиваться зарегистрированным ApplicationEventListener или ApplicationEvent в Джерси.Может ли какой-нибудь орган, пожалуйста, подскажите мне, как мне этого добиться.Ниже моя база кода

package com.learning;
import org.springframework.boot.context.ApplicationPidFileWriter;
import org.springframework.context.ConfigurableApplicationContext;
public class ABCApplication {

public static void main(String args[])
{
    ConfigurableApplicationContext context = 
    SpringApplication.run(ABCApplication.class, args);
    context.addApplicationListener(new ApplicationPidFileWriter());
    context.addApplicationListener(new TestingListener());
}
}

Вот мой слушатель, который должен быть запущен и получить эти параметры из Rest API.

  import org.glassfish.jersey.server.monitoring.ApplicationEvent;
  import org.glassfish.jersey.server.monitoring.ApplicationEventListener;

  public class TestingListener implements ApplicationEventListener {

  @Override
  public void onEvent(ApplicationEvent event) {

    if (event.getType() == 
   ApplicationEvent.Type.INITIALIZATION_APP_FINISHED) {
        final ResourceModel resourceModel = event.getResourceModel();
        final ResourceLogDetails logDetails = new 
       ResourceLogDetails();
        resourceModel.getResources().stream().forEach((resource) -> {    
       logDetails.addEndpointLogLines(getLinesFromResource(resource));
        });
        logDetails.log();
    }
}

Присоединение моего ресурса

   @Api
   @Path("/resource")
   public static class MyResource {

    @GET
    @Path("/get/path")
    public String getMethod() {
        return "get";
    }

    @POST
    public void post(String entity) {
    }

}

Итак, я ожидаю вывод

  GET  resource/get/path
  POST resource

Но это моя бизнес-логика, и я хочу получить еще несколько значений, которые должны быть получены из файла свойств ресурсов приложения.

1 Ответ

0 голосов
/ 25 февраля 2019

Хорошо, поскольку для меня не ясно, что и как вам нужно для управления вентиляционными отверстиями, я приведу вам стандартный пример:

Чтобы опубликовать событие в весенней загрузке, вы можете создать службу, управляющую публикацией:

@Component
public class CustomSpringEventPublisherService {
    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;

    public void publishCustomEvent(final String message) {
        System.out.println("Publishing custom event. ");
        CustomSpringEvent customSpringEvent = new CustomSpringEvent(this, message);
        applicationEventPublisher.publishEvent(customSpringEvent);
    }
}

CustomSpingEvent - это POJO, содержащий вашу полезную нагрузку и источник:

public class CustomSpringEvent extends ApplicationEvent {
    private String message;

    public CustomSpringEvent(Object source, String message) {
        super(source);
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
}

Затем вы можете реализовать прослушиватель следующим образом:

@Component
public class AnnotationDrivenContextStartedListener {

    @EventListener
    public void handleContextStart(CustomSpringEvent event) {
        System.out.println("A custom event and his payload ->"+event.getMessage());
    }
}

Теперь в вашем случае выможно реализовать прослушиватель, как показано, и в контроллере вы можете поместить службу издателя: @RestController @RequestMapping ("/") открытый класс YourController {

 private final CustomSpringEventPublisherService customSpringEventPublisherService;

public YourController(CustomSpringEventPublisherService customSpringEventPublisherService) {
    this.customSpringEventPublisherService = customSpringEventPublisherService;
}


@GetMapping(value = "/resource")
public ResponseEntity<PublicationDto> getResource() {
    // Create CustomSpringEvent
    CustomSpringEvent customSpringEvent = new CustomSpringEvent(...)

    this.customSpringEventPublisherService.publishCustomEvent(customSpringEvent);
}

}

Это действительно концептуальноработать и не тестироваться.

Надеюсь, это поможет вам понять, как это работает

...