当前位置: 首页 > 知识库问答 >
问题:

将Spring Boot项目更改为继承自定义依存关系管理

孙星鹏
2023-03-14

我有一个小的Spring Boot应用程序,我必须对其进行调整,以使用自定义父级。Google找到了很多关于如何迁移到Spring Boot的例子,但我对如何从Spring Boot迁移感到困惑(我一开始几乎不知道)。

简而言之,这个应用程序是作为一种概念验证开发的,开发人员选择了最先进的技术。

现在,这个应用程序将继续存在,我们需要将它集成到我们的框架中。作为一个Maven项目,它因此应该继承我们共同的父级之一,尽管我的理解是Spring Boot项目应该继承Spring Boot启动器父级POM。

[编辑]我不正确:可以在没有父POM的情况下使用Spring Boot。因此,删除Spring Boot不是一项义务,但我们的父POM包含其自己的版本管理,这迫使我覆盖starter中包含的几个版本。

我们的所有项目都使用了企业框架。为了简化工作,我们在父POM中管理许多框架的版本。在我们的小批量项目中,这些版本与Spring Boot依赖项中的版本冲突的一些示例:

  • Spring框架(内部:3.2.4;Spring靴1.2.2:4.1.5)

显然,我无权升级这些版本。请记住,这个框架在许多项目中都使用过,任何更改都可能会产生戏剧性的、不可控制的后果。

目的是获得少量Spring批量应用。如果执行失败,它必须从命令行获取一些输入并返回退出代码。下面是启动器的核心,但我对任何更好的方法都持开放态度。

如果完全放弃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父级的最佳方法是什么?

共有2个答案

牛越
2023-03-14

您仍然可以使用Spring Boot来使用Spring Batch,事实上这是推荐的方法。

此外,Spring Boot项目不需要从任何父pom继承,它们只需要在您的pom中包含对Spring Boot库的依赖。

这里有一个非常简单的例子:

Spring批次示例

您应该理解,Spring Boot的唯一“特殊”之处在于,它是为以最少的Spring配置运行独立应用程序而创建的,而不是为在服务器上运行而创建的传统Spring web。

我还忘了补充一点,如果您觉得更舒服的话,您仍然可以使用XML配置而不是Java配置方法。

卜存
2023-03-14

您可以将Spring Boot与Spring Boot starter父项一起使用,也可以不使用Spring Boot starter父项作为项目的父项。这将在《Spring Boot参考指南》的本节中解释。

将其添加到项目poms中仍然可以使用Spring Boot并拥有自己的父对象

<dependencyManagement>
     <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.2.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

现在您可以定义自己的父级。添加以下依赖项应该会为您提供运行Spring Batch所需的所有jar。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
</dependencies>

不(能够)使用Spring Boot starter作为父级的缺点之一是,如果需要库的特定版本,则需要包含所有依赖项。当将其用作父对象时,可以很容易地用版本指定属性(即spring batch.version)。

 类似资料:
  • 如何编写自定义gradle插件来处理自定义存储库中自定义模块描述符中的依赖关系?gradle文档说了以下内容,但我还没有找到任何可以告诉我如何操作的内容。 即使您的项目使用的是自定义依赖关系管理系统或类似Eclipse的东西。类路径文件作为依赖关系管理的主数据,编写Gradle插件以在Gradle中使用此数据非常容易。 我一直在为ATG项目维护一个定制的常春藤解析器(源自此项目),但Gradle最

  • 我希望使用Gradle构建我的基于Groovy/Grails的项目,我们使用IntelliJ Idea作为IDE。 我使用的是IntelliJ 11.1.4版本,Gradle 1.2版本。 我的项目被配置为包含各种Groovy&Grails子项目的多项目构建。 我希望这将为我提供与通过Maven管理构建时相同的IDE支持,例如: 自动依赖关系管理(将新的依赖关系添加到各种Build.Gradle时

  • 本文向大家介绍ABAP 继承-定义,包括了ABAP 继承-定义的使用技巧和注意事项,需要的朋友参考一下 示例 信息 继承使您可以从现有类派生新类。您可以使用的INHERITING FROM加法 从超类继承的CLASS子类DEFINITION 继承 。 声明。新的类子类继承了现有类超类的所有组件。新类称为派生类的子类。原始类称为新类的超类。一个类可以有多个直接子类,但可能只有一个直接超类。 类的实现

  • 本文向大家介绍Python异常继承关系和自定义异常实现代码实例,包括了Python异常继承关系和自定义异常实现代码实例的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Python异常继承关系和自定义异常实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主要介绍 python 中异常的继承关系,及如何自定义异常 1. 异常的继

  • 自定义脚本 Gradle构建脚本的标准名称是build.gradle,在一个多项目构建的环境中,你想自定义你的构建脚本名称来显得高大上一点,因为多个项目有相同的构建脚本名称可能会混淆,接下来介绍如何使用自定义的脚本名称。 还是之前那个例子,假设所有的子项目路径都是以todo-开头,比如web子项目就是在todo-web目录下,构建脚本名称应该清晰的表示它的作用,如下图所示: 要使这个结构起作用关键