【问题标题】:Invocation of destroy method 'close' failed on bean with name 'mvcValidator'在名为“mvcValidator”的 bean 上调用销毁方法“close”失败
【发布时间】:2018-07-26 06:38:13
【问题描述】:

我正在使用带有 JDBC 模板的 Spring mvc 版本 3.2.2。 每当我的tomcat重新发布或重新启动时,在控制台中都会生成登录。


 WebApplicationContext
    17:04:36,935 INFO  [DefaultListableBeanFactory] Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@20b87b1d: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,vascularDBConfig,vascularWebAppConfig,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,demoController,handler,observationController,vascularExamController,baseDao,demoDao,observationDao,demoService,observationService,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration,org.springframework.transaction.config.internalTransactionAdvisor,transactionAttributeSource,transactionInterceptor,vascularTransactionManager,namedParameterJdbcTemplate,jdbcTemplate,getDatasource,org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration,httpRequestHandlerAdapter,mvcConversionService,requestMappingHandlerAdapter,defaultServletHandlerMapping,resourceHandlerMapping,beanNameHandlerMapping,viewControllerHandlerMapping,requestMappingHandlerMapping,handlerExceptionResolver,simpleControllerHandlerAdapter,mvcContentNegotiationManager,mvcValidator,setupViewResolver]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@6a52eeab
    17:04:36,935 WARN  [DisposableBeanAdapter] Invocation of destroy method 'close' failed on bean with name 'mvcValidator'
    java.lang.AbstractMethodError: org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.close()V
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod(DisposableBeanAdapter.java:328)
        at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:254)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:510)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:486)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:751)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:455)
        at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1092)
        at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1066)
        at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1012)
        at org.springframework.web.servlet.FrameworkServlet.destroy(FrameworkServlet.java:794)
        at org.apache.catalina.core.StandardWrapper.unload(StandardWrapper.java:1482)
        at org.apache.catalina.core.StandardWrapper.stopInternal(StandardWrapper.java:1843)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
        at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5614)
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
        at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3947)
        at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:426)
        at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)
        at java.lang.Thread.run(Thread.java:744)

我做的三个配置类是下面给出的基于java的配置。

公共类初始化器实现WebApplicationInitializer{

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext();
    webApplicationContext.register(DBConfig.class);
    webApplicationContext.register(WebAppConfig.class);
    webApplicationContext.setServletContext(servletContext);
    ServletRegistration.Dynamic dispatcherServlet = servletContext.addServlet("vasculardispatcher", new DispatcherServlet(webApplicationContext));
    dispatcherServlet.setLoadOnStartup(1);
    dispatcherServlet.addMapping("/rootPath/*");
}

}

第二个是

@Configuration
@EnableTransactionManagement
@ComponentScan("com")
public class DBConfig {

    @Bean
    public DataSource getDatasource() {
        //my code for getting datasource
    }

    @Bean
    public JdbcTemplate jdbcTemplate() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(getDatasource());
        return jdbcTemplate;
    }

    @Bean
    public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {
        return new NamedParameterJdbcTemplate(jdbcTemplate());
    }

    @Bean(name=TRANSACTION_MANAGER)
    public PlatformTransactionManager transactionMngr(){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(getDatasource());
        return dataSourceTransactionManager;
    }   
}

最后一个是

@Configuration
@EnableWebMvc
@ComponentScan("com")
public class WebAppConfig extends WebMvcConfigurerAdapter {

        @Bean
        public UrlBasedViewResolver setupViewResolver() {
                UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();
                viewResolver.setOrder(1);
                viewResolver.setPrefix("/jsp/");
                viewResolver.setSuffix(".jsp");
                viewResolver.setViewClass(JstlView.class);
                return viewResolver;
        }

        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new SecurityAccessInterceptor());
        }


}

会有什么帮助吗?

【问题讨论】:

  • 您使用的是较新的validation-api 版本,然后是您的实际验证器实现(可能是hibernate-validator)。修复你的依赖。

标签: spring spring-mvc spring-jdbc jdbctemplate


【解决方案1】:

尝试验证-api-1.0.0.GA

<dependency>
  <groupId>javax.validation</groupId>
  <artifactId>validation-api</artifactId>
  <version>1.0.0.GA</version>
</dependency>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-28
    • 2015-05-31
    • 2014-12-22
    • 1970-01-01
    • 2013-07-04
    • 2018-09-20
    • 2021-01-29
    • 2014-12-11
    相关资源
    最近更新 更多