在Web应用程序外部使用Spring Boot中的实体和存储库定义

时间:2019-02-22 22:59:20

标签: spring-boot

我有一个Spring Boot 2.1 Web应用程序。效果很好。我可以将其打包为WAR或JAR。 在我的pom.xml文件中,使用:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
</parent>

该应用程序具有许多实体类和许多Spring Data存储库。几乎总是我们将其部署为WAR文件。

这是问题:有时我们需要在数据库上执行命令行或批处理。例如,我们可能想运行一个过程来调整存储在数据库中的所有图像的大小,这些图像应由管理员从命令行运行。

如果mvn install在本地Maven存储库中安装JAR文件,那很好,我可以在另一个项目中使用该工件来访问我的实体和存储库定义。我已经尝试了很多事情,但是每当我将项目构建为JAR文件时,当我查看JAR时,我所有的类都在BOOT-INF / classs中,这不允许它们从另一个项目中引用。 / p>

我能够通过在spring-boot-maven-plugin中使用重新打包目标来解决此问题。但是,当我这样做时,它确实生成了一个jar文件,但是我的CLI应用程序无法使用创建的存储库bean正确启动。

我阅读了Spring Boot文档:

  

像war文件一样,不能使用Spring Boot应用程序   作为依赖。如果您的应用程序包含您想要的类   与其他项目共享,建议的方法是移动   代码放入一个单独的模块中。然后可以依赖单独的模块   取决于您的应用程序和其他项目。

有没有更简单的方法来执行此操作,这样我就不必创建另一个项目并进行管理了?还是为实体和Spring Data存储库创建一个单独的项目是一个好习惯吗?

1 个答案:

答案 0 :(得分:0)

因此,简而言之,您只想拥有一个包含您的实体和存储库的库?这样就足以配置一个简单的maven项目(标准项目),而不是从Spring Boot继承而来。

由于Spring Boot在幕后使用了Spring Data JPA,因此您只需要Spring Data JPA声明,因此添加将其标记为XCTest的依赖项。

Linux

这不允许项目本身包含Spring Data JPA依赖关系,因为它将由使用Spring Boot的最终项目包含。但是,您需要声明要使用的参考版本,可以使用当前Spring Boot项目使用的参考版本(可以在maven依赖树中查看)。

https://spring.io/projects/spring-data-jpa

Difference between maven scope compile and provided for JAR packaging