Spring boot 如何最好地将Spring启动服务/存储库层拆分为一个单独的Maven项目?
我正在开发一个Spring引导应用程序,其中包含用于视图的Thymeleaf模板,以及三个“层”中的Java类:控制器、服务和存储库。我想将服务层和存储库层移动到一个单独的Maven项目(我称之为“服务层”)中,“视图/控制器”应用程序可以将其作为依赖项引入 这样做的原因是,我希望对其他具有不同受众的未来应用程序使用相同的服务/存储库/数据库逻辑。我没有资格进入(微型)服务体系结构,该体系结构的前端和后端分别运行程序,但我可以在构建时分离代码并将其统一起来 区分服务和存储库的最佳方法是什么?这里有一些具体的要点需要澄清,但可能还有其他问题我还没有弄清楚,我需要问:Spring boot 如何最好地将Spring启动服务/存储库层拆分为一个单独的Maven项目?,spring-boot,maven,dependencies,modularity,Spring Boot,Maven,Dependencies,Modularity,我正在开发一个Spring引导应用程序,其中包含用于视图的Thymeleaf模板,以及三个“层”中的Java类:控制器、服务和存储库。我想将服务层和存储库层移动到一个单独的Maven项目(我称之为“服务层”)中,“视图/控制器”应用程序可以将其作为依赖项引入 这样做的原因是,我希望对其他具有不同受众的未来应用程序使用相同的服务/存储库/数据库逻辑。我没有资格进入(微型)服务体系结构,该体系结构的前端和后端分别运行程序,但我可以在构建时分离代码并将其统一起来 区分服务和存储库的最佳方法是什么?这里
- 在服务层工件的POM中我需要什么启动器和依赖项<代码>弹簧启动启动器父级<代码>spring boot starter jdbc?数据库驱动程序
- 如果
和@Service
注释位于服务层工件中,它们对我有什么帮助吗@Repository
- 例如,在“服务层”项目中,我是否需要一个
注释类来运行测试?spring boot maven插件怎么样?(后者似乎阻止了“mvn安装”阶段。)@SpringBootApplication
- 我应该将数据源属性(如JDBCURL)放在哪里?在服务层的
中,还是在依赖于它的UX层项目中application.yml
指向以这种方式划分的工作代码的指针是受欢迎的 经过多次尝试和错误,这就是我最终得到的结果,它是有效的:
服务层
是一个包含@service
和@Repository
注释的Maven项目
- 它包含
,spring boot starter父级
,spring boot starter web
,spring boot starter jdbc
依赖项,以及数据库驱动程序。还有一些测试范围的依赖项:JUnit、spring boot starter安全性
和SpringBootStarter测试
。这几乎是前端应用程序使用的所有依赖项,不包括Thymeleaf和一些Webjar工件SpringSecurity测试
- 我不知道注释是否对我有用,但我保留了它们
- 过了很久,我记得Maven项目有一个类和资源的
目录,这些类和资源将只用于测试,而不会与打包的JAR或WAR捆绑在一起。在该目录结构中,我放置了一个test
注释类,以及带有数据库连接信息的@SpringBootApplication
。这用于运行集成测试,不会影响依赖于服务层的web应用程序application.yml
- 它们将
声明为依赖项服务层
- 它们还声明了所有Spring引导依赖项。很多都是多余的,但这不是Maven的问题。其他依赖项包括
和一些其他thymeleaf依赖项,以及org.webjar中的一些依赖项,其中包括Bootstrap和JQueryspring boot starter thymeleaf
- 它们也有自己的
注释类和@SpringBootApplication
。这些是“真正的”配置,而不仅仅是测试配置application.yml
- 所有
类以及Thymeleaf模板、静态文件和@Controller
消息。属性都在这些前端项目中
- Spring安全配置(即
实例)在这些项目中。(不过,WebSecurityConfigureAdapter
位于服务层。)UserDetailsService
服务层
,它的工作就相当顺利
一个有趣的复杂问题是,Spring引导应用程序将只扫描其自身Java包中的服务和存储库类。最初,我在包层次结构中有服务层,如“com.mycompany.servicetier
”,在包中有前端,如“com.mycompany.appone
”和“com.mycompany.apptwo
”。我必须将每个前端项目中的@SpringBootApplication
注释类移到更高一级的“com.mycompany
”,这样它就可以发现“它下面”的服务层类以进行依赖注入