У меня есть небольшое приложение загрузки Spring, которое я должен адаптировать для использования настраиваемого родителя. Google находит множество примеров того, как перейти на Spring Boot, но я не понимаю, как перейти от Spring Boot (что я едва знаю для начала).
Причины
Чтобы сделать что-то не так, это приложение было разработано как своего рода доказательство концепции, и разработчик выбрал самые современные технологии.
Теперь это приложение будет продолжать жить, и мы должны интегрировать его в нашу структуру. Поэтому, как проект Maven, он должен наследовать одного из наших общих родительских элементов, хотя это мое понимание Spring Проекты загрузки должны наследоваться от родительского родительского родителя Spring.
[Изменить] Я ошибался: возможно использовать Spring Boot без родительского ПОМ. Поэтому удаление Spring Boot не является обязательством, но наш родительский POM включает в себя собственное управление версиями, которое обязывает меня переопределить несколько версий, включенных в стартер.
Почему нам нужно наследовать от нашего родителя
У нас есть инфраструктура предприятия, используемая во всех наших проектах. Чтобы упростить задачу, мы управляем версиями многих фреймворков в нашей родительской POM. Некоторые примеры, когда эти версии конфликтуют с теми из spring -boot-зависимостей в нашем маленьком пакетном проекте:
- Spring framework (собственный: 3.2.4; Spring Загрузка 1.2.2: 4.1.5)
- Spring Пакет (ih: 2.2.0; sb: 3.0.3)
- Velocity (ih: 1.5; sb: 1.7)
- Junit (ih: 4.11; sb: 4.12)
- ... (мы управляем примерно 90 версиями)
Я, очевидно, не имею права обновлять эти версии. Имейте в виду, что эта структура используется во многих проектах, и любое изменение может иметь драматические и неконтролируемые последствия.
Дополнительный контекст
Цель состоит в том, чтобы получить небольшое пакетное приложение Spring. Он должен взять некоторый ввод из командной строки и вернуть код выхода 12
, если выполнение завершится с ошибкой. Ниже ядро пусковой установки, но я открыт для любого лучшего способа сделать это.
Наш класс пусковой установки
Если полностью отказаться от Spring Boot, мне нужно будет адаптировать этот класс launcher, но, будучи в основном используемым для контекстов XML Spring, мне это немного сложно.
// ...
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan("my.config.package")
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
// ...
SpringApplication app = new SpringApplication(Application.class);
app.setWebEnvironment(false);
final Map<String, Object> maps = new HashMap<>();
maps.put("input", "file:" + inputPath);
app.setDefaultProperties(maps);
ConfigurableApplicationContext ctx = app.run(args);
JobExecutionSavingListener listener = ctx.getBean(JobExecutionSavingListener.class);
final JobExecution jobExecution = listener.getJobExecution();
if (jobExecution.getExitStatus() != ExitStatus.COMPLETED) {
System.exit(12);
return;
}
System.exit(0);
}
}
Вопрос
Каков наилучший способ изменить мой код для адаптации моего пакетного приложения Spring, чтобы я мог использовать свой собственный родитель Maven?