Spring * -servlet.xml未在Websphere Server启动时加载

时间:2016-09-06 07:55:49

标签: java spring spring-mvc websphere startup

我一直在尝试在服务器启动时运行一个方法。 (根据我的理解问题可能是Context没有在Server启动或重启时加载)。 下面的内容适用于Tomcat 感觉就像Websphere正在做一个懒惰的初始化它不应该

当我在Websphere上部署组件或重新启动它时,除非我点击URL,例如“http://localhost/myapp/

,否则不会加载上下文

我尝试了3种方法来运行方法

  
      
  1. 安排调度
  2.   
@EnableScheduling
public class MyClass{

MyClass(){
}

@Scheduled(cron = "2 * * * * *")
public void myMethod() {
}
  
      
  1. 初始化
  2.   
<bean id="myClass" class="com.abc.abc.billing.myClass"   init-method="readConfigScheduler"/>
  
      
  1. ApplicationListener
  2.   
@Component
public class StartUp implements ApplicationListener<ContextRefreshedEvent>
    {
        @Autowired
        private MyClass cls;
        @Override
        public void onApplicationEvent(ContextRefreshedEvent arg0) 
        {
            System.out.println("ContextLoaded");
            cls.MyMethod();
        }
    }

只要我点击网址“http://localhost/myapp/”,上述所有三种方法都可以使用。

我已经尝试过以下链接寻求帮助,但我并不能让它工作。

Execute method on startup in spring

applicationContext.xml is not getting loaded when I have kept the spring-servlet.xml in Web application

此外,我与很少有人说过,当他们尝试时它的工作,但在后来的调查中我发现当你通过eclipse部署应用程序时,它会自动打开app的url来加载上下文。

因此,当我们重新启动应用程序时,它无法正常工作

  

我的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_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
              http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
<servlet>
    <servlet-name>MyApp</servlet-name>
     <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
     </servlet-class>
     <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/MyApp-servlet.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
</servlet>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<session-config>
    <session-timeout>60</session-timeout>
</session-config>

我对Spring很新,所以任何帮助都会很好

2 个答案:

答案 0 :(得分:1)

似乎您遇到了与此question

中描述的问题相同的问题

默认情况下,websphere通过在收到Web应用程序请求之前不启动servlet来优化服务器启动时间和内存使用,如果要在安装Web应用程序时加载servlet,请将以下行添加到{{ 1}}配置文件或包含它的文件:

server.xml

答案 1 :(得分:0)

  

      org.springframework.web.context.ContextLoaderListener       

您可能想要创建自己的ServletContextListener,它应该扩展到ContextLoaderListener以上。我就是这样做的。请务必在您要实施的super.contextInitialized(...)方法中调用contextInitialized,然后您必须将上述标记替换为xml中的类名。

例如 -

<listener>
  <listener-class>a.b.c.e.f.MyContextLoaderListener</listener-class>
</listener>