zoukankan      html  css  js  c++  java
  • 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>
    
  • 相关阅读:
    git connection due to public key issue
    ubuntu search and java write to file
    url
    sort by datetime
    work on ui
    PHP工厂方法模式
    PHP的简单工厂模式
    php如何判断数组是一维还是多维
    nginx搭建分布式简单配置
    python的单例模式
  • 原文地址:https://www.cnblogs.com/lantuanqing/p/13164323.html
Copyright © 2011-2022 走看看