2016-04-25 2 views
1

Это боб с этим идентификатором, определенным в моем файле весна-servlet.xmlне удается разрешить ссылки на боб «DataSource» при установке свойства компонента «DataSource» .factory.NoSuchBeanDefinitionException:

<bean id="dataSource" 
     class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" 
     p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" 
     p:password="${jdbc.password}" /> 

Это полная StackTrace

SEVERE: 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 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [META-INF/spring/hibernate-context.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' is defined 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 

это мой контекст файл приложения определяется в моей папке WEB-INF

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
</beans> 

это мой полный файл web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>YummyFoods</display-name> 
    <welcome-file-list> 
    <welcome-file>/JSP/welcome.jsp</welcome-file> 
    </welcome-file-list> 
    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 
    <servlet> 
    <servlet-name>imageServlet</servlet-name> 
    <servlet-class>com.yummyfoods.spring.servlet.ImageServlet</servlet-class> 
</servlet> 
    <servlet-mapping> 
    <servlet-name>imageServlet</servlet-name> 
    <url-pattern>/image/*</url-pattern> 
</servlet-mapping> 
<error-page> 
    <error-code>404</error-code> 
    <location>/error</location> 
</error-page> 
</web-app> 

это моя весна-servlet.xml файл

<mvc:resources location="/resources/" mapping="/resources/**"/> 
    <mvc:default-servlet-handler/>   
    <bean id="jspViewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
     <property name="prefix" value="/JSP/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 

     <bean id="messageSource" 
     class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basename" value="classpath:messages" /> 
     <property name="defaultEncoding" value="UTF-8" /> 
    </bean> 


    <bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
     p:location="classpath:jdbc.properties" /> 

    <bean id="dataSource" 
     class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" 
     p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" 
     p:password="${jdbc.password}" /> 


    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="configLocation"> 
      <value>classpath:hibernate-cfg.xml</value> 
     </property> 
     <property name="configurationClass"> 
      <value>org.hibernate.cfg.AnnotationConfiguration</value> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${jdbc.dialect}</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.connection.SetBigStringTryClob">true</prop> 
       <prop key="hibernate.jdbc.batch_size">0</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="multipartResolver" 
     class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 

     <!-- one of the properties available; the maximum file size in bytes --> 
     <property name="maxUploadSize" value="10000000" /> 
    </bean> 

    <tx:annotation-driven /> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 
</beans> 

Пожалуйста помогите мне найти свой путь.

+1

Показать контекстные файлы приложения Spring. Из внешнего вида вещей вы определяете источник данных в файле конфигурации контекста DispatcherServlet. И entityManagerFactory в корневом файле контекста приложения. Бобы в корневом контексте приложения не могут ссылаться на те, которые содержатся в файле контекста приложения сервлета. Вам нужно переместить компонент dataSource в другой файл конфигурации xml –

+0

Если у вас есть 'web.xml', отправьте его ... –

+0

Да. Я делаю. Показать его – Blaze

ответ

1

С точки зрения внешнего вида вы определяете источник данных в файле конфигурации контекста DispatcherServlet i.e spring-servlet.xml, как вы указали. И entityManagerFactory в контексте приложения . Бобы в корневом контексте приложения не могут ссылаться на те, которые содержатся в файле контекста приложения сервлета. Вам нужно переместить ваш бонус dataSource в файл hibernate-context.xml.

+0

Я показал файл контекста приложения – Blaze

+0

Что касается META-NF/spring/hibernate-context.xml. Как я сказал, определите dataSource в этом файле, а не spring-servlet.xml –

+0

У меня есть только файл spring-servlet.xml и applicationContext.xml в папке WEB-INF – Blaze

-1

Что происходит с вашими зависимостями? Я думаю, вы должны включить свой ресурс datasource в applicationContext.xml, а затем спящий режим должен быть счастливым.

Итак ...

<bean id="dataSource" 
     class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" 
     p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" 
     p:password="${jdbc.password}" /> 

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="configLocation"> 
      <value>classpath:hibernate-cfg.xml</value> 
     </property> 
     <property name="configurationClass"> 
      <value>org.hibernate.cfg.AnnotationConfiguration</value> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${jdbc.dialect}</prop> 
       <prop key="hibernate.show_sql">true</prop> 
        <prop key="hibernate.connection.SetBigStringTryClob">true</prop> 
       <prop key="hibernate.jdbc.batch_size">0</prop> 
      </props> 
     </property> 
    </bean> 
<tx:annotation-driven /> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 

идет в applicationContext.xml и удаляется из spring-servlet.xml

Тогда гибернация-cfg.xml которым является погруженным в Session заводского опра должен найти его источник данных и будьте счастливы при погрузке.

Лучше изолировать отображение сервлетов и определения mvc от компонентов задней части (фабрика фасоли и т. Д.), Так как при необходимости ее легче изменить в будущем.

С чем вы строите свое приложение?

+0

Пожалуйста, если у вас есть комментарий, сделайте комментарий. Это не ответ –

+0

Я не думаю, что дать полный код для ответа, это будет полезно для op, но это можно сделать. – Nemesis

+0

Опубликовать фрагменты, если вы так думаете – Blaze

Смежные вопросы