版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 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