一个独立的通用项目A,提供通用配置,里面有一个类
@RestController
public class CustomErrorController implements ErrorController {
@Autowired
private ErrorAttributes errorAttributes;
//...
}
现在有另一个项目B依赖于上面的项目A,但这不是一个web项目只执行一些业务逻辑然后退出。所以在application.properties中我有这样的配置:
spring.main.web_environment=false
但是当运行项目B时,它失败了,因为这个例外:
No qualifying bean of type [org.springframework.boot.autoconfigure.web.ErrorAttributes] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
那么如何解决这个问题呢?可以在B的pom.xml中排除CustomErrorController
,或者如果不是网络项目,则无法加载CustomErrorController
?
答案 0 :(得分:0)
spring.main.web_environment=false
禁用嵌入式容器,即使它存在于您的项目中。它不会执行黑魔法来防止您的类被实例化。
如果您正在使用组件扫描并且提供需要Web环境的类,则它将失败(如您所见)。也许您需要在几个模块中重构项目并将Web部件隔离在一个单独的项目中?
答案 1 :(得分:0)
排除CustomErrorController
类
@ComponentScan(basePackages = "com.foo",
excludeFilters = {@ComponentScan.Filter(value = ProjectAApplication.class,type = FilterType.ASSIGNABLE_TYPE),
@ComponentScan.Filter(value = CustomErrorController.class, type = FilterType.ASSIGNABLE_TYPE)})
@SpringBootApplication
public class ProjectBApplication implements CommandLineRunner {