Задача
Запустить некий код до того, как начнет запускаться приложение. В моем случае нужно вызвать Security.addProvider().
Решение
Можно, конечно, сделать вызов в методе main() класса, аннотированного как @SpringBootApplication, перед тем, как вызывать SpringApplication.run():
@SpringBootApplication
public class AclImportApplication {
public static void main(String[] args) {
Security.addProvider(...);
SpringApplication.run(AclImportApplication.class);
}
}
Вот только код main() не вызывается при запуске @SpringBootTest, что создает необходимость создавать какие-то костыли для работоспособности тестов. Более правильный вариант - написать свою имплементацию интерфейса org.springframework.boot.SpringApplicationRunListener, где в методе starting() поместить нужный код. Имплементация должна обязательно иметь конструктор, принимающий SpringApplication app и String[] args, а также ссылку на имплементацию необходимо прописать в META-INF/spring.factories:
org.springframework.boot.SpringApplicationRunListener=my.custom.AppRunListener
Комментариев нет:
Отправить комментарий