今天整合springMVC+Mybatis时tomcat启动初始化报错一直解决不了,哪位大哥能帮帮我啊万分感谢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了今天整合springMVC+Mybatis时tomcat启动初始化报错一直解决不了,哪位大哥能帮帮我啊万分感谢相关的知识,希望对你有一定的参考价值。
错误如下:
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userMapper' defined in file [D:\study_tool\apache-tomcat-7.0.37\an\webapps\springMVC_mybatis_test\WEB-INF\classes\com\fang\dao\UserMapper.class]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [spring-mybatis.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.apache.ibatis.session.Configuration.setDatabaseId(Ljava/lang/String;)V
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:301)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.apache.ibatis.session.Configuration.setDatabaseId(Ljava/lang/String;)V
org.apache.ibatis.session.Configuration.setDatabaseId 找不到这个方法,你jar包换个版本试试吧追问
已经换过啦是最新的版本。可是还是报这个错误啊。不知道是注解的原因还是spring-mybatis.xml的原因。还是没找出来啊 求助啊 大哥
追答开发中不是最新版的就是最好的。
试试换到低版本吧,你会反编译么?
如果会的反编译一下,看看里面有没有这个方法就知道jar包版本对不对了
如何纯注解整合Spring SpringMVC Mybatis
文章目录
前言
心血来潮想要玩玩最原始的SSM,结果发现还有好多人的都是基于配置文件的一个创建方式,那么今天的话就带来基于配置类,基于注解来配置的一个方案吧,这样的SSM开发也可以变得和SpringBoot一样短平快。顺便冒个泡泡,后面有空咱们还得聊聊SpringBoot这个崽做了什么,如何做一个start。那么废话不多说发车了,let’s go!
项目创建
咱们这里就直接创建一个最简单的webapp的maven项目。
之后打开项目,创建一下模块
依赖导入
咱们这边的话还是说玩纯注解开发,然后也是摒弃jsp,我们这边选择这个vue来代替jsp,众所周之,vue 是有两个创建方式的。那么我们这边是倾向于vue+restful风格的,那么接下来的话也是打算记录一些SSM到SpringCloud到k8s的随笔系列。
我们导入如下依赖,同时删除使用webapp模板创建的一些插件啥的,保持maven pom文件的清爽。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
</dependencies>
这里没有导入spring-context 因为在spring-mvc是有的。
那么咱们这个依赖里面主要第一个mybatis和spring整合的一些依赖以及咱们的Jackson,后面咱们用json玩,所以需要这个。
tomcat 插件
这里主要说一下的是tomcat8是没有的,但是如果我们要导入的话需要这样做:
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat8-maven-plugin</artifactId>
<version>3.0-r1655215</version>
<configuration>
<port>8080</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
<!--配置Tomcat8仓库-->
<pluginRepositories>
<pluginRepository>
<id>alfresco-public</id>
<url>https://artifacts.alfresco.com/nexus/content/groups/public</url>
</pluginRepository>
<pluginRepository>
<id>alfresco-public-snapshots</id>
<url>https://artifacts.alfresco.com/nexus/content/groups/public-snapshots</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</snapshots>
</pluginRepository>
<!--这个google的用不了-->
<!--<pluginRepository>
<id>beardedgeeks-releases</id>
<url>http://beardedgeeks.googlecode.com/svn/repository/releases</url>
</pluginRepository>-->
</pluginRepositories>
但是这里有点问题,在我的实际环境里面,如果有问题的话还是使用7的吧,高版本的可能都会有点问题。
tomcat 7 插件
那么如果有问题的话,那么咱们就直接用7的。
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path> <!--项目访问路径。当前配置的访问是localhost:9090/, 如果配置是/aa,则访问路径为localhost:9090/aa -->
<port>9090</port>
<uriEncoding>UTF-8</uriEncoding><!-- 非必需项 -->
</configuration>
</plugin>
</plugins>
</build>
然后在这里配置一下:
就可以跑了。
使用本地tomcat8
我这里的话还是喜欢tomcat8的,然后用本地的。
在idea里面比较智能的是,这玩意你第一次打开会提示Fix,你点击一下就不要自己搞了。之后运行成功。
创建配置类
我们不用XML的原因是spring对注解的支持嘛,我们用配置类来代替application.xml。
我们创建如下配置:
这里咱们没有数据层,因为数据库里面没东西,那个mapper的话可以不要了,反正咱们是纯注解开发。
SpringConfig
@Configuration
@ComponentScan("com.huterox.service")
@PropertySource("classpath:jdbc.properties")
@Import(DuridConfig.class,MybatisConfig.class)
public class SpringConfig
DuridConfig
这个其实jdbc的一个配置。
咱们这里面提出了一个配置文件,
import javax.sql.DataSource;
public class DuridConfig
@Value("$jdbc.driver")
private String driver;
@Value("$jdbc.url")
private String url;
@Value("$jdbc.username")
private String username;
@Value("$jdbc.password")
private String password;
@Bean
public DataSource dataSource()
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
mybatis配置
这个主要是sqlsessionfactory 和 mapper地址,其实就是你的dao层。
public class MybatisConfig
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource)
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setTypeAliasesPackage("com.huterox.dao");
return factoryBean;
public MapperScannerConfigurer mapperScannerConfigurer()
MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
scannerConfigurer.setBasePackage("com.huterox.dao");
return scannerConfigurer;
MVC配置
@Configuration
@ComponentScan("com.huterox.controller")
@EnableWebMvc
public class SpringMvcConfig
这里的话,单独把mvc的配置搞出来了,其实没有必要一起放在Spring里面也是可以的。但是咱们这边规范一点。
Servlet配置
MVC其实还是用这个Servlet的是吧,用tomcat是吧,做了一个dispatch,一般呢,咱们是在web.xml里面去配置,例如路径啊,启动类啊,一般是启动到咱们的mvc的一个容器。那么咱们这边也是做整合,要这个Spring去整合到mybatis,mvc的实现也是用到了springIOC的,所以在里面也mvc里面有spring-context.
那么为了能够让咱们的这个正常启动,我们使用配置,然后tomcat启动的时候会发现这个配置,因为我们接下来要继承一个类,然后重写方法,所以启动的时候呢,会把咱们的SpringMVC,和 Spring容器都启动,然后完成工作。
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer
protected Class<?>[] getRootConfigClasses()
// 子容器
return new Class[]SpringConfig.class;
protected Class<?>[] getServletConfigClasses()
// 父容器,MVC可以访问Spring容器,可以不单独提取出来SpringConfig
// 统一配置,然后填这里就完了。
return new Class[]SpringMvcConfig.class;
protected String[] getServletMappings()
return new String[]"/";
测试
由于咱们这里面没有dao,所以这方面没法演示,也没有办法演示事务。
所以这里就测试web吧,之后咱们用这套直接纯注解开发,已经2202年了是吧。
总结
这个没啥好说的,又水了一篇博客~
以上是关于今天整合springMVC+Mybatis时tomcat启动初始化报错一直解决不了,哪位大哥能帮帮我啊万分感谢的主要内容,如果未能解决你的问题,请参考以下文章
SpringMVC学习04SpringMyBatis和SpringMVC的整合
如何纯注解整合Spring SpringMVC Mybatis