spring cloud的坑

接入nacos 之后,想把所有的配置丢上去。

启动程序是:

@EnableDiscoveryClient
@RestController
@ComponentScan(basePackages = {"com.lkk"})
@MapperScan(basePackages = {"com.lkk.ppm.doc.service.dao"})
@ImportResource(locations = {"classpath:dubbo.xml"})
@EnableTransactionManagement
@Import({Settings.class, WebConfig.class})
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
@EnableWebMvc
@Slf4j
public class DocApplication {

bootstrap.yml文件是:

spring:
  application:
    name: llk_discuss_app
  profiles:
    active: ${PROFILE_ACTIVE:local}
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_SERVER_ADDR:192.168.11.196:8848}
        namespace: ${NACOS_CONFIG_NAMESPACE:1f3c60b6-3e28-44eb-9798-7f7eeeff6a8d}
        #group: ${NACOS_CONFIG_GROUP:llk}
      config:
        server-addr: ${NACOS_SERVER_ADDR:192.168.11.196:8848}
        file-extension: yaml
        namespace: ${NACOS_CONFIG_NAMESPACE:1f3c60b6-3e28-44eb-9798-7f7eeeff6a8d}
        group: ${NACOS_CONFIG_GROUP:llk}
        ext-config[0]:
          data-id: llk_stateflow_toggle.yaml
          group: ${NACOS_CONFIG_GROUP:llk}
          refresh: true
          

dubbo.xml 文件是:

   <dubbo:registry  address="${NACOS_ADDR:nacos://127.0.0.1:8848}"  file="erdp_discuss_app.cache"/>
   <dubbo:service interface="com.llk.ppm.discuss.domain.service.ELDiscussService" ref="discussService"/>
   <dubbo:reference id="peopleService" interface="com.llk.platform.system.domain.service.ELPeopleService"/>

...

错误是

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘peopleService‘: FactoryBean threw exception on object creation; nested exception is java.lang.NumberFormatException: For input string: "8848}"
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:178) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1644) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1174) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:257) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1322) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1288) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1098) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:581) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    ... 30 common frames omitted
Caused by: java.lang.NumberFormatException: For input string: "8848}"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_201]
    at java.lang.Integer.parseInt(Integer.java:580) ~[na:1.8.0_201]
    at java.lang.Integer.parseInt(Integer.java:615) ~[na:1.8.0_201]
    at com.alibaba.dubbo.common.URL.valueOf(URL.java:239) ~[dubbo-2.6.5.jar:2.6.5]
    at com.alibaba.dubbo.common.utils.UrlUtils.parseURL(UrlUtils.java:68) ~[dubbo-2.6.5.jar:2.6.5]
    at com.alibaba.dubbo.common.utils.UrlUtils.parseURLs(UrlUtils.java:137) ~[dubbo-2.6.5.jar:2.6.5]
    at com.alibaba.dubbo.config.AbstractInterfaceConfig.loadRegistries(AbstractInterfaceConfig.java:191) ~[dubbo-2.6.5.jar:2.6.5]
    at com.alibaba.dubbo.config.ReferenceConfig.createProxy(ReferenceConfig.java:378) ~[dubbo-2.6.5.jar:2.6.5]
    at com.alibaba.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:333) ~[dubbo-2.6.5.jar:2.6.5]
    at com.alibaba.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:163) ~[dubbo-2.6.5.jar:2.6.5]
    at com.alibaba.dubbo.config.spring.ReferenceBean.getObject(ReferenceBean.java:67) ~[dubbo-2.6.5.jar:2.6.5]
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:171) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    ... 41 common frames omitted

花了整整一天时间,各种折腾,dubbo.xml 里面的占位符就是解析不了。

开始是以为是nacos的bug,后面以为是dubbo 的问题,最后才发现是spring-cloud-commons 的问题。我晕~~~~

开始是以为是bootstrap的问题,初始化dubbo.xml的时间太早了吗? 坑爹啊! 研究了下boostrap 和 application 配置文件的关系。无果。  后面认为是yml的格式的问题,后面把bootstrap.yml, 转换成了boostrap.properties, 结果问题依旧。想来想去,应该是xml解析的时候,bootstrap 还没有从nacos 成功获取数据的原因吧! 写了个demo试了下,好像可以了, 再套到了原来的项目里面来, 熄火了!。 可是,这到底是什么情况,bootstrap配置文件的优先级是比较高的啊! 网上一把搜索,未果,好像大家都没有遇到我这个问题。。。 后面干脆不用bootstrap配置文件,使用 application.yml/properties吧,可以了,但是nacos怎么办,不能不使用bootstrap啊!!

是ImportSource问题吗,它的解析有特殊之处, 研究其原理,无果?后面同事偶然发现,只要把dubbo.xml 分开为两个文件(一个文件有是基本信息,另外一个文件是 service/reference)就可以正常启动了, 然后继续研究,发现把 dubbo:reference 的id 属性去掉,就可以了。。 把原来的一个dubbo xml 分开了两个xml,两次ImportSource,另外还糅合导入了一个properties 就可以了,是顺序问题吗? 难道是第一次不能解析,第二次才能解析吗?。。。必须要分开吗?折腾N久,无果。从GitHub拉下来几个demo(大名鼎鼎的didi哥的学习项目),运行一把,没问题的啊!!对比一下,然后一点点的加减代码和配置吧! 发现didi哥的项目简单,所以无错,我把代码套过去,它的项目也会一样的报错了。

调试一下吧! 断点设置在RegistryConfig的setAddress方法之上。看到其堆栈, 正常的是:
setAddress:118, RegistryConfig (com.alibaba.dubbo.config)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
setValue:332, BeanWrapperImpl$BeanPropertyHandler (org.springframework.beans)
processLocalProperty:458, AbstractNestablePropertyAccessor (org.springframework.beans)
setPropertyValue:278, AbstractNestablePropertyAccessor (org.springframework.beans)
setPropertyValue:266, AbstractNestablePropertyAccessor (org.springframework.beans)
setPropertyValues:97, AbstractPropertyAccessor (org.springframework.beans)
setPropertyValues:77, AbstractPropertyAccessor (org.springframework.beans)
applyPropertyValues:1635, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
populateBean:1354, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:572, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:495, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:317, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 1089930529 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$136)
getSingleton:222, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:315, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:199, AbstractBeanFactory (org.springframework.beans.factory.support)
preInstantiateSingletons:759, DefaultListableBeanFactory (org.springframework.beans.factory.support)
finishBeanFactoryInitialization:869, AbstractApplicationContext (org.springframework.context.support)
refresh:550, AbstractApplicationContext (org.springframework.context.support)
refresh:140, ServletWebServerApplicationContext (org.springframework.boot.web.servlet.context)
refresh:780, SpringApplication (org.springframework.boot)
refreshContext:412, SpringApplication (org.springframework.boot)
run:333, SpringApplication (org.springframework.boot)
run:1277, SpringApplication (org.springframework.boot)
run:1265, SpringApplication (org.springframework.boot)
main:24, TestApplication (com.didispace.alibaba.nacos.config.client)

异常情况的堆栈是:
setAddress:118, RegistryConfig (com.alibaba.dubbo.config)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
setValue:332, BeanWrapperImpl$BeanPropertyHandler (org.springframework.beans)
processLocalProperty:458, AbstractNestablePropertyAccessor (org.springframework.beans)
setPropertyValue:278, AbstractNestablePropertyAccessor (org.springframework.beans)
setPropertyValue:266, AbstractNestablePropertyAccessor (org.springframework.beans)
setPropertyValues:97, AbstractPropertyAccessor (org.springframework.beans)
setPropertyValues:77, AbstractPropertyAccessor (org.springframework.beans)
applyPropertyValues:1630, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
populateBean:1349, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:572, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:495, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:317, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 1376017854 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$135)
getSingleton:222, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:315, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:199, AbstractBeanFactory (org.springframework.beans.factory.support)
getBeansOfType:514, DefaultListableBeanFactory (org.springframework.beans.factory.support)
getBeansOfType:1204, AbstractApplicationContext (org.springframework.context.support)
beansOfTypeIncludingAncestors:327, BeanFactoryUtils (org.springframework.beans.factory)
afterPropertiesSet:140, ReferenceBean (com.alibaba.dubbo.config.spring)
invokeInitMethods:1753, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
initializeBean:1690, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:573, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:495, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:317, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 1376017854 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$135)
getSingleton:222, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:315, AbstractBeanFactory (org.springframework.beans.factory.support)
getTypeForFactoryBean:1513, AbstractBeanFactory (org.springframework.beans.factory.support)
getTypeForFactoryBean:838, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
isTypeMatch:562, AbstractBeanFactory (org.springframework.beans.factory.support)
doGetBeanNamesForType:426, DefaultListableBeanFactory (org.springframework.beans.factory.support)
getBeanNamesForType:389, DefaultListableBeanFactory (org.springframework.beans.factory.support)
getBeanNamesForType:383, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveNamedBean:996, DefaultListableBeanFactory (org.springframework.beans.factory.support)
getBean:338, DefaultListableBeanFactory (org.springframework.beans.factory.support)
getBean:333, DefaultListableBeanFactory (org.springframework.beans.factory.support)
isApplicable:163, RefreshAutoConfiguration$RefreshScopeBeanDefinitionEnhancer (org.springframework.cloud.autoconfigure)
postProcessBeanDefinitionRegistry:134, RefreshAutoConfiguration$RefreshScopeBeanDefinitionEnhancer (org.springframework.cloud.autoconfigure)
invokeBeanDefinitionRegistryPostProcessors:271, PostProcessorRegistrationDelegate (org.springframework.context.support)
invokeBeanFactoryPostProcessors:121, PostProcessorRegistrationDelegate (org.springframework.context.support)
invokeBeanFactoryPostProcessors:692, AbstractApplicationContext (org.springframework.context.support)
refresh:530, AbstractApplicationContext (org.springframework.context.support)
refresh:140, ServletWebServerApplicationContext (org.springframework.boot.web.servlet.context)
refresh:754, SpringApplication (org.springframework.boot)
refreshContext:386, SpringApplication (org.springframework.boot)
run:307, SpringApplication (org.springframework.boot)
main:48, TestNacosApplication (com.example.test_nacos)

一帧一帧的查看分析:

0 = "org.springframework.context.annotation.internalConfigurationAnnotationProcessor"
1 = "org.springframework.cloud.autoconfigure.RefreshAutoConfiguration$RefreshScopeBeanDefinitionEnhancer"
2 = "refreshScope"

难道是internalConfigurationAnnotationProcessor的问题? 不像。发现RefreshAutoConfiguration 有些不对, 好像是RefreshAutoConfiguration 引起了这个问题?但是此时我依然不知道这就是RefreshAutoConfiguration的bug!(后面才知道) RefreshAutoConfiguration 为什么要这么做?不管了先, 那就把RefreshAutoConfiguration 停掉啊! 观察到配置项:spring.cloud.refresh.enabled,这个好像没什么用。那把它设置为false,然后重启,然后就可以了! 我擦,终于解决了问题!!不过,似乎高兴得太早了,引起的问题是, nacos的配置完全读取不到了!! 这怎么行呢!

同事的配置拿来研究,调试发现它的堆栈更深了:

setAddress:118, RegistryConfig (com.alibaba.dubbo.config)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
setValue:332, BeanWrapperImpl$BeanPropertyHandler (org.springframework.beans)
processLocalProperty:458, AbstractNestablePropertyAccessor (org.springframework.beans)
setPropertyValue:278, AbstractNestablePropertyAccessor (org.springframework.beans)
setPropertyValue:266, AbstractNestablePropertyAccessor (org.springframework.beans)
setPropertyValues:97, AbstractPropertyAccessor (org.springframework.beans)
setPropertyValues:77, AbstractPropertyAccessor (org.springframework.beans)
applyPropertyValues:1630, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
populateBean:1349, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:572, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:495, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:317, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 26928827 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$135)
getSingleton:222, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:315, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:199, AbstractBeanFactory (org.springframework.beans.factory.support)
getBeansOfType:514, DefaultListableBeanFactory (org.springframework.beans.factory.support)
getBeansOfType:1204, AbstractApplicationContext (org.springframework.context.support)
beansOfTypeIncludingAncestors:327, BeanFactoryUtils (org.springframework.beans.factory)
afterPropertiesSet:140, ReferenceBean (com.alibaba.dubbo.config.spring)
invokeInitMethods:1753, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
initializeBean:1690, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:573, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:495, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:317, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 26928827 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$135)
getSingleton:222, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:315, AbstractBeanFactory (org.springframework.beans.factory.support)
getTypeForFactoryBean:1513, AbstractBeanFactory (org.springframework.beans.factory.support)
getTypeForFactoryBean:838, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
isTypeMatch:562, AbstractBeanFactory (org.springframework.beans.factory.support)
doGetBeanNamesForType:426, DefaultListableBeanFactory (org.springframework.beans.factory.support)
getBeanNamesForType:389, DefaultListableBeanFactory (org.springframework.beans.factory.support)
beanNamesForTypeIncludingAncestors:214, BeanFactoryUtils (org.springframework.beans.factory)
findAutowireCandidates:1273, DefaultListableBeanFactory (org.springframework.beans.factory.support)
doResolveDependency:1098, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveDependency:1062, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveAutowiredArgument:819, ConstructorResolver (org.springframework.beans.factory.support)
createArgumentArray:725, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:475, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:1246, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBeanInstance:1096, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:535, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:495, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:317, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 26928827 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$135)
getSingleton:222, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:315, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:204, AbstractBeanFactory (org.springframework.beans.factory.support)
registerBeanPostProcessors:224, PostProcessorRegistrationDelegate (org.springframework.context.support)
registerBeanPostProcessors:708, AbstractApplicationContext (org.springframework.context.support)
refresh:533, AbstractApplicationContext (org.springframework.context.support)
refresh:140, ServletWebServerApplicationContext (org.springframework.boot.web.servlet.context)
refresh:754, SpringApplication (org.springframework.boot)
refreshContext:386, SpringApplication (org.springframework.boot)
run:307, SpringApplication (org.springframework.boot)
main:64, DiscussApplication (com.llk.ppm.discuss)

可见异常情况下,堆栈深了不少,但是依然不知道具体原因。然后继续加减研究,发现把 dubbo:reference 的id 属性去掉,就可以了!!! 观察发现去掉之后就beanDefinition names不会包含这个reference, 之前是367, 现在变成了367:

org.s[email protected]44c5a16f: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.event.internalEventListenerProcessor,org.springframework.context.event.internalEventListenerFactory,testNacosApplication,org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory,helloService222,helloService,helloService1,repositoryController,profileController,alpsController,repositorySchemaController,repositoryEntityController,repositoryPropertyReferenceController,repositorySearchController,aaaaaaa,com.alibaba.dubbo.config.RegistryConfig,com.alibaba.dubbo.config.ProviderConfig,dubbo,com.lkk.ppm.discuss.domain.service.ELDiscussService,bbbbbbbb,org.springframework.boot.autoconfigure.AutoConfigurationPackages,org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,org.springframework.boot.autoconfigure.condition.BeanTypeRegistry,propertySourcesPlaceholderConfigurer,org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration$TomcatWebSocketConfiguration,websocketServletWebServerCustomizer,org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration$EmbeddedTomcat,tomcatServletWebServerFactory,org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,servletWebServerFactoryCustomizer,tomcatServletWebServerFactoryCustomizer,server-org.springframework.boot.autoconfigure.web.ServerProperties,org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor,org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata,webServerFactoryCustomizerBeanPostProcessor,errorPageRegistrarBeanPostProcessor,org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletConfiguration,dispatcherServlet,spring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties,org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration,dispatcherServletRegistration,org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration$PropagateEventsConfiguration,org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration,configurableEnvironmentConfiguration,org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,defaultValidator,methodValidationPostProcessor,org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration,error,beanNameViewResolver,org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration,conventionErrorViewResolver,org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration,errorAttributes,basicErrorController,errorPageCustomizer,preserveErrorControllerTargetClassPostProcessor,spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties,org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter$FaviconConfiguration,faviconHandlerMapping,faviconRequestHandler,org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration,requestMappingHandlerAdapter,requestMappingHandlerMapping,mvcConversionService,mvcValidator,mvcContentNegotiationManager,mvcPathMatcher,mvcUrlPathHelper,viewControllerHandlerMapping,beanNameHandlerMapping,resourceHandlerMapping,mvcResourceUrlProvider,defaultServletHandlerMapping,mvcUriComponentsContributor,httpRequestHandlerAdapter,simpleControllerHandlerAdapter,handlerExceptionResolver,mvcViewResolver,mvcHandlerMappingIntrospector,org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter,defaultViewResolver,viewResolver,welcomePageHandlerMapping,requestContextFilter,org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,hiddenHttpMethodFilter,httpPutFormContentFilter,org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari,dataSource,org.springframework.boot.autoconfigure.jdbc.DataSourceJmxConfiguration$Hikari,org.springframework.boot.autoconfigure.jdbc.DataSourceJmxConfiguration,org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$PooledDataSourceConfiguration,org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration$HikariPoolDataSourceMetadataProviderConfiguration,hikariPoolDataSourceMetadataProvider,org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration,org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker,org.springframework.boot.autoconfigure.jdbc.DataSourceInitializationConfiguration,dataSourceInitializerPostProcessor,org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties,com.baomidou.mybatisplus.spring.boot.starter.MybatisPlusAutoConfiguration$MapperScannerRegistrarNotFoundConfiguration,com.baomidou.mybatisplus.spring.boot.starter.MybatisPlusAutoConfiguration,sqlSessionFactory,sqlSessionTemplate,mybatis-plus-com.baomidou.mybatisplus.spring.boot.starter.MybatisPlusProperties,org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$MapperScannerRegistrarNotFoundConfiguration,org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration,mybatis-org.mybatis.spring.boot.autoconfigure.MybatisProperties,org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,mbeanExporter,objectNamingStrategy,mbeanServer,org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,springApplicationAdminRegistrar,org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$CglibAutoProxyConfiguration,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,org.springframework.cloud.autoconfigure.RefreshAutoConfiguration$RefreshScopeBeanDefinitionEnhancer,org.springframework.cloud.autoconfigure.RefreshAutoConfiguration,refreshScope,loggingRebinder,contextRefresher,refreshEventListener,org.springframework.boot.autoconfigure.data.redis.LettuceConnectionConfiguration,lettuceClientResources,redisConnectionFactory,org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,redisTemplate,stringRedisTemplate,spring.redis-org.springframework.boot.autoconfigure.data.redis.RedisProperties,org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,persistenceExceptionTranslationPostProcessor,org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,mongo,spring.data.mongodb-org.springframework.boot.autoconfigure.mongo.MongoProperties,org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,mongoDbFactory,mongoTemplate,mappingMongoConverter,mongoMappingContext,gridFsTemplate,mongoCustomConversions,org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration,reactiveRedisTemplate,org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,keyValueMappingContext,redisCustomConversions,redisReferenceResolver,redisConverter,redisKeyValueAdapter,redisKeyValueTemplate,org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,gsonBuilder,gson,standardGsonBuilderCustomizer,spring.gson-org.springframework.boot.autoconfigure.gson.GsonProperties,org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration,standardJacksonObjectMapperBuilderCustomizer,spring.jackson-org.springframework.boot.autoconfigure.jackson.JacksonProperties,org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration,jacksonObjectMapperBuilder,org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$ParameterNamesModuleConfiguration,parameterNamesModule,org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration,jacksonObjectMapper,org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,jsonComponentModule,org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration,stringHttpMessageConverter,spring.http.encoding-org.springframework.boot.autoconfigure.http.HttpEncodingProperties,org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration$MappingJackson2HttpMessageConverterConfiguration,mappingJackson2HttpMessageConverter,org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration,org.springframework.boot.autoconfigure.http.GsonHttpMessageConvertersConfiguration,org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration,messageConverters,org.springframework.hateoas.config.EntityLinksConfiguration,entityLinksPluginRegistry,delegatingEntityLinks,controllerEntityLinks,controllerLinkBuilderFactoryBean,org.springframework.hateoas.config.JaxRsConfigurationImportSelector$JaxRsEntityLinksConfiguration,jaxRsEntityLinks,org.springframework.hateoas.config.HateoasConfiguration,linkRelationMessageSource,jackson2ModuleRegisteringBeanPostProcessor,defaultRelProvider,annotationRelProvider,_relProvider,relProviderPluginRegistry,linkDiscoverers,linkDiscovererRegistry,org.springframework.data.web.config.SpringDataJacksonConfiguration,jacksonGeoModule,org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration,repositories,repositoryRelProvider,persistentEntities,defaultConversionService,validatingRepositoryEventListener,jpaHelper,repositoryRestConfiguration,projectionDefinitionRegistrar,metadataConfiguration,baseUri,annotatedEventHandlerInvoker,domainObjectMerger,serverHttpRequestMethodArgumentResolver,repoRequestArgumentResolver,resourceMetadataHandlerMethodArgumentResolver,backendIdHandlerMethodArgumentResolver,eTagArgumentResolver,entityLinks,persistentEntityArgumentResolver,jsonSchemaConverter,resourceDescriptionMessageSourceAccessor,jacksonHttpMessageConverter,halJacksonHttpMessageConverter,uriListHttpMessageConverter,resourceProcessorInvoker,repositoryExporterHandlerAdapter,restHandlerMapping,resourceMappings,linkCollector,excerptProjector,repositoryRestExceptionHandler,repositoryInvokerFactory,defaultMessageConverters,alpsJsonHttpMessageConverter,pageableResolver,sortResolver,backendIdConverterRegistry,auditableBeanWrapperFactory,httpHeadersPreparer,selfLinkProvider,associationLinks,enumTranslator,alpsConverter,profileResourceProcessor,pagedResourcesAssembler,pagedResourcesAssemblerArgumentResolver,org.springframework.hateoas.config.ConverterRegisteringWebMvcConfigurer#0,org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,springBootRepositoryRestConfigurer,spring.data.rest-org.springframework.boot.autoconfigure.data.rest.RepositoryRestProperties,org.springframework.boot.autoconfigure.hateoas.HypermediaHttpMessageConverterConfiguration,halMessageConverterSupportedMediaTypeCustomizer,org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,spring.hateoas-org.springframework.boot.autoconfigure.hateoas.HateoasProperties,org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration$JacksonCodecConfiguration,jacksonCodecCustomizer,org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration,org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties,org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration$JdbcTemplateConfiguration,jdbcTemplate,org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration$NamedParameterJdbcTemplateConfiguration,namedParameterJdbcTemplate,org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,spring.jdbc-org.springframework.boot.autoconfigure.jdbc.JdbcProperties,org.springframework.boot.autoconfigure.reactor.core.ReactorCoreAutoConfiguration,spring.reactor-org.springframework.boot.autoconfigure.reactor.core.ReactorCoreProperties,org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration$DataSourceTransactionManagerConfiguration,transactionManager,org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration,org.springframework.transaction.config.internalTransactionAdvisor,transactionAttributeSource,transactionInterceptor,org.springframework.transaction.config.internalTransactionalEventListenerFactory,org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration$EnableTransactionManagementConfiguration$CglibAutoProxyConfiguration,org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration$EnableTransactionManagementConfiguration,org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration$TransactionTemplateConfiguration,transactionTemplate,org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,platformTransactionManagerCustomizers,spring.transaction-org.springframework.boot.autoconfigure.transaction.TransactionProperties,org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration,restTemplateBuilder,org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration$TomcatWebServerFactoryCustomizerConfiguration,tomcatWebServerFactoryCustomizer,org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration,org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,characterEncodingFilter,localeCharsetMappingsCustomizer,org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration,multipartConfigElement,multipartResolver,spring.servlet.multipart-org.springframework.boot.autoconfigure.web.servlet.MultipartProperties,org.springframework.cloud.alibaba.nacos.NacosConfigAutoConfiguration,nacosConfigProperties,nacosRefreshProperties,nacosRefreshHistory,nacosContextRefresher,org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration,spring.cloud.service-registry.auto-registration-org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties,org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration,org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration,nacosServiceRegistry,nacosRegistration,nacosAutoServiceRegistration,org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration,nacosProperties,nacosDiscoveryClient,nacosWatch,org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration,ribbonFeature,springClientFactory,loadBalancerClient,propertiesFactory,default.org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration.RibbonClientSpecification,ribbon.eager-load-org.springframework.cloud.netflix.ribbon.RibbonEagerLoadProperties,ribbon-org.springframework.cloud.netflix.ribbon.ServerIntrospectorProperties,org.springframework.cloud.alibaba.nacos.ribbon.RibbonNacosAutoConfiguration,default.org.springframework.cloud.alibaba.nacos.ribbon.RibbonNacosAutoConfiguration.RibbonClientSpecification,org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration,configurationPropertiesBeans,configurationPropertiesRebinder,org.springframework.cloud.autoconfigure.LifecycleMvcEndpointAutoConfiguration,environmentManager,org.springframework.cloud.client.CommonsClientAutoConfiguration,org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClientAutoConfiguration,compositeDiscoveryClient,org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration,simpleDiscoveryProperties,simpleDiscoveryClient,org.springframework.cloud.client.loadbalancer.AsyncLoadBalancerAutoConfiguration$LoadBalancerInterceptorConfig,asyncLoadBalancerInterceptor,asyncRestTemplateCustomizer,org.springframework.cloud.client.loadbalancer.AsyncLoadBalancerAutoConfiguration$AsyncRestTemplateCustomizerConfig,loadBalancedAsyncRestTemplateInitializer,org.springframework.cloud.client.loadbalancer.AsyncLoadBalancerAutoConfiguration,org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration$LoadBalancerInterceptorConfig,ribbonInterceptor,restTemplateCustomizer,org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration,loadBalancedRestTemplateInitializerDeprecated,loadBalancerRequestFactory,spring.cloud.loadbalancer.retry-org.springframework.cloud.client.loadbalancer.LoadBalancerRetryProperties,org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration,org.springframework.cloud.commons.httpclient.HttpClientConfiguration$ApacheHttpClientConfiguration,connManFactory,apacheHttpClientBuilder,apacheHttpClientFactory,org.springframework.cloud.commons.httpclient.HttpClientConfiguration,org.springframework.cloud.commons.util.UtilAutoConfiguration,inetUtilsProperties,inetUtils]; parent: org.s[email protected]52d239ba

然后就不会去解析 registry,然后 registry 里面占位符就不会被提前解析,然后就没问题了! 但是 dubbo:reference 的id 属性可以去掉吗? 领导的回复是否定的。。

但是他的方案确实是可以的,至少启动不报错。后面把他的两个配置文件合并到一个,发现也可以了! 后面仔细对比,一个个的加减配置,发现它的配置的特别之处是:

<dubbo:application name="${spring.application.name}"   logger="slf4j">

我的配置的 dubbo:application name属性没有使用通配符,他的使用了。 确实,只要使用通配符就可以了,但是一个潜在问题是,调试发现application name属性的赋值很多次,前几次是不正确的,后台出现一些列的warning。而且其他配置如果继续使用通配符的话, 又会报错。 我就日了狗了, 感觉dubbo坑爹了。。

那能不能让dubbo reference 延迟加载?把 dubbo 配置的 lazy 设为true,无效。 init设为 false,无效。lazy-init 设为false,报错:

我靠,dubbo竟然不支持默认的bean的配置,坑爹。 难道要我改dubbo 源码?。。。

这样看来,两种方案都是不可行的。 真是郁闷了,一天半时间了啊! 难道是nacos 的坑吗? 要不要换成携程的apollo 试试。。

bing上搜索RefreshAutoConfiguration bug,终于看到了答案:
https://github.com/spring-cloud/spring-cloud-config/issues/1167
https://github.com/spring-cloud/spring-cloud-commons/commit/9b8a70e5574e1c0e7cb071d4248f7a0d567187ad#diff-09d0c681fbe54b8a84f6bfa2f96ed21b

原来是 RefreshAutoConfiguration的 bug,RefreshAutoConfiguration的方法,调用getBean方法, 而它是一个非常重的方法,它直接导致了 提前触发整个beanfactory 解析,加载 以及初始化,而这个时候 springboot 还没有启动完,所以还没来得及从nacos 加载数据, 从而导致了 registry 里面的占位符解析不了( 其实是任何占位符都解析不了。), 从而导致了这个严重问题。 观察到RefreshAutoConfiguration是 spring cloud commons 里面的类,然后看到spring cloud commons是通过spring-cloud-dependencies 指定版本的,我的spring-cloud-dependencies的版本是F:

        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

参照GitHub的那个issue,升级一下改成G版本就好了:

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>            

不过,似乎高兴得太早了,引起的新问题是,

2019-05-08 11:28:16.584 ERROR 14020 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.AbstractMethodError: null
    at org.springframework.core.OrderComparator.findOrder(OrderComparator.java:141) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.core.annotation.AnnotationAwareOrderComparator.findOrder(AnnotationAwareOrderComparator.java:65) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.core.OrderComparator.getOrder(OrderComparator.java:124) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.core.OrderComparator.getOrder(OrderComparator.java:112) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.core.OrderComparator.doCompare(OrderComparator.java:81) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.core.OrderComparator.compare(OrderComparator.java:68) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at java.util.TimSort.countRunAndMakeAscending(TimSort.java:360) ~[na:1.8.0_201]
    at java.util.TimSort.sort(TimSort.java:220) ~[na:1.8.0_201]
    at java.util.Arrays.sort(Arrays.java:1512) ~[na:1.8.0_201]
    at java.util.ArrayList.sort(ArrayList.java:1462) ~[na:1.8.0_201]
    at org.springframework.boot.SpringApplication.asUnmodifiableOrderedSet(SpringApplication.java:1309) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
    at org.springframework.boot.SpringApplication.getListeners(SpringApplication.java:1218) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
    at org.springframework.boot.context.event.EventPublishingRunListener.contextLoaded(EventPublishingRunListener.java:85) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
    at org.springframework.boot.SpringApplicationRunListeners.contextLoaded(SpringApplicationRunListeners.java:66) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
    at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:382) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:305) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
    at com.example.test_nacos.TestNacosApplication.main(TestNacosApplication.java:53) [classes/:na]
    

看来还是有版本问题,后面发现springboot也要升级到2.1.3.RELEASE。完毕!

参考:
https://github.com/alibaba/nacos/issues/1147
https://github.com/spring-cloud/spring-cloud-config/issues/1167
https://github.com/spring-cloud/spring-cloud-commons/commit/9b8a70e5574e1c0e7cb071d4248f7a0d567187ad#diff-09d0c681fbe54b8a84f6bfa2f96ed21b
https://www.oschina.net/question/3672709_2303162

原文地址:https://www.cnblogs.com/FlyAway2013/p/10840453.html

时间: 2024-10-10 11:47:45

spring cloud的坑的相关文章

spring cloud踩坑指南

版本信息: spring cloud 版本Greenwich.SR2 spring boot 版本2.1.8.RELEASE gateway报错 DefaultDataBuffer cannot be cast to org.springframework.core.io.buffer.NettyDataBuffer 解决方式: springcloud的gateway使用的是webflux,默认使用netty,所以从依赖中排除 tomcat相关的依赖 ,就可以了. 我的问题: 排除了依赖还是报错

spring cloud之坑,访问服务时找不到报404

主要是因为: 启动时 而我访问时,api是按照下面这样访问的: 所以报404找不到 原文地址:https://www.cnblogs.com/grey-wolf/p/8183313.html

[转]Spring Cloud在国内中小型公司能用起来吗?

原文地址:http://www.cnblogs.com/ityouknow/p/7508306.html 今天吃完饭休息的时候瞎逛知乎,突然看到这个一个问题Spring Cloud在国内中小型公司能用起来吗?,吸引了我的注意.仔细的看了题主的问题,发现这是一个好问题,题主经过了一番思考,并且用图形全面的将自己的疑问表达了出来,作为一个研究并使用Spring Boot和Spring Cloud近两年的程序员,看的我手痒痒不答不快呀. 好问题 好问题必须配认真的回答,仔细的看了题主的问题,发现这个问

Spring Cloud ZooKeeper集成Feign的坑2,服务调用了一次后第二次调用就变成了500,错误:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.n

错误如下: 2017-09-19 15:05:24.659 INFO 9986 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.spring[email protected]56528192: startup date [Tue Sep 19 15:05:24 CST 2017]; root of context hierarchy 2017-09-19 15:05:24.858 INFO 9986 --

spring cloud:Edgware.RELEASE版本hystrix超时新坑

升级到Edgware.RELEASE发现,zuul中不管如何设置hystrix的超时时间均不起作用,仍然是默认的1000ms.  降回低版本后正常,但是低版本的fallback方法中,又拿不到详细异常信息,最终暂时在Edgware.RELEASE中,将hystrix的超时关掉,参考以下配置: ribbon: ReadTimeout: 5000 ConnectTimeout: 5000 MaxAutoRetries: 0 MaxAutoRetriesNextServer: 1 hystrix: c

Spring Cloud Config分布式配置中心的使用和遇到的坑

分布式配置中心 为什么要有用分布式配置中心这玩意儿?现在这微服务大军已经覆盖了各种大小型企业,每个服务的粒度相对较小,因此系统中会出现大量的服务,每个服务都要有自己都一些配置信息,或者相同的配置信息,可能不同环境每个服务也有单独的一套配置,这种情况配置文件数量比较庞大,维护起来相当费劲,举个栗子: 在开发的过程中,一般数据库是开发环境数据库,所有服务DB的IP配置为:92.168.0.1,突然老大说,开发环境换了,DB的IP要修改,这下可不好受了,所有模块挨个修改DB的配置,就问你难受不难受?

spring cloud: 升级到spring boot 2.x/Finchley.RELEASE遇到的坑

spring boot2.x已经出来好一阵了,而且spring cloud 的最新Release版本Finchley.RELEASE,默认集成的就是spring boot 2.x,这几天将一个旧项目尝试着从低版本升级到 2.x,踩坑无数,记录一下: 一.gradle的问题 spring boot 2.x 要求gradle版本不能太旧,先把gradle升级到4.6版本,然后编译,各种问题,到gradle官网上查了下,build.gradle有几个小地方要调整 1.1 java-libary 的项目

Spring Cloud 升级最新 Finchley 版本,踩了所有的坑!

Spring Boot 2.x 已经发布了很久,现在 Spring Cloud 也发布了 基于 Spring Boot 2.x 的 Finchley 版本,现在一起为项目做一次整体框架升级. 升级前 => 升级后 Spring Boot 1.5.x => Spring Boot 2.0.2 Spring Cloud Edgware SR4 => Spring Cloud Finchley.RELEASE Eureka Server Eureka Server 依赖更新 升级前: <

Spring Cloud Gateway入坑记

Spring Cloud Gateway入坑记 前提 最近在做老系统的重构,重构完成后新系统中需要引入一个网关服务,作为新系统和老系统接口的适配和代理.之前,很多网关应用使用的是Spring-Cloud-Netfilx基于Zuul1.x版本实现的那套方案,但是鉴于Zuul1.x已经停止迭代,它使用的是比较传统的阻塞(B)IO + 多线程的实现方案,其实性能不太好.后来Spring团队干脆自己重新研发了一套网关组件,这个就是本次要调研的Spring-Cloud-Gateway. 简介 Spring