1

SpringBootアプリケーションをWARからWebsphere Application Server(WAS)にデプロイしたとします。このWARにはデーモンが含まれているため、WASの起動時に(そして一度だけ)すぐにを開始する必要があります。Springブート:Webshere Application Serverの起動時に自動的にアプリケーションを起動しますか?

しかし、httpリクエストを実行してSpringBootサーブレットをアクティブ化する必要があります。

サーブレットの概念はhttpリクエストに作用することを理解していますが、まだアプリケーションサーバーの起動時に自動起動させたいと思っています。これにより、私のデーモンはスタンドアロンのjar/mainからwar/webappに移植可能になります。

ServletContextListenerを試しましたが、contextInitalizedも最初のhttp要求でのみ呼び出されます。

web.xml(サーブレット3)がありません。

コード:

@SpringBootApplication 
@WebListener 
public class DemoApplication extends SpringBootServletInitializer implements ServletContextListener { 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     System.err.println("ONSTARTUP"); 
     super.onStartup(servletContext); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(DemoApplication.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(DemoApplication.class); 
    } 


    @Override 
    public void contextInitialized(ServletContextEvent sce) { 
     System.err.println("contextInitialized"); 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 
     // 
    } 
} 

と:私は私が最初にこれを取得WAS開始

@Component 
public class DemoRunner implements ApplicationRunner { 

    @Override 
    public void run(ApplicationArguments arg0) throws Exception { 
     System.err.println("I AM RUNNING"); 
    } 

} 

:私の春ブートアプリケーションの開始を取得するには

Launching defaultServer (WebSphere Application Server 
16.0.0.2/wlp-1.0.13.cl160220160526-2258) on Java HotSpot(TM) 64-Bit Server VM, version 1.7.0_79-b15 (en_US) 
[...] 
[AUDIT ] CWWKT0016I: Web application available (default_host): http://localhost:9080/demo/ 
[AUDIT ] CWWKZ0001I: Application test started in 17,282 seconds. 

、Iまずこのリンク(http:/ localhost:9080/demo /)にアクセスする必要があります。その後、ログに表示されるように、起動方法から始めてローリングが開始されます。しかし、どうやってHTTP要求を出さずにこれを始めることができますか?

[err] ONSTARTUP 
    . ____   _   __ _ _ 
/\\/___'_ __ _ _(_)_ __ __ _ \ \ \ \ 
(()\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
\\/ ___)| |_)| | | | | || (_| | )))) 
    ' |____| .__|_| |_|_| |_\__, |//// 
=========|_|==============|___/=/_/_/_/ 
:: Spring Boot ::  (v1.4.0.RELEASE) 
2016-09-02 10:45:52.670 INFO 23716 --- [dPool-thread-48] com.example.DemoApplication    : Starting DemoApplication on [...] 
2016-09-02 10:45:58.019 INFO 23716 --- [dPool-thread-48] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0 
[...] 
[err] I AM RUNNING 
[...] 
2016-09-02 10:45:58.093 INFO 23716 --- [dPool-thread-48] com.example.DemoApplication    : Started DemoApplication in 6.372 seconds (JVM running for 31.549) 
[...] 
[err] contextInitialized 
[err] contextInitialized 

答えて

1

あなたは春のディスパッチサーブレットをカスタマイズすることにより、loadOnStartupを変更することができ、ここではサンプルの質問があり、あなたは、コード

@Bean 
public static BeanFactoryPostProcessor beanFactoryPostProcessor() { 
    return new BeanFactoryPostProcessor() { 

     @Override 
     public void postProcessBeanFactory(
       ConfigurableListableBeanFactory beanFactory) throws BeansException { 
      BeanDefinition bean = beanFactory.getBeanDefinition(
        DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME); 

      bean.getPropertyValues().add("loadOnStartup", 1); 
     } 
    }; 
} 

リファレンスを使用することができます how to configure 'dispatcherServlet' load on startup by spring boot?

をUpate

もっとシンプルなものがあるようですルの方法、あなたは今、ちょうど `設定そのもののための春ブーツで明示的なサポートはありapplication.properites

spring.mvc.servlet.load-on-startup=1

+0

でそれを設定できるのspring.mvc.servlet.load・オン・スタートアップ= 1 ' –

+0

者2解決策は機能しません。上記のconfig-codeを使用してreturnの直前にprintlnを置くと、このbeanFactoryPostProcessorが呼び出されます(呼び出されます).HTTPリクエストを作成した後、スプラッシュの直後、およびonstartupの前です。 – robert

+1

@robertをWAS用に使用している場合は、server.xmlの ''をWASドキュメントから確認する必要があります。 –

関連する問題