版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luowangcan/article/details/80731564
一,前言
前段时间在用Elastic job实现定时任务,由于需要放在在consul下面实现远程服务调用,引起了一系列问题,在这里记录一下。这里的springboot版本是1.5.10
二, 问题记录
- 项目启动错误
java.lang.SecurityException: class "javax.annotation.ManagedBean"'s signer information does not match signer information of other classes in the same package
- 这是jar包冲突引起的,移除项目模块中的spring-boot-starter依赖,父模块已经有配置了,同时添加spring-boot-starter-web依赖,这时报错异常如下:
Caused by: java.lang.NullPointerException: null
at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainer.getPort(JettyEmbeddedServletContainer.java:236)
- 这时报的错误就匪夷所思了,spring-boot-starter-web默认的内嵌服务器是Tomcat,为什么会报jetty的配置为空的错误。查看启动日志,发现运行的不是Tomcat服务器,而是jetty
2018-06-12 10:50:55.983 aceMarsoftCoreJob [main] INFO o.s.b.c.e.j.JettyEmbeddedServletContainerFactory - Server initialized with port: 5280
2018-06-12 10:50:55.984 aceMarsoftCoreJob [main] INFO org.eclipse.jetty.server.Server - jetty-8.1.19.v20160209
2018-06-12 10:50:56.075 aceMarsoftCoreJob [main] INFO application - Initializing Spring embedded WebApplicationContext
- 查看项目依赖,发现了一个jetty的依赖配置:
+- com.dangdang:elastic-job-lite-lifecycle:jar:2.1.5:compile
[INFO] | \- com.dangdang:elastic-job-common-restful:jar:2.1.5:compile
[INFO] | +- com.sun.jersey:jersey-client:jar:1.19.1:compile
[INFO] | \- org.eclipse.jetty.aggregate:jetty-all-server:jar:8.1.19.v20160209:compile
[INFO] | +- org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016:compile
[INFO] | +- org.eclipse.jetty.orbit:javax.security.auth.message:jar:1.0.0.v201108011116:compile
[INFO] | +- org.eclipse.jetty.orbit:javax.mail.glassfish:jar:1.4.1.v201005082020:compile
[INFO] | +- org.eclipse.jetty.orbit:javax.activation:jar:1.1.0.v201105071233:compile
[INFO] | \- org.eclipse.jetty.orbit:javax.annotation:jar:1.1.0.v201108011116:compile
[INFO] +- org.springframework.cloud:spring-cloud-starter-consul-discovery:jar:1.3.2.RELEASE:compile
- 原因是elastic job的restful包中用了jetty做内嵌服务器,移除这里的jetty依赖
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-lite-lifecycle</artifactId>
<version>${elastic.job.version}</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-all-server</artifactId>
</exclusion>
</exclusions>
</dependency>
- 事情还是没有结束,当项目放在生产上时,启动日志停在下面的日志就不动了
log4j:WARN No appenders could be found for logger (com.alibaba.druid.pool.DruidDataSource).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
- 还是查看maven依赖树,发现存在了多余的log4j的依赖
+- org.apache.curator:curator-client:jar:2.11.1:compile
[INFO] | +- org.apache.zookeeper:zookeeper:jar:3.4.8:compile
[INFO] | | +- log4j:log4j:jar:1.2.16:compile
[INFO] | | +- jline:jline:jar:0.9.94:compile
[INFO] | | \- io.netty:netty:jar:3.7.0.Final:compile
- 移除该配置
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>2.11.1</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
- 再次启动还是报错
Caused by: org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for ....
- 进入zoopkeeper控制台,连接该节点,发现该节点设置了令牌认证,而目前公司zoopkeeper的身份认证方式是world,可以肯定节点出了问题,设置了digest令牌,重新声明作业名称再发布即解决问题
getAcl ace_marsoft_job