一次springboot扫描范围引起的启动报错

spring cloud 配置中心客户端启动问题 先启动了配置中心,然后启动客户端,发现打印的日志是这样的: 2020-04-29 11:13:02.333 INFO 1856 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:9009/ 2020-04-29 1... 阅读详情

公司的框架出了问题,多个项目启动报错,花费了半天时间解决,多亏最近钻研springframework源码。

背景公司有一套分布式spring alibaba架构的系统,分为边缘服务,和服务池服务,服务治理一般,没有全局规划,半年前有外购一套分布式CRM系统,强行注册到一个服务中心,突然某个版本的多个边缘服务启动报错,导致测试停顿半天。

启动代码

@CanaryCloudApplication(applicationName = "b2b-consumer-edge", serverServletContextPath = "/consumer") //框架注解
@EnableSwagger2
@EnableFeignClients(basePackages = {"com.vd.canary.**","com.kakarote.crm.api.**"})
public class ConsumerEdgeApplication {
    public static void main(String[] args) {
        CanaryApplication.run(ConsumerEdgeApplication.class, args);
    }
}

这里分析一下公司封装的框架,高度概括的看法就是“唬人”,优秀的框架检验标准就是实用,开发人员友好,不隐藏细节。

公司框架希望高度封装,让普通开发只是写调用接口,先不说业务如此复杂,框架的做到高度封装恐怕只是外包行业,比较人员水平低,不灵活,长期针对某一种产品,对于快速多变的互联网行业,框架需要保持灵活多变。

报错信息


WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/D:/apache-maven-3.0.4/maven_repository/org/codehaus/groovy/groovy/2.5.9/groovy-2.5.9.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
 _____ _________  ___       _____ 
/  __ \| ___ \  \/  |      /  __ \
| /  \/| |_/ / .  . |______| /  \/
| |    |    /| |\/| |______| |    
| \__/\| |\ \| |  | |      | \__/\
 \____/\_| \_\_|  |_/       \____/

[b2b-consumer-edge:172.16.26.41:8456] 2021-07-28 14:16:25.671 WARN 7996 [] [main] com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[b2b-consumer-edge-dev_bb.yaml] & group[DEFAULT_GROUP]
[b2b-consumer-edge:172.16.26.41:8456] 2021-07-28 14:16:25.672 INFO 7996 [] [main] org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-b2b-consumer-edge-dev_bb.yaml,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-b2b-consumer-edge.yaml,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-b2b-consumer-edge,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-crm-c-core.yaml,DEFAULT_GROUP'}]
[b2b-consumer-edge:172.16.26.41:9010] 2021-07-28 14:16:25.700 INFO 7996 [] [main] com.vd.canary.b2b.edge.consumer.ConsumerEdgeApplication : The following profiles are active: dev_bb
[b2b-consumer-edge:172.16.26.41:9010] 2021-07-28 14:16:29.122 WARN 7996 [] [main] org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'fileBillFeignClient.FeignClientSpecification' defined in null: Cannot register bean definition [Generic bean: class [org.springframework.cloud.openfeign.FeignClientSpecification]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] for bean 'fileBillFeignClient.FeignClientSpecification': There is already [Generic bean: class [org.springframework.cloud.openfeign.FeignClientSpecification]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] bound.
[b2b-consumer-edge:172.16.26.41:9010] 2021-07-28 14:16:29.131 INFO 7996 [] [main] org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
[b2b-consumer-edge:172.16.26.41:9010] 2021-07-28 14:16:29.137 DEBUG 7996 [] [main] org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter : Application failed to start due to an exception

org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'fileBillFeignClient.FeignClientSpecification' defined in null: Cannot register bean definition [Generic bean: class [org.springframework.cloud.openfeign.FeignClientSpecification]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] for bean 'fileBillFeignClient.FeignClientSpecification': There is already [Generic bean: class [org.springframework.cloud.openfeign.FeignClientSpecification]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] bound.
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(DefaultListableBeanFactory.java:927)
	at org.springframework.cloud.openfeign.FeignClientsRegistrar.registerClientConfiguration(FeignClientsRegistrar.java:389)
	at org.springframework.cloud.openfeign.FeignClientsRegistrar.registerFeignClients(FeignClientsRegistrar.java:216)
	at org.springframework.cloud.openfeign.FeignClientsRegistrar.registerBeanDefinitions(FeignClientsRegistrar.java:144)
	at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86)
	at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:385)
	at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
	at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:384)
	at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148)
	at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120)
	at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331)
	at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:236)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:706)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
	at com.vd.canary.service.CanaryApplication.run(CanaryApplication.java:114)
	at com.vd.canary.b2b.edge.consumer.ConsumerEdgeApplication.main(ConsumerEdgeApplication.java:14)

[b2b-consumer-edge:172.16.26.41:9010] 2021-07-28 14:16:29.138 ERROR 7996 [] [main] org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter : 

***************************
APPLICATION FAILED TO START
***************************

Description:

The bean 'fileBillFeignClient.FeignClientSpecification' could not be registered. A bean with that name has already been defined and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true


springframework 贴心的给出了解决建议

当我们增加配置

之后

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
[b2b-consumer-edge:172.16.26.41:9010] 2021-07-28 15:27:52.512 DEBUG 22108 [] [main] org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter : Application failed to start due to an exception

org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
	at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.determineDriverClassName(DataSourceProperties.java:233)
	at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.determineUsername(DataSourceProperties.java:327)
	at com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper.afterPropertiesSet(DruidDataSourceWrapper.java:40)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1503)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1467)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1386)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1245)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:885)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789)
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:228)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1358)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:409)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:617)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:605)
	at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1242)
	at org.springframework.boot.actuate.autoconfigure.health.HealthEndpointConfiguration.healthContributorRegistry(HealthEndpointConfiguration.java:78)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1287)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:885)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:539)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108)
	at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.createEndpointBean(EndpointDiscoverer.java:143)
	at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.createEndpointBeans(EndpointDiscoverer.java:133)
	at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.discoverEndpoints(EndpointDiscoverer.java:122)
	at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.getEndpoints(EndpointDiscoverer.java:116)
	at org.springframework.boot.actuate.autoconfigure.endpoint.web.ServletEndpointManagementContextConfiguration$WebMvcServletEndpointManagementContextConfiguration.servletEndpointRegistrar(ServletEndpointManagementContextConfiguration.java:65)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207)
	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:211)
	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:202)
	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:96)
	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.<init>(ServletContextInitializerBeans.java:85)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:253)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:227)
	at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory$Initializer.onStartup(UndertowServletWebServerFactory.java:619)
	at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:204)
	at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:186)
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
	at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:252)
	at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.createDeploymentManager(UndertowServletWebServerFactory.java:292)
	at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.getWebServer(UndertowServletWebServerFactory.java:218)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:180)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:153)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
	at com.vd.canary.service.CanaryApplication.run(CanaryApplication.java:114)
	at com.vd.canary.b2b.edge.consumer.ConsumerEdgeApplication.main(ConsumerEdgeApplication.java:13)

[b2b-consumer-edge:172.16.26.41:9010] 2021-07-28 15:27:52.513 ERROR 22108 [] [main] org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
	If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
	If you have database settings to be loaded from a particular profile you may need to activate it (the profiles dev_bb are currently active).

看着很熟悉的报错,数据库配置问题,其实问题并非表象,是作为聚合服务的SAAS 为什么加载了crm-c 还打印了banner。

其实是springboot扫描路径的配置问题,springframework 有重复的Beandefinition

不理解BeanDefination的同学自行补课,那么接下来配置扫描范围

扫描范围配置

EnableFeignClients 注解 作用类似 @ComponentScan

后者可以有更多配置,于是我使用了@ComponentScan注解,并按照报错信息剔除重复的Bean,但是一个接一个的不同报错使我意识到事情没有那么简单

@springBootApplication的默认扫描范围只是在启动类(即被@springbootApplication注解的类)所在的包及其子包


1. 扫描指定类文件
   @ComponentScan(basePackageClasses = Person.class)
2. 扫描指定包,使用默认扫描规则,即被@Component, @Repository, @Service, @Controller或者已经声明过@Component自定义注解标记的组件;
   @ComponentScan(value = "com.yibai")
3. 扫描指定包,加载被@Component注解标记的组件和默认规则的扫描(因为useDefaultFilters默认为true)
   @ComponentScan(value = "com.yibai", includeFilters = { @Filter(type = FilterType.ANNOTATION, value = Component.class) })
4. 扫描指定包,只加载Person类型的组件
   @ComponentScan(value = "com.yibai", includeFilters = { @Filter(type = FilterType.ASSIGNABLE_TYPE, value = Person.class) }, useDefaultFilters = false)
5. 扫描指定包,过滤掉被@Component标记的组件
   @ComponentScan(value = "com.yibai", excludeFilters = { @Filter(type = FilterType.ANNOTATION, value = Component.class) })
6. 扫描指定包,自定义过滤规则
   @ComponentScan(value = "com.yibai", includeFilters = { @Filter(type = FilterType.CUSTOM, value = ColorBeanLoadFilter.class) }, useDefaultFilters = true)

参考资料:https://blog.youkuaiyun.com/luojinbai/article/details/85877956

使用了正则配置

@ComponentScan(value = "com.vd.canary", excludeFilters = { @ComponentScan.Filter(type = FilterType.REGEX, pattern  = "com.vd.crm.*") }, useDefaultFilters = true)

无奈发现各个项目包路径名竟然无法区分,最后一个一个配置会很繁琐,

最后更改引用client 路径,但是还不行,
此时陷入了沉思,到底为啥呢,重新梳理springboot启动过程,既然BeanDefinition 重复了,那么jvm 一定有多个重名的Bean,很有可能路径不同,总有人喜欢copy代码,连名称都不改。

既然都是加载到了jvm 那么我控制一下加载的jar 包。

于是开始看maven 依赖,果然发现疑点

请添加图片描述

这个查了一下这个依赖完全没有必要,很多重名的Bean就来自这个项目。

最后修改POM文件,项目顺利启动。

总结

眼见未必为实,你看到的报错未必是真实的原因,项目启动报错要从框架原理入手考虑问题,如果不知道BeanDefination 不知道springboot 扫描机制,这个问题就很棘手。

Spring Cloud之Config配置中心之配置中心配置加载原理分析 SpringCloud总体介绍 Config使用 Config本地配置文件加载原理分析 Config配置中心配置加载原理分析 本文主要内容: 了解bootstrap Content如何读取bootstrap.properties配置文件 了解bootstrap Content如何读取Config Service配置中心的参数信息 Config Service配置中心如何响应客户端的请求 在<Config本地配置文件加载原理分析 >中分析到:当我们集成了SpringCloud组件到项目中,Sp 阅读详情

相关推荐

WorkBuddy结合DeepSeek与Skill:文献检索自动化与Token成本控制实战

Agent工具与大模型API的结合正重塑知识工作者的日常流程。在实际工程中,调用大模型处理批量任务常面临Token消耗过快、成本不可控的痛点,而国产大模型DeepSeek以极低的API定价和兼容OpenAI接口的特性,为规模化文本处理提供了“Token自由”的可能。同时,可复用的Skill机制能够将特定领域的工作流固化为标准化步骤,让Agent自动执行检索式生成、文献筛选与摘要归纳等复杂操作。本文从这一技术背景出发,以科研文献检索为应用场景,演示如何利用WorkBuddy、DeepSeek API与自建文献

weixin_29061509的博客 485

03SpringCloud-Nacos

1.Nacos认识和安装 1.1 认识Nacos Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。 eureka也是在不停的更新的,有2.x版本,1.x版本,停止维护的是2.x版本。我们一直使用的是1.x版本。在全球各地也是有在使用的。 https://github.com/Netflix/eureka 1.2 Windows安装 1.2.1 下载安装包 GitHub主页: https://github.com/alibaba/nac

ZUCK的博客 1913

神经网络基础-从零开始搭建一个神经网络

人工神经网络(Articial Neural Network,简写为ANN)也称为神经网络(NN),是一种模仿生物神经网络和功能的计算模型,人脑可以看做是一个生物神经网络,由众多的神经元连接而成,各个神经元传递复杂的电信号,树突接收到输入信号,然后对信号进行处理,通过轴突输出信号。人工神经网络也是类似,通过模仿人脑的“学习机器”,通过不断“看”数据(比如图片,数字),自己总结规律,最终学会预测(比如分类图片)在深度学习中,损失函数是用来衡量模型参数的质量的函数,衡量的方式是比较网络输出和真实输出的差异。

Zach的博客 4014

一定要看的走坑之路!SpringCloud统一配置中心 config Server

config Server: 1.在创建springboot项目的时候勾选,Eureka client +config Server 2.在github上创建一个仓库,写入一个yml配置文件 3.在config server项目的启动类上加注解: 4.写它的配置文件: spring: application: name: config cloud: config: ...

weixin_44841849的博客 7364

Educoder | 计算机网络实验-IP协议分析

本关任务:使用 Ping 命令发送数据报,用 Wireshark 截获数据报,分析 IP 数据报的格式,理解 IPV4 地址的编址方法,加深对 IP 协议的理解。

Mksg_28的博客 4752

2025小红书跳转卡片实战指南:从零搭建独立后台与自动化发卡系统

本文提供了一份2025年小红书跳转卡片的实战搭建指南,详细解析了独立后台系统的核心架构与自动化发卡流程。文章从零开始,手把手教你使用Node.js、Vue.js等技术栈构建包含后台管理、用户制卡中心与前端交互的完整系统,旨在帮助运营者实现合规引流,并掌握数据自主权与自动化运营能力。

weixin_29234423的博客 516

nacos 配置中心加载文档的优先级

值得注意的是:nacos config的配置必须配置在bootstrap.properties文件中,不然无法加载 spring.profiles.active=prod spring.application.name=order-service spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.cloud.nacos.config.server-addr=localhost:8848 #谁在越后面有优先级越高 spring.

4328

LLM评测框架Ragas:测试RAG的性能出现TimeoutError()的解决办法(Ragas+langchain+ollama)

无奈之下,自己找到了一个解决办法,在ragas支持的llm类库中加了一个如下的类,支持ollama、langchian_ollama使用ragas测试报错的问题。可以将如上的库放到你的ragas的系统库的llms目录下,然后修改__init__.py如下。最近用ragas测试rag的性能,发现老出现TimeoutError()的错误。这是一个临时的解决办法,具体等待官方给出最终的解决方案。后来发现官方也没有尽快支持的计划。然后就可以用如下代码进行一些验证。

Criss@陈磊 665

springboot启动类报错

问题: Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'gatewayLoggerProfile' for bean class [com.common.config.GatewayLoggerProfile] conflicts with existing, non-compatible bean definitio

zheng2780071070的博客 1072

Altium Designer系列: 软件系统参数配置保存

【Altium Designer实践】 软件系统参数配置保存 作者 CodeAllen ,转载请注明出处 目录设置中文菜单高亮模式设置文件关联pcb设置布线设置保存配置文件(复用) 设置中文菜单 DXP->Preferences 高亮模式设置 文件关联 pcb设置 布线设置 保存配置文件(复用) ......

CodeAllen嵌入式 2018

uniapp(全端兼容) - 最新详细实现支付键盘功能组件,从底部弹出数字键盘输入支付密码进行付款交互效果,自定义支付密码键盘仿微信、支付宝支付键盘,1~9密码数字键盘,电商支付(详细示例代码复制运行

uniapp,微信小程序,自定义数字键盘,输入支付密码的键盘组件,uniapp小程序如何实现从底部弹出输入支付密码自定义键盘功能,uniapp小程序密码支付键盘组件插件,自定义数字键盘输入页面,怎么封装底部弹窗自定义数字键盘用于输入支付密码,uniapp小程序仿类似电商支付密码输入模态框,uniapp微信小程序平台实现自定义支付密码键盘,uniapp 密码支付,数字键盘,安全键盘,交易键盘,交易密码,交易密码输入框,uniapp自定义支付键盘: uniapp自定义支付键盘,uniapp小程序端实现键盘输入支

✅ 精选推荐文章 2905

SpringBoot 启动报错

简介:SpringBoot 启动报错,错误: 找不到或无法加载主类原因:可能是启动类配置被修改。

weixin_68458168的博客 1136

YOLO11改进|注意力机制篇|引入ELA注意力机制

YOLO11添加ELA注意力机制

A1983Z的博客 3647

SpringBoot 配置首页启动404报错

SpringBoot 配置首页启动404报错 原因分析:404:出现404的原因只有一个,路径找不到。我们来看看是哪里的路径错了 1.检查页面路径和controller中路径是否一致(一般不会出错) 2.Application应该在启动包的最外层 Application启动类是在com.zym.alipay的路径下的,controller也在这个路径下,Application启动时control...

weixin_43078114的博客 963

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

springboot 启动报错Field XXX required a bean of type XXX that could not be found.

今天自己搭建springboot项目,连接数据库,启动的时候发现报错,如下:Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2018-06-08 14:28:58.065 ERROR 4656 --- [ ...

旺仔牛奶的博客 18万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

搭建springboot项目能启动,但是访问controller时报错404

1.创建项目能启动,但是访问时报错404 我们发现他们两个在同级包下,也就是在启动类和controller不同级的目录下: 报错信息 这里就要说一下springboot默认的扫描位置了 @SpringBootApplication默认的扫描位置就是启动类所在的同级目录和子目录,我们修改一下 这时候我们再看运行 创建springboot项目建议使用工具: 1.开发工具:STS,IDEA (不建议使用eclipse) ...

初心不改,事在人为 1100

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

springboot正常启动访问接口404

以前也没用过springboot第一次有idea搭建springboot项目,部署在自己的tomcat上启动.项目正常启动,也看了下tomcat的日志确定启动过程没有报错.后来各种试各种改 也翻了很多资料 问题原因 主要是我把springboot的启动项放在了com.csh.demo 的下面 然后接口controller放在了com.csh.controller 下面 后来查资料就是spri...

weixin_42452732的博客 6528

springboot正常启动但访问404 【跳坑】

springboot项目正常启动了,用的@RestController 注解去配置的controller,然后路径也搭好了,但是浏览器一直报404。 解决方法: 方法一:springboot的启动类要放在写的所有类的最外面,否则会扫描不到controller (原因:springboot只会扫描启动类当前包和以下的包) (亲测有效!) 看图: 之前的错误目录: 项目正确目录: 当时我就是因为把启动类放在了一个和controller所在包同级的包下面,因为springboot只扫描启动类当前包和以

9986

springboot @value启动报错_3、快速入门 SpringBoot

一、使用新版 SpringBoot2.X 开发一个 JSON 接口1.1 SpringBoot 开发项目中常见的数据交互使用形式后端接口直接返回页面,现在比较少。常见的传统 IT 公司比骄多,配合模板引擎,由后端页面渲染返回。返回 JSON 数据是现在的主流场景。互联网公式使用较多,比如微服务接口、前后端分离项目、手机 App 等,基本都是通过 JSON 进行数据交互。1.2 SpringBoo...

weixin_39943220的博客 545

【debug log】SpringDataJpa启动时报错UnsatisfiedDependencyException,无法注入相关repository对象

最近在疯狂点科技树,听说spring data jpa比mybatis方便太多,恰好本人自己的毕设项目iedu(基于spring cloud的在线教育平台)才处于初始阶段(只设计好了表和实体类),接下来需要设计一个单点登录系统,于是我干脆打算使用spring data作为持久层框架。 鲁迅说过万事应先从Hello World写起,所以我首先就写了个demo: (以下为单点登录服务iedu-us...

ShadL-17的博客 988

springboot项目启动异常 - required a single bean, but 2 were found

问题描述 springboot+mybatis,编写接口及实现类,并使用@Autowired注入controller, 启动异常:required a single bean, but 2 were found 错误分析 @Autowired默认按照类型注入,根据提示,我的项目中这个类型的bean有两个,因此无法自动注入。 错误信息也给出了解决的办法: 1.把其中一个bean加上@Primary注解,就可以作为默认使用, 2.在注入的属性添加@Qualifier指定beanName,以明确使用哪一个

qq_59569398的博客 3541

springboot 启动类_SpringBoot启动类的扫描注解的用法及冲突原则

点击上方“Java面试题精选”,关注公众号面试刷图,查缺补漏>>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅阶段汇总集合:001期~180期汇总,方便阅读(增加设计模式)背景SpringBoot 启动类上,配置扫描包路径有三种方式,最近看到一个应用上三种注解都用上了,代码如下:@SpringBootApplication(scanB...

weixin_39960920的博客 1392

为什么说 SpringBoot 启动慢,慢在哪?

SpringBoot 启动慢这事儿,说实话,圈里人谁没骂过两句?但凡写过几个后端项目,谁没被它启动那点破事儿折磨过。尤其是在本地调试的时候,一次次重启,简直能把人搞到怀疑人生。那这玩意儿到底慢在哪?咱们今天就扒一扒它启动慢的“原罪”。先说个真事儿,有次我们上线了一个新的微服务,用的是 SpringBoot + SpringCloud 的标准套路,结果部署上线后,那服务愣是起了 45 秒,比我们测试环境快了整整 10 秒,我当时就震惊了——为啥测试环境还更慢??原来那边的机器比生产差远了🤯。

m0_73735578的博客 911

注解报错_SpringBoot启动类的扫描注解的用法及冲突原则

背景SpringBoot 启动类上,配置扫描包路径有三种方式,最近看到一个应用上三种注解都用上了,代码如下:@SpringBootApplication(scanBasePackages ={"a","b"})@ComponentScan(basePackages = {"a","b","c"})@MapperScan({"XXX"})public class XXApplication exte...

weixin_42354933的博客 505

SpringBoot整合MyBatisPlus启动报错解决方案

在Java企业级开发中,SpringBoot与MyBatisPlus的整合是常见的ORM框架组合方案。MyBatis通过SqlSessionFactory和SqlSessionTemplate两个核心组件实现数据库访问,而SpringBoot的自动配置机制会尝试自动创建这些bean。当出现'Property sqlSessionFactory or sqlSessionTemplate are required'报错时,通常意味着自动配置失败,需要开发者介入处理。这种情况多发生在依赖缺失、配置冲突或多数据源

weixin_34319111的博客 355

springboot项目启动时如何排除一个bean?

大家好,我是G探险者。使用springboot开发项目,我们有时候会排除一些项目里面用不到的bean,不然的话项目启动会报错,这种情况通常是发生在什么场景里呢,以及如何解决呢?今天咱们就聊一聊。springboot默认封装了很多的组件,并且把这些组件都进行了自动化配置封装。也就是说,只要是springboot项目,启动类在@SpringBootApplication注解下,在不需要单独配置bean的情况下,本项目所用到的bean在容器启动的时候都会被自动扫描并注入到IOC容器里。

G探险者的博客 2326
上一篇: mybatis 启动报错 分析
下一篇: swagger 采坑记录
hamish-wu
博客等级 码龄15年 2814粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值