赞
踩
很久没有新创建过项目了,最近在创建项目的时候发现项目启动不起来。
使用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'
首先想到可能是配置文件配置有问题,检查了application.properties、*.mapper和一些xml的内容发现没有问题存在。
然后查看maven依赖也没有什么问题。
回想一下使用最基础的SSM时还没有问题,但在项目引入通用tk.mybatis.mapper的时候就启动不起来了。
我的Mapper:
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> {
}
EntityMapper:
package com.halon.test.dao.mapper;
import com.halon.test.model.entity.DwUser;
public interface DwUserMapper extends BaseMyMapper<DwUser> {
DwUser selectByUserName(String userName);
}
乍一眼看着没有什么问题,并且没有什么有用的错误提示信息(肯定是有代码报错,只是项目没有打印错误日志),再加上引发这个异常的原因有很多,就想多输出日志。
注:是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
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 调整日志输出的格式
Tomcat使用的默认日志框架是log4j。
SpringBoot/SpringCloud使用的默认日志框架是Logback。
拓展:
[日志框架的关系以及日志无法输出问题](日志框架的关系:slf4j,slf4j-log4j12,log4j,logback - 魔杰Lee - 博客园)
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.8.0-beta4</version>
</dependency>
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
发现有一个报错: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:还可能其他原因导致的,这里只在依赖、配置文件等方面排查,具体可以根据上文增加日志输出排查问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。