Установка mainClass в spring-boot-maven-plugin приводит к необходимости явной установки свойства defaultServletName

У меня был кувшин с пружинной загрузкой, работающий хорошо, пока я newrelic-agent jar до classpath, теперь мне нужно указать основной класс. Это имеет смысл, потому что теперь у меня есть несколько классов со статическим методом main args в classpath. Рекомендуемый способ сделать это - добавить его в'pring-boot-maven-plugin'. Итак, я сделал следующее:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <mainClass>com.ebates.rclon.Application</mainClass>
  </configuration>
  <executions>
    <execution>
     <goals>
        <goal>repackage</goal>
     </goals>
    </execution>
  </executions>
</plugin>

После этого я получаю:

java.lang.IllegalStateException: невозможно найти сервлет по умолчанию для обслуживания статического содержимого. Пожалуйста, установите свойство defaultServletName явно.

  • Зачем задавать автоконфигурацию загрузочной пружины основного класса?
  • Как был настроен defaultServletName ранее?

1 ответ

Я думаю, что у меня есть лучшее понимание этого после некоторого исследования и игры вокруг.

  • Дело не в том, что добавление mainClass было проблемой. Автоконфигурация Spring не имеет к этому никакого отношения, проблема в том, что поскольку в classpath есть два jar-файла, был введен второй основной метод, и Spring boot не знает, какой из них использовать при запуске. Исправление этой проблемы также показало, что существует несколько контекстов приложения.

  • В Spring MVC есть контекст сервлета по умолчанию, который используется, когда нет другого контекста, если он найден для обслуживания статического контента. Когда вы включаете это, обычно вы не указываете имя, но если в вашем пути к классам есть несколько контекстов-кандидатов, вам нужно его назвать. Вот пример того, как это сделать:

@Configuration public class MVCConfig extends WebMvcConfigurerAdapter
{

    @Override public void configureDefaultServletHandling(final 
                       DefaultServletHandlerConfigurer configurer)
    {
        configurer.enable("nameOfDefaultContextGoesHere");
    }

}
Другие вопросы по тегам