Я думаю, что в вопросе есть противоречие:
Если вы используете SpringBootServletInitializer
, то артефакт должен быть упакован как WAR и развернут на каком-либо веб-сервере, таком как tomcat. Tomcat не встроен в этом случае.
Если вы хотите встроенный Tomcat, то вам не нужен WAR, вам следует использовать «обычный» тип jar-файла приложения с пружинной загрузкой.
Несколько фактов, которые могут помочь:
В бинах CommandLineRunner
нет ничего особенного, за исключением того, что весенняя загрузка автоматически запускает метод run
на всех бинах, которые реализуют этот интерфейс, когда контекст приложения становится доступным.
Тот факт, что у вас есть веб-стартер в зависимостях, обычно означает, что вы намереваетесь запустить веб-сервер (tomcat), однако это не всегда так, вы можете указать веб-среду. введите «NONE», и встроенный кот не будет запущен (см. этот поток для получения дополнительной технической информации)
Теперь, учитывая эти два факта и предполагая, что вы на самом деле не создаете WAR (в этом случае вам придется разместить его на встроенном tomcat, java не распознает WARs) - вы можете определить, например, «flavour» - профиль и определить конфигурацию для бегуна командной строки, который будет активен только для определенный профиль и свойство не запущенного кота должны соответствовать другому типу профиля.
Обновление
На основании комментария OP:
Таким образом, цель состоит в том, чтобы запустить:
java -jar myapp.war
таким образом, что будет работать только CommandLineRunner и никакой настоящий кот не будет загружен
С другой стороны, вы хотите поставить myapp.war
в папку webapps некоторого tomcat, и таким образом CommandLineRunner не будет вызываться, верно?
В этом случае рассмотрите возможность реализации следующего предложения:
create application-cmd.properties
и указать у кота не должно быть (web env. type = NONE) - см. ссылку, которую я предоставил выше
Добавьте @Profile("cmd")
в CommandLineRunner
реализацию, чтобы она работала только при профиле ' указан cmd '.
Запустите java -jar myapp.war
с флагом --spring.profiles.active=cmd
, чтобы загрузить профиль cmd.
Не изменять что-нибудь для развертывания Tomcat - профиль cmd не будет активирован, а CommandLineRunner не будет работать