Как развернуть приложение Spring Boot для сервлета Tomcat 6 2.5

#spring #deployment #spring-boot #servlet-2.5

#spring #развертывание #spring-boot #сервлет-2.5

Вопрос:

Я создал часто задаваемые вопросы, используя spring boot. его необходимо развернуть на сервере tomcat 6 (сервлет 2.5). Мне нужно настроить текущее родительское java-приложение (war) web.xml чтобы направлять все запросы на шаблон URL-адреса «/faq/ *», например, в мое приложение spring boot FAQ. Я скопировал FAQ.jar файл в папку lib родительского приложения. Но я не уверен, как настроить / зарегистрировать сервлет spring boot и сопоставление сервлетов в web.xml родительского приложения.

Использование устаревшего образца spring boot.. Я поместил свое приложение spring boot в папку библиотеки родительского приложения вместе с файлами зависимостей jar. Я добавил этот блок кода в web.xml родительского приложения.

  <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>faq.Application</param-value>
 </context-param>

  <listener>
      <listener-class>
          org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener
      </listener-class>
  </listener>

  <filter>
      <filter-name>metricFilter</filter-name>
      <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>

<filter-mapping>
    <filter-name>metricFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>SpringServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextAttribute</param-name>
        <param-value>org.springframework.web.context.WebApplicationContext.ROOT</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>SpringServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
  

Но когда я запускаю Tomcat, я получаю следующую ошибку.

30 июня 2014 г. 12:17:23 org.apache.catalina.core.StandardContext listenerStart СЕРЬЕЗНОЕ: исключение, отправляющее событие, инициализированное контекстом, экземпляру слушателя класса org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener java.lang.Ошибка IllegalAccessError: пытался получить доступ к методу org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/List ; из класса org.springframework.boot.SpringApplication в org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:355) в org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:346) в org.springframework.boot.SpringApplication.initialize(SpringApplication.java:222) в org.springframework.boot.SpringApplication.(SpringApplication.java:198) в org.springframework.boot.builder.SpringApplicationBuilder.(SpringApplicationBuilder.java:83) в org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener.initWebApplicationContext(SpringBootContextLoaderListener.java:48 ) в орг.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) в org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java: 4779) в org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273) в org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java: 150) в org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:897) в org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:873) в org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615) в org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java: 1095) в org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1617) в java.util.concurrent.Исполнители $RunnableAdapter.call(Executors.java:441) в java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) в java.util.concurrent.FutureTask.run(FutureTask.java:138) в java.util.concurrent.ThreadPoolExecutor$Worker.RunTask(ThreadPoolExecutor.java:886) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) на java.lang.Thread.run(Thread.java:619) 30 июня 2014 г. 12:17:23 org.apache.catalina.core.StandardContext startInternal СЕРЬЕЗНАЯ ОШИБКА: ошибка listenerStart

KevyKev

Ответ №1:

Spring Boot официально не поддерживает Servlet 2.5, но для его работы не требуется много усилий. Это может оказаться полезным: https://github.com/scratches/spring-boot-legacy . Пример здесь: https://github.com/scratches/spring-boot-sample-gae .

Комментарии:

1. Спасибо за ответ… Используя устаревший пример spring boot, изменения в родительском приложении web.xml файл и поместил мое загрузочное приложение в папку lib. Но когда я запускаю Tomcat, я получаю следующую ошибку: СЕРЬЕЗНОЕ: исключение, отправляющее инициализированное контекстом событие экземпляру слушателя класса org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener java.lang. Ошибка IllegalAccessError: пытался получить доступ к методу org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/List ; из класса org.springframework.boot. SpringApplication

2. Возможно, проблема с путем к классу? Проверьте свой WEB-INF / lib и любые разделяемые библиотеки в контейнере на наличие старых версий. Или у вас есть SecurityManager в вашем контейнере?

3. Итак, я должен добавить каждую банку зависимостей моего приложения spring boot (FAQ.jar ), также в папку lib родительского приложения? вместе с самим приложением?

4. Я действительно не знаю, что вы подразумеваете под «родительским приложением», но war является автономным, поэтому все, что должно быть в пути к классу для вашего приложения, должно быть там. Вы не используете систему управления зависимостями с вашим инструментом сборки (maven, gradle и т. Д.)?

5. Война не использует зависимость maven, но spring boot jar… итак, я добавляю банки зависимостей в war -> lib.