ribbonconfiguration的包一定要放在Application启动类的外面,这是spring的一个小坑
原因ribbonconfiguration是一个组合注解,上面有@Component注解,也就是说ribbonconfiguration也是一种特殊的Component,
再看Application启动类上面的注解,也是一个组合注解,其中有一个是@ComponentScan,这个注解是用来扫描@Component,@@repository,@Controller,@Component,@Service 等等这些注解都会被扫描到包括@Configuration。启动类会扫描他所在包下面的所有@Component,所以ribbonconfiguration的包一定不能放在启动类包下面。
原因是:
spring的上下文其实是一个树状的上下文,而@SpringBootApplication上下文其实是一个主上下文,而
ribbon也是一个上下文,是一个子上下文,父子上下文扫描的包一旦重叠,会导致各种各样奇葩的问题:
例如 :事务不生效
具体内容讲解:https://blog.csdn.net/qq_32588349/article/details/52097943
英文文档关于此类的讲解:(大概意思是说如果放在启动类下,会被共享成为全局的配置)
所以有两种方法,一种把ribbonconfiguration放在启动类外面,另一种就是在yml中配置