spring boot项目中启动成功自动存在两个druid数据源实例

项目上线在即,想分析一下jvm gc情况,安装了可视化工具jprofiler,无心中竟然发现我的项目中自动存在两个druid数据源实例,截图如下



jprofiler,

但是奇怪的是我的项目中,并没有指定配置多数据源的地方,那问题到底出在什么地方呢?

下面是我项目结构






另外附上spring boot 启动类,并在启动类注解中去除spring boot 自动装配的数据源配置


以上是项目中关于数据源配置的类

在项目启动时,通过断点数据源实例化类发现,启动过程中确实进入了两次,而且mybatis配置类,以及mybatis扫描类都进入了两次。启动完成后项目中确实同时存在了两个druid数据源实例,和jprofiler MBeans 显示的一致。

最后通过分析发现,是由于我在项目中除了spring boot 启动类之外的另一个关于webMvc的启动类里加了一个@ComponentScan("com.包名"),附图




该注册的作用是扫描项目中该包下的所有类,而在spring boot启动类中已有的注解@SpringBootApplication的源码中发现已经有了扫描组件的注解了,相当于在整个项目启动过程中,加载了两次上下文。才实例化了两个数据源

去掉该注解以后,项目启动成功,也没有再实例化两次数据源了,问题解决。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容