Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException
问题描述
今天写Spring Boot项目的时候,突发奇想想要改一个包的名字。按理来说应该没问题,也成功打成了war包,但重新放到Tomcat下面跑却报了下面的错误。
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘graphController’ for bean class [com.gooood.GooooCoin.controller.GraphController] conflicts with existing, non-compatible bean definition of same name and class [com.gooood.GooooCoin.KGController.GraphController]
查了查资料发现是因为在两个不同的Package中定义了同样名字的Bean
但感觉很奇怪,明明仅仅只是把原来的controller改成了KGController,为什么原来的controller还阴魂不散呢?
解决方案
因为我之前就在Tomcat部署过这个项目.点开Tomcat的webapps\你的项目路径\WEB-INF\classes,就可以看到生成的.class文件,然后发现竟然还有controller这个文件夹,而点进去一看里面的graphController.class的时间是上次部署的时间。
我通过下面的步骤解决了问题
- 关闭Tomcat
- 删除webapps\你的项目路径\WEB-INF\classes下的controller文件夹(就是变更了名字的那个文件夹),清空回收站(不确定是否必要)
- 删除项目target\classes\com\gooood.GooooCoin目录下controller文件夹
- 使用mvn package重新打包成war包,然后移动到tomcat的webapps下
- 启动Tomcat