在单独的 servlet 中访问 spring 环境

Access spring environment in a separate servlet

我必须将带有 servlet 的旧 spring 应用程序移植到 spring 启动应用程序。

我已经为现有的 servlet 配置了一个 java 风格的配置文件,但是我无法将 spring 环境传递给它们。

例如 java 配置看起来像这样(我已经跳过了真正的映射)

@Configuration
public class ServletConfig {

    @Bean
    public ServletRegistrationBean initServletRegistration() throws ServletException {
        ServletRegistrationBean bean = new ServletRegistrationBean();
        try {
            bean.setServlet(new InitServlet());
        } catch (Exception e) {
            NewLog.logError(this, "InitServlet threw an exception: " + e, e);
            throw new ServletException("InitServlet threw an exception: " + e);
        }
        bean.setUrlMappings(Arrays.asList("...."));
        bean.setLoadOnStartup(1);
        return bean;
    }

    @Bean
    public ServletRegistrationBean testReceiveServiceServletRegistration() {
        ServletRegistrationBean bean = new ServletRegistrationBean();
        bean.setServlet(new TestReceiveServiceServlet());
        bean.setUrlMappings(Arrays.asList("...."));
        return bean;
    }

    @Bean
    public ServletRegistrationBean insertIntoInputQueueServletRegistration() {
        ServletRegistrationBean bean = new ServletRegistrationBean();
        bean.setServlet(new InsertIntoInputQueueServlet());
        bean.setUrlMappings(Arrays.asList("...."));
        return bean;
    }

    @Bean
    public ServletRegistrationBean nonCxfRedirectServletRegistration() {
        ServletRegistrationBean bean = new ServletRegistrationBean();
        bean.setServlet(new NonCxfRedirectServlet());
        bean.setUrlMappings(Arrays.asList(".....");
        return bean;
    }

然后在 servlet 中我想注入 spring 环境,但我总是为 env vairable

获取 null
public class InitServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Autowired
    Environment env;

    public InitServlet() throws Exception {
    }
........
}

servlet 本身工作正常如果我在它们响应的给定 url 映射上调试它们,我只想从它们访问 spring 环境以从 application-X.properties 取决于给定的 spring 配置文件。

Spring 只能注入到 Spring bean,需要在 ServletConfig 配置中注册 InitServlet 作为 Bean class.