【问题标题】:Unable to run 2 Spring MVC Maven hibernate web apps in same tomcat server无法在同一个 tomcat 服务器中运行 2 个 Spring MVC Maven 休眠 Web 应用程序
【发布时间】:2014-02-01 16:48:42
【问题描述】:

我开始从事第二个 Spring MVC maven hibernate 项目,并希望重用现有的工作项目,因为它有很多类似的代码,并且不完全从头开始是有意义的。

所以,我从现有的使用休眠的 Spring MVC 项目创建了一个 maven 原型,但是我无法让我的新 Web 应用程序在同一个 tomcat 服务器上工作。

应用只返回 404 错误,日志显示以下错误 引起:java.io.FileNotFoundException: src\main\resources\database\hbm\bannerItem.hbm.xml(系统找不到指定的路径)

现有应用仍然可以正常工作。

我已经尝试了以下..

  1. 确保构建路径正确并显示资源文件夹

  2. 删除并重新添加资源文件夹

  3. 删除对 bannerItem.hbm.xml 的引用 - 清理等 - 奇怪的是仍然报告错误!

  4. 删除新原型创建的项目并简单地复制现有项目并重命名项目属性 - 只是为了排除原型创建问题,但原始问题仍然存在。

  5. 清除 maven 存储库并重新下载所有库,以防万一发生某种损坏 - 这没什么区别。

  6. 从服务器配置中删除 Web 模块并清理 - 无数次 - 仍然没有区别

  7. 在不同的工作空间,相同的工作空间,不同的tomcat实例中运行项目。

现在真的碰壁了,需要一些帮助。 我要提到的一件事是,我记得有一个类似的问题,当我删除 maven repo 库并从 eclipse 中重新下载它们时,它似乎删除了上面的问题,但由于某种原因,我的项目会运行,但是jsp不会渲染。我通过创建一个新的 jsp 并将旧的 jsp 代码粘贴到新的 jsp 中解决了这个问题,这解决了这个问题 - 完全不知道为什么这解决了这个问题,但它确实 - 为这个问题尝试了这个,但这并没有工作,因为它并没有取代根本的“资源”问题。

希望有人可以在这里提供帮助...很高兴附上所需的任何代码

谢谢

完整的堆栈跟踪/日志输出过于冗长,无法在此处粘贴,因此这里是输出的第一个和最后一个

16:31:59,271 ERROR [localhost-startStop-1] (ContextLoader.java:319) - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bannerPageController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.stevebarnacle.site.services.BannerItemService com.stevebarnacle.site.common.controller.BannerPageController.bannerItemService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bannerItemServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.stevebarnacle.site.dao.BannerItemDao com.stevebarnacle.site.services.impl.BannerItemServiceImpl.bannerItemDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bannerItemDaoImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.stevebarnacle.site.dao.impl.AbstractDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [database/hibernate.cfg.xml]: Invocation of init method failed; nested exception is java.io.FileNotFoundException: src\main\resources\database\hbm\bannerItem.hbm.xml (The system cannot find the path specified)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1120)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:663)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1642)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.stevebarnacle.site.services.BannerItemService com.stevebarnacle.site.common.controller.BannerPageController.bannerItemService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bannerItemServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.stevebarnacle.site.dao.BannerItemDao com.stevebarnacle.site.services.impl.BannerItemServiceImpl.bannerItemDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bannerItemDaoImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.stevebarnacle.site.dao.impl.AbstractDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [database/hibernate.cfg.xml]: Invocation of init method failed; nested exception is java.io.FileNotFoundException: src\main\resources\database\hbm\bannerItem.hbm.xml (The system cannot find the path specified)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)
    ... 27 more

.......

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [database/hibernate.cfg.xml]: Invocation of init method failed; nested exception is java.io.FileNotFoundException: src\main\resources\database\hbm\bannerItem.hbm.xml (The system cannot find the path specified)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1486)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:891)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:834)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:749)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486)
    ... 55 more
Caused by: java.io.FileNotFoundException: src\main\resources\database\hbm\bannerItem.hbm.xml (The system cannot find the path specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
    at org.springframework.core.io.UrlResource.getInputStream(UrlResource.java:125)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:297)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1483)
    ... 65 more
01-Feb-2014 16:31:59 org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart

@jb-nizet,谢谢 - 这是文件内容

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
               <!--  <value>classpath*:database/database.properties</value> -->
                <value>classpath:database/database.properties</value>
            </list>
        </property>
    </bean>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.user}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>

        <property name="mappingLocations">
            <list>
                <value>classpath:database/hbm/bannerItem.hbm.xml</value>
                <value>classpath:database/hbm/fileMeta.hbm.xml</value> 

            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
       <!--  <property name="hbm2ddl.auto">create</property> -->
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

</beans>

映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping.dtd">

<hibernate-mapping>
    <class name="com.stevebarnacle.site.banner.BannerItem"
           table="bannerItem">
        <id name="bannerItemId" type="int">
            <column name="bannerItem_Id" />
            <generator class="native" />
        </id>
        <property name="bannerItemHyperTextLinkUrl" type="string">
            <column name="bannerItem_HyperTextLinkUrl" not-null="false" />
        </property>

        <property name="bannerItemHyperTextLinkText" type="string">
            <column name="bannerItem_HyperTextLinkText" not-null="false" />
        </property>

        <property name="bannerItemImageSourceUrl" type="string">
            <column name="bannerItemImageSourceUrl" not-null="false" />
        </property>

        <property name="bannerItemImageOverlayText" type="string">
            <column name="bannerItemImageOverlayText" not-null="false" />
        </property>

        <many-to-one name="imageFileMeta" column="IMAGEFILEMETA" class="com.stevebarnacle.site.file.ImageFileMeta" not-null="true" cascade="all" unique="false">
            <!-- <column name="imageFileMeta"  not-null="true" /> -->
        </many-to-one>

        <!-- <property name="createdOn" type="java.util.Date">
            <column name="createdOn" not-null="false" />
        </property> -->

    </class>
</hibernate-mapping>

【问题讨论】:

  • 您的代码以某种方式尝试从文件 src\main\resources\database\hbm\bannerItem.hbm.xml 读取,如错误所示,这根本没有意义。在运行时,没有 src/main/resources 文件夹。实际上根本没有文件夹:配置文件应该从类路径加载,而不是使用文件 IO。像往常一样,堆栈跟踪会显示错误的来源。
  • 感谢您的回复...在我的 web.xml 中,我有以下 code contextConfigLocation /WEB-INF/mvc-dispatcher-servlet.xml,类路径:/database/hibernate.cfg.xml,类路径:/spring/mysite-config.xmlcode
  • 我的评论中有一个提示:“像往常一样,堆栈跟踪会显示错误的来源。”。
  • 大声笑 - 抱歉,刚刚添加堆栈跟踪,只是尝试先添加一些上下文,在下一篇文章和来自 hibernate.cfg 的我的 src/main/resources/database sn-p 中。 xml classpath:database/hbm/bannerItem.hbm.xmlclasspath:database/hbm/fileMeta.hbm.xml列表>
  • 添加了堆栈跟踪...请记住,虽然相同的代码在其中一个 Web 应用程序中有效,但在另一个 Web 应用程序中无效,所以我确定代码和 spring 配置等工作正常,尽管不是在“复制”项目中

标签: java hibernate maven spring-mvc


【解决方案1】:

您没有正确提及文件路径

src\main\resources\database\hbm\bannerItem.hbm.xml

在休眠配置文件中。

【讨论】:

  • 它被列为类路径引用。
  • 我可以看到这可能看起来很明显,但是如前所述,这就是我将它用于工作的原始项目的方式,并且以这种方式使用它可以正常工作 - 只是不能在重复的项目中。我认为报告的错误是一个红鲱鱼
  • 更新 - 将其标记为答案,因为尽管做了许多清理和检查类路径,但它实际上是不正确的,而不是输出资源作为构建到“目标/类”的一部分eclipse 使用的是“默认输出文件夹”,这是不正确的,实际上这些类不在运行时的正确文件夹中。但是我的项目仍然无法正常工作,并且此链接有助于最终修复。希望这对其他人有帮助,因为这困扰了我 2 周的扎实的痛苦赌注! groups.google.com/forum/#!msg/riotfamily/mg7faVddOrY/…
猜你喜欢
  • 1970-01-01
  • 2014-09-25
  • 2017-12-15
  • 2016-05-26
  • 1970-01-01
  • 2020-01-14
  • 2015-04-25
  • 1970-01-01
  • 2014-02-06
相关资源
最近更新 更多