项目上线在即,想分析一下jvm gc情况,安装了可视化工具jprofiler,无心中竟然发现我的项目中自动存在两个druid数据源实例,截图如下
但是奇怪的是我的项目中,并没有指定配置多数据源的地方,那问题到底出在什么地方呢?
下面是我项目结构
另外附上spring boot 启动类,并在启动类注解中去除spring boot 自动装配的数据源配置
以上是项目中关于数据源配置的类
在项目启动时,通过断点数据源实例化类发现,启动过程中确实进入了两次,而且mybatis配置类,以及mybatis扫描类都进入了两次。启动完成后项目中确实同时存在了两个druid数据源实例,和jprofiler MBeans 显示的一致。
最后通过分析发现,是由于我在项目中除了spring boot 启动类之外的另一个关于webMvc的启动类里加了一个@ComponentScan("com.包名"),附图
该注册的作用是扫描项目中该包下的所有类,而在spring boot启动类中已有的注解@SpringBootApplication的源码中发现已经有了扫描组件的注解了,相当于在整个项目启动过程中,加载了两次上下文。才实例化了两个数据源
去掉该注解以后,项目启动成功,也没有再实例化两次数据源了,问题解决。