2016-05-11 10 views
0

Wir haben es endlich geschafft, unser Spring Framework von der Version 3.2 auf 4.2.25 zu aktualisieren. Nach einigen schmerzhaften Prozessen bleibe ich nun bei dieser Ausnahme stecken: Error creating bean with name 'accountController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException.
Fehler beim Erstellen der Bean mit dem Namen 'accountController'

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_3_1.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 

<context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/spring/servlet-context.xml, 
      /WEB-INF/spring/servlet-security.xml 
     </param-value> 
</context-param> 

<servlet> 
     <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value> 
       /WEB-INF/spring/servlet-context.xml, 
       /WEB-INF/spring/servlet-security.xml 
      </param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
</servlet> 
</web-app> 

jdbc-context.xml:

<?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:p="http://www.springframework.org/schema/p" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx-4.2.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-4.2.xsd 
     "> 

<context:property-placeholder location="/WEB-INF/spring/spring.properties" /> 

<!-- Enable annotation style of managing transactions --> 
<tx:annotation-driven transaction-manager="transactionManager" /> 

<!-- Declare a transaction manager --> 
<!-- See http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html --> 
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource" /> 

<!-- Declare a datasource that has pooling capabilities--> 
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
      destroy-method="close" 
      p:driverClass="${app.jdbc.driverClassName}" 
      p:jdbcUrl="${app.jdbc.url}" 
      p:user="${app.jdbc.username}" 
      p:password="${app.jdbc.password}" 
      p:acquireIncrement="1" 
      p:idleConnectionTestPeriod="60" 
      p:maxPoolSize="247" 
      p:maxStatements="100" 
      p:minPoolSize="1" />  

<bean id="dataSourceSlave" class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
      destroy-method="close" 
      p:driverClass="${app.jdbc.driverClassName}" 
      p:jdbcUrl="${app.slave.jdbc.url}" 
      p:user="${app.slave.jdbc.username}" 
      p:password="${app.slave.jdbc.password}" 
      p:acquireIncrement="1" 
      p:idleConnectionTestPeriod="60" 
      p:maxPoolSize="247" 
      p:maxStatements="100" 
      p:minPoolSize="1" />    

und eine vollständige Ausnahme Print():

SEVERE: Context initialization failed 
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'accountController': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'accountService': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'friendService': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'agentProfileService': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'screenNameService': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'exceptionService': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'mailService': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'emailNotificationService': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'sportProfileService': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'countryService': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'dataSourceSlave' defined in 
    ServletContext resource [/WEB-INF/spring/jdbc-context.xml]: 
     Error setting property values; nested exception is 
org.springframework.beans.NotWritablePropertyException: 
    Invalid property 'acquireIncrement' of bean class 
    [org.springframework.jdbc.datasource.DriverManagerDataSource]: 
    Bean property 'acquireIncrement' is not writable or has an invalid setter method. 
    Does the parameter type of the setter match the return type of the getter? 
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:311) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326) 
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5068) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5584) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) 
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1259) 
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1998) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:722) 

Nicht sicher, ob relevant: Ich javax.servlet-api-3.1 verwende.

Und jetzt AccountService.java:

@Service("accountService") 
@Transactional 
public class AccountService 
{ 
protected static Logger log = LogManager.getLogger(AccountService.class); 
private NamedParameterJdbcTemplate jdbcTemplate; 
private SimpleJdbcInsert jdbcInviteInsert; 
private SimpleJdbcInsert jdbcChallengeInsert; 
private SimpleJdbcInsert jdbcPostitInsert; 
private SimpleJdbcInsert jdbcPreferenceInsert; 

@Resource(name = "dataSource") 
public void setDataSource(DataSource dataSource) 
{ 
    this.jdbcTemplate = new NamedParameterJdbcTemplate(dataSource); 
    this.jdbcInviteInsert = new SimpleJdbcInsert(dataSource).withTableName("invite_contact").usingGeneratedKeyColumns("id"); 
    this.jdbcChallengeInsert = new SimpleJdbcInsert(dataSource).withTableName("challenge").usingGeneratedKeyColumns("id"); 
    this.jdbcPreferenceInsert = new SimpleJdbcInsert(dataSource).withTableName("preference").usingGeneratedKeyColumns("id"); 
    this.jdbcPostitInsert = new SimpleJdbcInsert(dataSource).withTableName("account_postit"); 
} 

// super-awesome-revolutionary code 

} 

Wenn es irgendwelche zusätzlichen Informationen biete ich sollte mich :)

+0

Formatierung der Fehlermeldung macht es ein wenig einfacher zu sehen, was passiert ('acquireIncrement = "1"' kann nicht auf eine 'DriverManagerDataSource' angewendet werden weil es keinen Setter für solch eine Eigenschaft gibt) – zapl

+0

Werfen Sie einen Blick auf diese Frage, könnte es http://stackoverflow.com/questions/10710020/spring-mvc-configuring-data-source-bean-spring-3-0 helfen -hibernate-Apache-Tomcat-n et – lenach87

Antwort

1

DriverManagerDataSurce bietet keine Pooling-Funktionen. Es definiert nicht die Eigenschaften acquireIncrement, idleConnectionTestPeriod, maxPoolSize, maxStatements und minPoolSize.

Entweder diese Eigenschaften entfernen oder eine Datenquelle verwenden, die Pooling unterstützt, z. B. apache commons-dbcp BasicDataSource. DriverManagerDataSurce wird nicht für die Verwendung in Produktionssystemen empfohlen. Es ist zu Testzwecken.

Zum Beispiel

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="${jdbc.driverClassName}"/> 
     <property name="url" value="${jdbc.url}"/> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
     <property name="maxActive" value="100"/> 
    </bean> 

+0

danke für deine Hilfe. Am Ende benutze ich die folgende Klasse: 'com.mchange.v2.c3p0.ComboPooledDataSource'. Es unterstützt auch das Pooling. – peech

0

Die Ursache ist

Keine Bean mit dem Namen wissen, lassen Sie es 'dataSourceSlave' ist definiert

Scheint wie irgendwo im Dienst verweisen Sie es mit diesem Namen, whi Die Datenquellen-Bean wird mit dem Namen 'dataSource' erstellt.

+0

Meine schlechte, ich habe vergessen, die Kommentare zu entfernen, wenn ich etwas versuchte.Dateien jdbc-context.xml und Exception-Trace wurden im ursprünglichen Post aktualisiert. – peech

0

Ihr Servlet-context.xml Überprüfen Sie, ob Sie das Paket scannen, wo der Controller sind und dann prüfen, ob Sie so etwas wie dieses:

<context:component-scan base-package="your/package/path/controllers"/> 

Ihr/Paket/path/Controller ist, wo Ihr Controller-Klasse leben.

+0

hmm, sollte nicht '' den Trick für alle Unterverzeichnisse machen? – peech

+0

Die Grundidee ist, das Paket zu scannen, wo die Controller sind, natürlich können Sie auch alle Pakete in Ihrem Projekt scannen, um die Controller – billahill

+0

richtig zu finden, weil ich das ganze Paket gescannt hatte, während dieser Fehler kam. Also ich denke nicht, dass das der Fall ist:/ – peech

Verwandte Themen