У меня есть приложение для весенней загрузки, которое я создаю, и в начале мне нужно проверить некоторые системные файлы и подготовить некоторые пулы баз данных, используя информацию, которую приложение находит там. Обычно я бы включил это в основной метод аннотированного класса @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("\n\nIS ANYBODY OUT THERE?\n\n");
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
logger.error("\n\nIS ANYBODY OUT THERE? (But in the configure method)\n\n");
return builder.sources(WebApplication.class);
}
}
Это отличается от моей первоначальной настройки из-за extends
и переопределения configure
.
До сих пор это все еще отлично работает с моей Intellij IDE, но после перемещения и развертывания на сервере tomcat ни одно из сообщений журнала не появляется. Приложение по-прежнему работает, но в нем явно отсутствуют какие-либо настройки, обеспечивающие его функциональность (подключения к базам данных). Как мне запустить некоторый код установки при запуске приложения, когда я развертываю это приложение в виде файла WAR?
ApplicationRunner
илиCommandLineRunner
, который будет выполняться при запуске приложения. Таким образом, это будет работать в любом сценарии. Мне также интересно, какие пулы вам нужно настроить, и действительно ли вы должны делать это по-другому. - person M. Deinum   schedule 27.02.2020setUpPools
init-методом или вызвать его из слушателя приложения после запуска. Таким образом, это будет работать в любом сценарии. - person M. Deinum   schedule 02.03.2020BeanDefinitionRegistryPostProcessor
, чтобы вы могли добавлять определения bean-компонентов, которые будут обрабатываться и управляться Spring. Опять же, тот факт, что вы создаете пулы за пределами Spring, кажется хакерским. - person M. Deinum   schedule 03.03.2020BeanDefinitionRegistryPostProcessor
? - person JAF   schedule 09.03.2020