Как создать приложение Spring Boot, которое слушает только канал Redis и отправляет события? - PullRequest
0 голосов
/ 13 апреля 2020

Я хочу создать промежуточное программное обеспечение, которое прослушивает канал Redis и преобразует события, отправляя их другим службам. Другие сервисы слишком старые и fr agile на ощупь, так что это в основном шаблон адаптера. Файл build.gradle выглядит следующим образом:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

Проблема в том, что приложение завершает работу сразу после его запуска. Я не знаю, как заставить Spring зависнуть там и продолжать слушать события Redis.

1 Ответ

1 голос
/ 13 апреля 2020

Одна возможность - использовать countDownLatch в отдельном потоке.

@Bean
CountDownLatch latch(){
    //Create countdownlatch with 1 countdown
    CountDownLatch latch = new CountDownLatch(1);
    //Start thread
    new Thread(){
        @Override
        //Since you are using lombok you can use sneakyThrows, so you 
        // don't have to handle the InterruptedException
        @SneakyThrows
        public synchronized void run() {
            //Hang this thread until counted down
            latch.await();
        }
    }.start();
    return latch;
}

//Then you can autowire into any future bean/component and shutdown 
// whenever you want by calling latch.countDown()
@Bean
String die(CountDownLatch latch){
    latch.countDown();
    return "dead";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...