Есть ли правильный способ использовать @PostConstruct в Micronaut? - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь напечатать сообщение после запуска приложения с помощью @PostConstruct, но ничего не печатается.

package dev.renansouza.server;

import javax.annotation.PostConstruct;
import javax.inject.Singleton;

@Singleton
public class ServerService {

    @PostConstruct
    public void print() {
        System.out.println("Hello!");
    }
}

Я прочитал, что @PostConstruct Lazy.Значит ли это, что мне нужно сделать что-то еще, чтобы это работало?

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

Вы также можете использовать аннотацию @EventListener для получения того, что вы, если использование @PostConstruct для вас не так важно.

Например, в вашем случае вы можете добавить следующий код в любой класс для прослушивания события запуска приложения.

@EventListener
void onStartup(ServerStartupEvent event) {
    println("Hey, I work from anywhere in project..")
}

Код, указанный выше, в Groovy

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

2 голосов
/ 04 апреля 2019

См. Проект на https://github.com/jeffbrown/renansouzapostconstruct.

https://github.com/jeffbrown/renansouzapostconstruct/blob/master/src/main/java/renansouzapostconstruct/ServerService.java

package renansouzapostconstruct;

import javax.annotation.PostConstruct;
import javax.inject.Singleton;

@Singleton
public class ServerService {

    @PostConstruct
    public void print() {
        System.out.println("Hello!");
    }
}

https://github.com/jeffbrown/renansouzapostconstruct/blob/master/src/main/java/renansouzapostconstruct/DemoController.java

package renansouzapostconstruct;

import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.HttpStatus;

@Controller("/demo")
public class DemoController {

    private ServerService serverService;

    public DemoController(ServerService serverService) {
        this.serverService = serverService;
    }

    @Get("/")
    public HttpStatus index() {
        return HttpStatus.OK;
    }
}

При запуске приложения вы не увидитесообщение распечатано как стандартное, потому что компонент службы не будет инициализирован.Отправьте запрос на номер http://localhost:8080/demo/, и вы увидите сообщение, напечатанное на стандартный вывод.

Надеюсь, это поможет.

...