如何在Spring Boot REST应用程序中重用类?

时间:2016-12-19 19:37:06

标签: java rest spring-boot

我有一个Spring Boot REST应用程序,其中包含JPA实体和Repository类(以及相关服务),它们运行良好。现在我想将这些类重用于其他目的,例如每周CRON作业和将从命令行运行的类似的一次性进程。

最好的方法是什么?挑战是持久化上下文属性是在application.properties中设置的,除非初始化Application类,否则不会初始化持久化上下文。

我可以将所有这些类分解为一个单独的项目,并使用不同的方式在那里定义持久化上下文,但如果实体或DAO方法发生任何变化,这将成为一种维护问题。

我真正想要的是从命令行有一种方法告诉Spring Boot运行另一个类而不是主应用程序(并且正确初始化持久化上下文)。有什么办法吗?

(注意我问过一个没有回复的类似问题:Possible to use Spring Boot repositories from another main class?

[编辑]可以通过创建实现CommandLineRunner的@component来实现吗?我只是希望它运行一个简单的一次性进程而不是完整的REST应用程序。

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点。 您可以拥有多个Main类,然后选择您想要启动哪个应用程序select main class,但是如果您不知道ComponetScan如何工作,那么如果您不小心,最终将加载这两个应用程序。

另一种方法是使用Profiles,您可以在启动Spring应用程序时设置配置文件,然后使用将启动Tomcat的Web配置文件,以及不启动Tomcat的命令行配置文件。

在我正在进行的项目中,我们选择将数据层作为一个完全独立的模块(相同的gradle项目),它具有自己的Spring Context。然后将数据层spring上下文用作其他应用程序的父上下文,作为可重用组件。如果共享代码被清楚地标记,而不是在同一代码中存在多个应用程序,那么关注点就会更清晰了。