如何在ExternalTomcatServer中运行WAR文件的设置代码



我正在构建一个spring-boot应用程序,一开始,我需要检查一些系统文件,并使用应用程序在那里找到的信息准备一些数据库池。通常,我会将其包含在@SpringBootApplication注释类的主方法中,但是,当我将应用程序作为WAR文件部署到外部Tomcat服务器时,该主类似乎不会运行。我已经检查了主类中应该包含的内容,我的主应用程序类现在看起来是这样的:

package com.companyname.projectname;
import com.companyname.projectname.database.DatabasePoolManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.ApplicationContext;
@SpringBootApplication
public class WebApplication extends SpringBootServletInitializer {
private static final Logger logger = LoggerFactory.getLogger(WebApplication.class);
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(WebApplication.class, args);
DatabasePoolManager dpm = applicationContext.getBean(DatabasePoolManager.class);
dpm.setUpPools();
logger.error("nnIS ANYBODY OUT THERE?nn");
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
logger.error("nnIS ANYBODY OUT THERE? (But in the configure method)nn");
return builder.sources(WebApplication.class);
}
}

这与我最初的设置不同,因为extendsconfigure的覆盖。

到目前为止,这在我的Intellij IDE中仍然运行良好,但一旦移动并部署到tomcat服务器,就不会出现任何日志消息。该应用程序仍然可以工作,但显然缺少一些赋予其功能的设置(与数据库的连接(。当我将此应用程序部署为WAR文件时,我将如何在应用程序启动时运行一些设置代码?

再次感谢M.Deinum在上面的评论中,为了在启动时运行一次,我使用了如下所示的新类:

package com.companyname.projectname;
import com.companyname.projectname.database.DatabasePoolManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class AppStartupRunner implements ApplicationRunner {
@Autowired
ApplicationContext applicationContext;
private static final Logger logger = LoggerFactory.getLogger(AppStartupRunner.class);
@Override
public void run(ApplicationArguments args) throws Exception {
DatabasePoolManager dpm = applicationContext.getBean(DatabasePoolManager.class);
dpm.setUpPools();
}
}

最新更新