SpringBoot多模块jar依赖原理疑问

龙3叔 发布于 2018/12/28 16:56
阅读 503
收藏 1

大家好,最近在做项目迁移,将之前的项目迁移到SpringBoot上,第一步不准备做分布式,先基于SpringBoot的jar依赖吧项目搭建起来,在做完之后发现了一个问题,比较有趣,应该是牵扯到SpringBoot jar依赖的一些原理问题,大家来看看:

我的项目结构如下:

- common

- health

     |  - - - - core

     |  - - - - boss

     |  - - - - web

简单说一下,

  • common是我们项目组所有项目的公共依赖项目
  • core包含了所有的pojo,mapper(interface),service,依赖common
  • boss是运营后台,依赖core,common
  • mgr是前端服务,依赖core,common

每个项目都是SpringBoot项目,最后的三个项目的父pom都是health,而health和common的父pom是 spring-boot-starter-parent

问题来了,所有的依赖都是直接的pom依赖,暂时还没有使用dubbo,项目中的事务处理采用配置文件的方式在core模块的main方法上使用@ImportResource("classpath:application-tx.xml")来引用,奇怪的是,当web的main方法运行起来的时候,core上的这个事务配置文件居然还起作用,然而web的main方法上没有事务配置文件的加载,不理解,难道web运行的时候,core的main方法也会运行?

想研究一下,居然无从下手,哪位大神指点一二,小弟不胜感激!!!   (● ̄(エ) ̄●)

加载中
0
d
dingxy3

如果你添加的是 spring-boot-starter-jdbc 依赖,框架会默认注入 DataSourceTransactionManager 实例。如果你添加的是 spring-boot-starter-data-jpa 依赖,框架会默认注入 JpaTransactionManager 实例

邹海彬
邹海彬
回复 @龙3叔 : 不是main方法上的注解,是main所在类上有注解吧,main方法肯定不会运行
龙3叔
龙3叔
不是这个问题,core模块的main方法上有事务的配置xml的引用注解,当core当做jar被依赖的时候,core的main方法上的事务配置文件为什么还生效?这个是问题的所在
0
LYB_124321
LYB_124321

原因应该是注解扫描问题,排除法解决。

大概说一下自己了解的:

1. common 和 core 如果只作依赖,不需要启动最好删掉 main 方法或者打包排除。

2. 按您所说,基本可以判定,前部分的包路径应该是一样的,所以被扫描到了,可以在 boss 和 web 的启动类上把 core 的 main 方法包路径的扫描排除。

 

返回顶部
顶部