WAS 8.5.5.2:在类路径上没有检测到spring webapplicationinitializer类型

Aks*_*wla 5 spring spring-mvc websphere-8

我有一个spring mvc项目.我正在尝试在IBM Websphere 8.5.5.2上部署此项目

我为项目构建了一个战争,并使用管理控制台将其部署在Websphere上

我正在使用基于Java的配置.我正在使用AbstractAnnotationConfigDispatcherServletInitializer和WebMvcConfigurerAdapter类进行配置.

但是当我部署应用程序时,我基于控制台获得以下内容: 在类路径上没有检测到Spring Webapplicationinitializer类型

并且不会触发弹簧初始化.

我的代码如下

@EnableWebMvc
@Configuration
@ComponentScan({ "com.demo" })
public class SpringWebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

}
Run Code Online (Sandbox Code Playgroud)
public class MyWebInitializer extends
        AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { SpringWebConfig.class };
    }

}
Run Code Online (Sandbox Code Playgroud)
@Controller
public class HelloController {

    @RequestMapping(value = "/qwerty", method = RequestMethod.GET)
    public String printWelcome() {

        return "qwerty";

    }

}
Run Code Online (Sandbox Code Playgroud)

提前致谢 :)

小智 -1

我的猜测(我没有尝试过)是,您依赖 @Configuration 和 @ComponentScan({ "com.demo" }) 来扫描 Spring 应用程序的注释。当您将应用程序作为 war 文件运行时,这不会神奇地发生。

具体来说,从下面的文档中,您缺少一个 SpringBootServletInitializer ,它定义了一个配置方法来告诉支持容器需要扫描哪些类以查找注释:

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-create-a-deployable-war-file

华泰

  • 我使用的是 Spring 而不是 Spring Boot。所以我不能使用 SpringBootServletInitializer (2认同)