2016-12-06 94 views
7

我有以下的几个我@SpringBootApplication S的的类路径@Configuration类:春季启动:配置类会被忽略,而不是装

@Configuration 
@Import({MainConfig.class, RestConfig.class}) 
public class ApiConfig { 

    @Bean 
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) 
    public Client client() throws ExecutionException, InterruptedException { 
     return service.create(Client.class); 
    } 

} 

我使用这个配置(与命名不同的两个服务Client类)。

服务1正常启动和加载这个配置。在启动期间我可以看到ApiConfig类型的bean被热切初始化。

服务2错误地启动:上述结构的类被简单地忽略,而不是初始化。

的服务在不同的JVM启动。

疗法服务有几乎相同的,非常小的application.properties文件:

spring.application.name=xxx-api 
server.port=0 
eureka.name=xxx.api 
# Only for reading properties from a central location 
context.initializer.classes=com.package.contextClass 

我什至不知道我可以写进去的问题是什么样的附加信息。我现在已经历了几个小时的日志,看到没有明显的差异,只是简单地忽略了我的@Configuration班。

有没有人有过这个问题?

+0

如何应该是这个配置类来加载?你没有展示你的Spring Boot bootstrap。 – chrylis

+0

对不起,它应该使用'@ SpringBootApplication'加载,即使用'@ ComponentScan'和'@ EnableAutoConfiguration'。 – user991710

+2

在这两种情况下,您的Springboot应用程序类都在同一个包中的@Configuration类? –

回答

18

的@SpringBootApplication注释(或者,更精确地推断@ComponentScan注解)默认仅扫描类路径旁边和注解的类的下方。

所以,你的配置类必须放在旁边或在您的应用程序类的子包。

+0

这是正确的答案。谢谢! – user991710