更改 Spring Boot 项目以继承自定义依赖项管理
我有一个小的Spring Boot应用程序,我必须适应使用自定义父级。Google发现了很多关于如何迁移到Spring Boot的例子,但是我对从Spring Boot迁移(我一开始几乎不知道)感到茫然。
原因
简而言之,此应用程序是作为一种概念验证而开发的,开发人员选择了最先进的技术。
现在,这个应用程序将继续存在,我们需要将其集成到我们的框架中。因此,作为一个Maven项目,它应该继承我们共同的父级之一,尽管我的理解是Spring Boot项目应该继承Spring Boot启动器父POM。
[编辑]我错了:可以在没有父POM的情况下使用Spring Boot。因此,删除Spring Boot不是一项义务,但是我们的父POM包括自己的版本管理,这迫使我覆盖启动器中包含的多个版本。
为什么我们需要从父母那里继承
我们有一个企业框架用于我们所有的项目。为了使事情变得更容易,我们在父POM中管理许多框架的版本。这些版本与我们的小批处理项目中的 spring-boot-依赖项中的版本冲突的一些示例:
- 弹簧框架(内部:3.2.4;弹簧靴 1.2.2: 4.1.5)
- 春季批次 (ih: 2.2.0; sb: 3.0.3)
- 速度 (ih: 1.5; sb: 1.7)
- 朱尼特 (ih: 4.11; sb: 4.12)
- ...(我们管理大约90个版本)
我显然不能随意升级这些版本。请记住,此框架用于许多项目,任何更改都可能产生巨大且不受控制的后果。
其他上下文
目标是获得一点弹簧批量应用。它必须从命令行获取一些输入,并在执行失败时返回退出代码。以下是启动器的核心,但我对任何更好的方法都持开放态度。12
我们的批量启动器类
如果完全放弃Spring Boot,我需要调整这个启动器类,但是,由于主要习惯于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 Batch应用程序的最佳方法是什么,以便我可以使用我自己的Maven父级?