Как запустить код установки для файла WAR на внешнем сервере Tomcat - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть приложение для весенней загрузки, которое я создаю, и в начале мне нужно проверить некоторые системные файлы и подготовить некоторые пулы базы данных, используя информацию, которую приложение находит там. Обычно я включаю это в основной метод аннотированного класса @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 ни одно из сообщений журнала не появляется. Приложение все еще работает, но в нем явно отсутствуют некоторые настройки, которые предоставляют его функциональность (подключения к базам данных). Как бы я go запустил некоторый установочный код при запуске приложения, когда я развернул это приложение в виде файла WAR?

1 Ответ

0 голосов
/ 17 марта 2020

Еще раз спасибо 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();
    }
}
...