【问题标题】:Spring+ MyBatis+ mvn Project , java.io.FileNotFoundException: Could not open ServletContext resource [/classpath*:WEB-INF/myBatis-config.xml]Spring MyBatis maven 项目,java.io.FileNotFoundException:无法打开 ServletContext 资源 [/classpath*:WEB-INF/myBatis-config.xml]
【发布时间】:2014-06-12 10:25:47
【问题描述】:

我正在使用 Spring 4.0.5 和 MyBatis 3.2.7 和 maven。我的 myBatis-config.xml 文件位于 WEB-INF/myBatis 文件夹下。在尝试创建 sqlSessionFactory bean 时,我得到了 FileNotFoundError。

这是我的豆子:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />         
            <property name="configLocation" value="myBatis/myBatis-config.xml" />
            <property name="mapperLocations" value="classpath*:com/attinad/mappers/*.xml" />
            </bean>

堆栈跟踪:

SEVERE: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/ds-config.xml]: Invocation of init method failed; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/myBatis/myBatis-config.xml]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:684)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/myBatis/myBatis-config.xml]
    at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141)
    at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:358)
    at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:340)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
    ... 21 more

我尝试将 /classpath*:WEB-INF/myBatis/myBatis-config.xml 作为值。但这没有帮助。

请帮我找到解决方案,因为我已经花了几个小时调试这个。

请找到 myBatis-config.xml 文件。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 <configuration>
 <settings>
 <setting name="cacheEnabled" value="true" />
 <setting name="lazyLoadingEnabled" value="true" />
 <setting name="multipleResultSetsEnabled" value="true" />
 <setting name="useColumnLabel" value="true" />
 <setting name="useGeneratedKeys" value="false" />
 <setting name="defaultExecutorType" value="SIMPLE" />
 <setting name="defaultStatementTimeout" value="100" />
 <setting name="safeRowBoundsEnabled" value="false" />
 <setting name="mapUnderscoreToCamelCase" value="false" />
 <setting name="localCacheScope" value="SESSION" />
 <setting name="jdbcTypeForNull" value="OTHER" />
 <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
 </settings> 
 <typeAliases><typeAlias type="classpath*:com.attinad.model.Employee" alias="Emp"/></typeAliases>
</configuration>

我的Mapper文件EmployeeMapper.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">


<mapper namespace="com.attinad.dao.EmployeeMapperInterface">

<select id="getEmployeeWithId" parameterType="Long" resultType="Emp">
        select *  from
        employees where
        id=#{empId}

    </select>
</mapper>

【问题讨论】:

    标签: maven spring-mvc mybatis


    【解决方案1】:

    有两种选择。

    1. myBatis-config.xml 放入WEB-INF/classes 文件夹,然后说 classpath:myBatis-config.xml

    2. 由于您使用的是 maven src/main/resources 已经在 classpath 中,因此您可以将文件放在 src/main/resources 下并使用 classpath:myBatis-config.xml

    【讨论】:

    • Chandran WEB-INF下的其他配置文件全部加载无误。同样在我的 web.xml 文件中,,"contextConfigLocation /WEB-INF/myBatis/myBatis-config.xml /WEB-INF/ds- config.xml /WEB-INF/mapper-config.xml " 这加载没有任何错误。所以我不明白为什么会这样。如果我错了,请纠正我。
    • 选项 2 对我有用。谢谢。请说明为什么会这样。
    • :我再次找不到类 init 方法的调用失败;嵌套异常是为“Emp”注册 typeAlias 时出错。原因:java.lang.ClassNotFoundException:找不到类:com.attinad.model.Employee 我在我的 rest-servlet.xml 文件中添加了 。我也尝试添加 bean " "
    【解决方案2】:

    我的配置是:

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="WEB-INF\mybatisConf.xml" />
    </bean>
    

    <bean id="sqlMapClient" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory" />
    </bean>
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-05
      • 2023-03-15
      • 2014-04-16
      • 1970-01-01
      • 2015-02-03
      • 2018-12-18
      • 2016-04-04
      • 2016-02-22
      相关资源
      最近更新 更多