tomcat启动springboot war相关问题记录
1.在引入相关包时 将日志相关的包引入 导致tomcat启动引用时日志包冲突 启动失败
Caused by: java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath.
解决:在加入其它包时将日志相关的包排除掉
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
2.将外部jar打入springboot war中
因为需要使用加解密,相关的jar由其它同事提供,故需要加入到springboot项目中,打包时不能打入至war包中 故在pom文件中需如下配置
在项目根目录下创建lib目录(将该目录指定为resurce文件夹类型),以便使用idea启动项目,将外部包放入此目录下
pom中如下配置:
<!-- 引入包 -->
<dependency>
<groupId>com.myjar</groupId> <!--自定义-->
<artifactId>myjar</artifactId> <!--自定义-->
<version>1.0</version> <!--自定义-->
<scope>system</scope> <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
<systemPath>${basedir}/lib/myjar.jar</systemPath> <!--项目根目录下的lib文件夹下-->
</dependency>
<!-- 打包时指定lib 为resource -->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>lib</directory>
</resource>
</resources>
</build>
配置后即可在打包时 将外部jar打入war中的lib目录下
3.在tomcat使用shutdown后,其日志还有输出,且均为异常日志
查询原因,tomcat关闭后,其应用 中消费kafka消息的 是手动的线程池,kafka中的消费线程还在运行,但是应用已关闭,故该线程池中的线程一直在输出异常日志
现临时办法,自定义监听器实现javax.servlet.ServletContextListener,且实现其方法
public void contextDestroyed(ServletContextEvent sce){
//简单粗暴的方式调用exit(0),关闭所有手动线程池(防止tomcat关闭应用未关闭手动线程池)
System.exit(0);
}
在容器关闭时,关闭jvm
此时所有线程关闭 无异常日志打印
4.rabbitmq异常
生产者的服务 去创建 exchange及queue 如果生产者未产生消息 则未创建,那么消费的服务去监听该exchange及queue时,服务报错,导致应用未启动
5.java.lang.NoClassDefFoundError: org/apache/kafka/common/message/KafkaLZ4BlockOutputStream
引入的kafka-api-core 会自动引入kafka-client但是是2.3.1版本,该版本会报上述错误,故 pom中还需单独引入kafka-client
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.8.2.1</version>
<!-- 排除此日志包,否则打包后在tomcat中运行会冲突,应用起不来 -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>