当前位置:   article > 正文

Stopping service [Tomcat]和Disconnected from the target VM排查

stopping service [tomcat]

Stopping service [Tomcat]和Disconnected from the target VM排查

很久没有新创建过项目了,最近在创建项目的时候发现项目启动不起来。

使用SpringBoot启动项目启动不起来,提示如下:

org.apache.catalina.core.StandardService startInternal
信息: Starting service [Tomcat]
org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet engine: [Apache Tomcat/9.0.27]
org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring embedded WebApplicationContext
org.apache.catalina.core.StandardService stopInternal
信息: Stopping service [Tomcat]
Disconnected from the target VM, address: '127.0.0.1:61060', transport: 'socket'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

首先想到可能是配置文件配置有问题,检查了application.properties、*.mapper和一些xml的内容发现没有问题存在。

然后查看maven依赖也没有什么问题。

回想一下使用最基础的SSM时还没有问题,但在项目引入通用tk.mybatis.mapper的时候就启动不起来了。

我的Mapper:

BaseMapper

package com.halon.test.dao.mapper;

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

/**
 * @param <T>
 * @author halon
 * @ClassName: BaseMyMapper
 * @Description: mybatis的基础Mapper
 */
public interface BaseMyMapper<T> extends Mapper<T>, MySqlMapper<T> {

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

EntityMapper:

package com.halon.test.dao.mapper;

import com.halon.test.model.entity.DwUser;


public interface DwUserMapper extends BaseMyMapper<DwUser> {

    DwUser selectByUserName(String userName);


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

乍一眼看着没有什么问题,并且没有什么有用的错误提示信息(肯定是有代码报错,只是项目没有打印错误日志),再加上引发这个异常的原因有很多,就想多输出日志

  1. 在Resources目录加入log4j.properties

注:是Project Structure —> Project Setting —> Modules —> Mark as里设置的Resources 而不是你项目的名为resources的目录。

文件内容如下:

log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  • 1
  • 2
  • 3
log4j.rootLogger 语法:
	 log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
	 level : 日志记录的优先级,最常见的从高到低为:ERROR、WARN、INFO、DEBUG;
	 appenderName:日志信息输出到一个或多个地方,可以自定义变量。
例如:
	把日志输出在控制台:
      log4j.appender.A1=org.apache.log4j.ConsoleAppender 
      log4j.appender.A1.layout=org.apache.log4j.PatternLayout
	把日志输出在文件中:
	  log4j.appender.A1=org.apache.log4j.FileAppender
  	  log4j.appender.A1.File = /root/log/halon_test_server.log 
  	  log4j.appender.A1.layout = org.apache.log4j.PatternLayout  
 也可使弄log4j.appender.A1.layout.ConversionPattern 调整日志输出的格式
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  1. 如果是tomcat项目,查看你是否有log4j的依赖,如果没有添加一下。如果是SpringBoot/SpringCloud项目且是默认日志框架就查看第3点,如果不是就跳过3。

Tomcat使用的默认日志框架是log4j。

SpringBoot/SpringCloud使用的默认日志框架是Logback。

拓展:

[日志框架的关系以及日志无法输出问题](日志框架的关系:slf4j,slf4j-log4j12,log4j,logback - 魔杰Lee - 博客园)

  1. 增加log4j输出到slf4j的依赖
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.8.0-beta4</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 再次启动项目查看日志输出
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'baseMyMapper' 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1803)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:860)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
Caused by: tk.mybatis.mapper.MapperException: tk.mybatis.mapper.MapperException: java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
	at tk.mybatis.mapper.mapperhelper.MapperHelper.setSqlSource(MapperHelper.java:378)
	at tk.mybatis.mapper.mapperhelper.MapperHelper.processMappedStatement(MapperHelper.java:297)
	at tk.mybatis.mapper.mapperhelper.MapperHelper.processConfiguration(MapperHelper.java:283)
	at tk.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:93)
	at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1799)
	... 16 more
Caused by: tk.mybatis.mapper.MapperException: java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
	at tk.mybatis.mapper.mapperhelper.MapperTemplate.setSqlSource(MapperTemplate.java:256)
	at tk.mybatis.mapper.mapperhelper.MapperHelper.setSqlSource(MapperHelper.java:375)
	... 22 more
Caused by: java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
	at tk.mybatis.mapper.mapperhelper.MapperTemplate.getEntityClass(MapperTemplate.java:170)
	at tk.mybatis.mapper.provider.base.BaseSelectProvider.selectByPrimaryKey(BaseSelectProvider.java:94)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at tk.mybatis.mapper.mapperhelper.MapperTemplate.setSqlSource(MapperTemplate.java:246)
	... 23 more
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

发现有一个报错:java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class

看到这错误需要我们查看一下mybatis的配置文件:

@tk.mybatis.spring.annotation.MapperScan 配置的 basePackage 字段不能包含通用Mapper(BaseMapper),查看我的BaseMapper和EntityMapper放在了同一个路径下:com.halon.test.dao.mapper

解决方法:让MapperScan扫描不到BaseMapper就ok了。

ps:还可能其他原因导致的,这里只在依赖、配置文件等方面排查,具体可以根据上文增加日志输出排查问题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/260104
推荐阅读
相关标签
  

闽ICP备14008679号