Elastic Job项目问题解决记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章