Основной метод SpringApplication.run
Я создал проект в Eclipse, используя шаблон проекта Spring Starter.
Он автоматически создает файл класса приложения, и этот путь соответствует пути в файле POM.xml, поэтому все хорошо. Вот класс Application:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
//SpringApplication.run(ReconTool.class, args);
ReconTool.main(args);
}
}
Это приложение командной строки, которое я создаю, и чтобы запустить его, мне пришлось прокомментировать строку SpringApplication.run и просто добавить основной метод из моего другого класса для запуска.
Помимо этой быстрой дробилки, я могу создать ее с помощью Maven, и она работает как приложение Spring, вроде.
Я бы предпочел, однако, не прокомментировать эту строку и использовать полную инфраструктуру Spring. Как я могу это сделать?
Ответы
Ответ 1
Вам нужно запустить Application.run()
, потому что этот метод запускает всю Spring Framework. Приведенный ниже код объединяет ваш main()
с Spring Boot.
Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
ReconTool.java
@Component
public class ReconTool implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
main(args);
}
public static void main(String[] args) {
// Recon Logic
}
}
Почему бы и нет SpringApplication.run(ReconTool.class, args)
Потому что таким образом пружина настроена не полностью (без сканирования компонентов и т.д.). Создается только bean-компонент, определенный в run() (ReconTool).
Пример проекта: https://github.com/mariuszs/spring-run-magic
Ответ 2
Использование:
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
//do your ReconTool stuff
}
}
будет работать при любых обстоятельствах. Хотите ли вы запустить приложение из IDE или из инструмента сборки.
Используя maven, просто используйте mvn spring-boot:run
в то время как в Gradle это будет gradle bootRun
Альтернативой добавлению кода в метод run является наличие Spring Bean, который реализует CommandLineRunner
. Это будет выглядеть так:
@Component
public class ReconTool implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
//implement your business logic here
}
}
Ознакомьтесь с этим руководством из официального репозитория Spring.
Полную документацию по Spring Boot можно найти здесь here
Ответ 3
Еще один способ - расширить приложение (поскольку мое приложение предназначалось для наследования и настройки родителя). Он автоматически запускает родительский элемент и его commandlinerunner.
@SpringBootApplication
public class ChildApplication extends ParentApplication{
public static void main(String[] args) {
SpringApplication.run(ChildApplication.class, args);
}
}