簡體   English   中英

使用Maven將Spring MVC與Hibernate集成

[英]Integration of Spring MVC with Hibernate using Maven

我花了很多時間嘗試集成Hibernate和Spring MVC。 但一次又一次我遇到了問題,最后一個對我來說是最難的。

我創建了一個簡單的Maven項目並添加到@Configuration-class new bean:

@Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
        dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
        dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
        dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));

        return dataSource();
    }

在構建項目之后,我在控制台中播放了奇怪的輸出:

    at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:280)
    at com.mvc.app.init.BaseConfig$$EnhancerByCGLIB$$14f5e201.dataSource(<generated>)
    at com.mvc.app.init.BaseConfig.dataSource(BaseConfig.java:43)
    at com.mvc.app.init.BaseConfig$$EnhancerByCGLIB$$14f5e201.CGLIB$dataSource$1(<generated>)
    at com.mvc.app.init.BaseConfig$$EnhancerByCGLIB$$14f5e201$$FastClassByCGLIB$$49506a23.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:280)
    at com.mvc.app.init.BaseConfig$$EnhancerByCGLIB$$14f5e201.dataSource(<generated>)
    at com.mvc.app.init.BaseConfig.dataSource(BaseConfig.java:43)
    at com.mvc.app.init.BaseConfig$$EnhancerByCGLIB$$14f5e201.CGLIB$dataSource$1(<generated>)
...

所有試圖使用涉及控制器的鏈接導致:

exception

javax.servlet.ServletException: Servlet.init() for servlet dispatcher threw exception
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)

root cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class com.mvc.app.init.BaseConfig: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource com.mvc.app.init.BaseConfig.dataSource()] threw exception; nested exception is java.lang.StackOverflowError
    ...

請給我建議如何避免這種錯誤,因為我沒有想法。 謝謝

你有無限的遞歸:

public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    //...
    return dataSource();
}

將最后一行更改為:

return dataSource;

你可以通過查看錯誤日志來實際告訴:

工廠方法[public javax.sql.DataSource com.mvc.app.init.BaseConfig。 dataSource() ]拋出異常; 嵌套異常是java.lang。 的StackOverflowError

請注意, DriverManagerDataSource不適合生產使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM