今天想在SpringBoot中集成Eureka,结果问题出现各种问题导致启动不起来,下面就跟我一起排一下这些坑!
踩坑一:版本号的对应
首先要看一下你的SpringBoot和SpringCloud的版本对应
可以参考这篇文章:SpringBoot与SpringCloud的版本对应详细版
java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.([Ljava/lang/Object;)V
如果在搭建springboot项目的时候遇到过这样的问题,那么这个问题就是版本兼容问题。
还有一种情况就是关于绑定的问题。提示binder failed
,问题大概类似。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-client</artifactId>
</dependency>
这里引入注册中心jar包时是不需要指定版本号的。因为springboot与eureka整合的时候两个jar的版本很难兼容。所以我们要让系统自己去匹配。那么系统如何自动去自适应呢。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
加入上边的内容系统就可以自动进行匹配了。
Finchley.RELEASE, 这个版本对应的Springboot是: 2.0.0.RELEASE~2.0.9.RELEASE
踩坑二:“Unable to start embedded Tomcat” 问题
报错:
2020-11-17 08:59:17.573 ERROR 42180 --- [ main] o.s.b.web.embedded.tomcat.TomcatStarter : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'traceFilterRegistration' defined in class path resource [org/springframework/cloud/netflix/eureka/server/EurekaServerAutoConfiguration.class]: Unsatisfied dependency expressed through method 'traceFilterRegistration' parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.servlet.Filter' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=httpTraceFilter)}
这是什么问题呢?
这句日志表明, Tomcat已经被引入进来了, 只是“traceFilterRegistration” 这个方法缺少一个参数, 导致Tomcat无法被加载进来.
由此可以想到有可能是Springcloud版本和Springboot版本不一致所导致的, 查看pom文件一看果然如此:
Springcloud的版本是Finchley.RELEASE, 这个版本对应的Springboot是: 2.0.0.RELEASE~2.0.9.RELEASE.换句话说就是低版本的cloud配了高版本的boot. boot版本往下降到2.0.x即可:
所以我把springboot的版本降到2.0.9了
重启后终于成功了~
如果版本号没问题请仔细查看自己的配置文件和注解:
这里可以参考我的配置文件:
server:
port: 7001
eureka:
instance:
hostname: localhost #eureka服务端的实例名称
client:
#false表示不向注册中心注册自己
register-with-eureka: false
#false表示自己端就是注册中心,职责就是维护服务实例,并不需要取检索服务
fetch-registry: false
service-url:
#设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
注意启动器要加注解:
如果文章对你有帮助,不要忘了给我点个赞吼( ̄▽ ̄)~
欢迎关注我的微信公众号:松鼠技术站