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

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



spring boot项目中启动成功自动存在两个druid数据源实例_第1张图片
jprofiler,

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

下面是我项目结构



spring boot项目中启动成功自动存在两个druid数据源实例_第2张图片


spring boot项目中启动成功自动存在两个druid数据源实例_第3张图片


spring boot项目中启动成功自动存在两个druid数据源实例_第4张图片


spring boot项目中启动成功自动存在两个druid数据源实例_第5张图片

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


spring boot项目中启动成功自动存在两个druid数据源实例_第6张图片

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

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

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



spring boot项目中启动成功自动存在两个druid数据源实例_第7张图片


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

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

你可能感兴趣的:(spring boot项目中启动成功自动存在两个druid数据源实例)