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>

猜你喜欢

转载自www.cnblogs.com/lantuanqing/p/13164323.html