Выполните метод после запуска Springboot

1. Аннотация @PostConstruct

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

@Component
public class StartInit {
    
    
//
//    @Autowired   可以注入bean
//    ISysUserService userService;

    @PostConstruct
    public void init() throws InterruptedException {
    
    
        Thread.sleep(10*1000);//这里如果方法执行过长会导致项目一直无法提供服务
        System.out.println(123456);
    }
}

Два, интерфейс CommandLineRunner

Реализуйте интерфейс CommandLineRunner, а затем вызовите метод, который будет вызываться в методе запуска.Преимущество заключается в том, что при выполнении метода проект инициализируется, и служба может предоставляться в обычном режиме.

В то же время этот метод также может принимать параметры, которые могут быть обработаны в соответствии с параметрами, переданными при запуске проекта: java -jar demo.jar arg1 arg2 arg3.

@Component
public class CommandLineRunnerImpl implements CommandLineRunner {
    
    
    @Override
    public void run(String... args) throws Exception {
    
    
        System.out.println(Arrays.toString(args));
    }
}

3. Реализовать интерфейс ApplicationRunner

Реализация интерфейса ApplicationRunner в основном аналогична реализации интерфейса CommandLineRunner.

Разница только в формате параметров, передаваемых при запуске.CommandLineRunner не имеет ограничений на формат параметров.Формат параметра интерфейса ApplicationRunner должен быть: –key=value

@Component
public class ApplicationRunnerImpl implements ApplicationRunner {
    
    
    @Override
    public void run(ApplicationArguments args) throws Exception {
    
    
        Set<String> optionNames = args.getOptionNames();
        for (String optionName : optionNames) {
    
    
            List<String> values = args.getOptionValues(optionName);
            System.out.println(values.toString());
        }
    }
}

В-четвертых, реализовать ApplicationListener

Реализация интерфейса ApplicationListener и реализация интерфейсов ApplicationRunner и CommandLineRunner не повлияют на службу, и служба может предоставляться в обычном режиме.Обратите внимание на отслеживаемые события, обычно ApplicationStartedEvent или ApplicationReadyEvent, и другие события не могут быть внедрены в bean-компонент.

@Component
public class ApplicationListenerImpl implements ApplicationListener<ApplicationStartedEvent> {
    
    
    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
    
    
        System.out.println("listener");
    }
}

Пять, последовательность выполнения четырех методов

Метод аннотации @PostConstruct всегда выполняется первым

Если вы слушаете событие ApplicationStartedEvent, оно должно быть выполнено до CommandLineRunner и ApplicationRunner.

Если вы слушаете событие ApplicationReadyEvent, оно должно выполняться после CommandLineRunner и ApplicationRunner.

CommandLineRunner и ApplicationRunner по умолчанию выполняются сначала ApplicationRunner.Если @Order указан обеими сторонами, они будут выполняться в порядке размера @Order, и больший из них будет выполняться первым.

Supongo que te gusta

Origin blog.csdn.net/weixin_44816664/article/details/130045838
Recomendado
Clasificación