Подтвердить что ты не робот

Как развернуть spring загрузочное веб-приложение на сервере tomcat

Я создал загрузочное веб-приложение spring, но я не могу развернуть файл WAR WAP файла w760 > на tomcat, и я могу запустить его как приложение java. Как запустить загрузочное приложение spring в качестве веб-службы на tomcat. Я использую следующий код. Если можно запустить на tomcat, то plz поможет мне использовать аннотации без использования web.xml и с использованием web.xml.

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
       return application.sources(Application.class);
    }

    public static void main(String[] args) throws Exception {
       SpringApplication.run(Application.class, args);
    }

}

Следующий код для контроллера останова

@RestController
public class HelloWorld{

   @RequestMapping(value = "/hello", method = RequestMethod.GET)
   public ResponseEntity<String> get() {
       return new ResponseEntity<String>("Hello World", HttpStatus.OK);
   }
}

После Pom.xml я использую

<groupId>org.springframework</groupId>
<artifactId>web-service</artifactId>
<version>0.1.0</version>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.0.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>

        <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
    </dependency>
        <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
    </dependency>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
    </dependency>

</dependencies>

<properties>
    <java.version>1.6</java.version>
</properties>


<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<repositories>
    <repository>
        <id>spring-releases</id>
        <url>https://repo.spring.io/libs-release</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>spring-releases</id>
        <url>https://repo.spring.io/libs-release</url>
    </pluginRepository>
</pluginRepositories>
<packaging>war</packaging>

4b9b3361

Ответ 1

Вот две хорошие документы о том, как развернуть приложение Spring Boot как файл war.

Вы можете следить за этой spring загрузкой howto-traditional-deployment документации -

Шаги в соответствии с этой документацией -

  • Вы обновляете основной класс приложений для расширения SpringBootServletInitializer.

  • Следующим шагом будет обновление конфигурации сборки, чтобы ваш проект создавал военный файл, а не файл jar. <packaging>war</packaging>

  • Отметьте встроенную зависимость контейнера сервлета как предусмотрено.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    

и еще один способ -

Смотрите spring документация io, в которой описывается, как развернуть загрузочное приложение spring на сервер приложений.

Шаги -

  • Измените jar упаковку на war.

  • Прокомментируйте объявление плагина spring-boot-maven-plugin в pom.xml

  • Добавьте точку веб-входа в ваше приложение, расширив SpringBootServletInitializer и переопределите метод configure

  • Удалите spring-boot-starter-tomcat dependency и измените вашу зависимость spring-boot-starter-web на

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

В pom.xml удалите spring-beans и spring-webmvc зависимости. Зависимость spring-boot-starter-web будет включать эти зависимости.

Ответ 2

Spring boot предоставляет возможность развертывать приложение в качестве традиционного файла войны в servlet 3.x (без web.xml), поддерживая сервер tomcat. Пожалуйста, см. Spring для загрузки документации. Я расскажу вам, что вам нужно сделать здесь.

шаг 1: изменить pom.xml, чтобы изменить упаковку на войну: (что вы уже сделали)

<packaging>war</packaging>

шаг 2: измените свою зависимость

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-tomcat</artifactId>
   </dependency>

к

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <scope>provided</scope>
</dependency>

Шаг 3: измените свое военное имя (если вам нужно избегать сведений о версии, добавленных с военным именем) в pom.xml в теге <build>.

<build>
    <finalName>web-service</finalName>
.....

Шаг 4: запустите maven build для создания войны: clean install Шаг 5: разверните созданный файл войны web-service.war в tomcat и запросите URL-адрес в браузере http://<tomcat ip>:<tomcat port>/web-service/hello

Вы должны получить Hello World.

Примечание: Также вы можете удалить избыточные зависимости, как сказал @Ali Dehghani.

Ответ 3

Отметьте зависимость spring-boot-starter-tomcat как provided, например:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
</dependency>

Примечание1: Удалите избыточные зависимости из вашего pom.xml, например:

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
</dependency>
<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
</dependency>

Они являются частью пакетов загрузки spring

Примечание2: Сделать банку не войну

Ответ 4

Процесс преобразования ботинка jQuery spring в войну с загрузкой spring документируется по адресу: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging Короче говоря, установите стартовый класс так, как вы делали в своем примере, а затем переключите упаковку с банки на войну в файле .pom. Кроме того, вам необходимо установить spring -boot-starter-tomcat зависимость. Еще раз, процесс задокументирован в полной форме по ссылке выше. Дополнительную информацию об этом можно найти в руководстве spring io, "Преобразование приложения загрузки WAR W760 > в WAR", которое доступно в https://spring.io/guides/gs/convert-jar-to-war/ Если я смогу оказать какую-либо дальнейшую помощь, сообщите мне, и я помогу вам.

Ответ 5

Я столкнулся с этой проблемой. Большая часть из приведенных выше рекомендаций является хорошим советом. Моя проблема состояла в том, чтобы сначала развертывать на Pivotal TC-сервере.

  • Сделайте упаковку в pom a WAR.

    <packaging>war</packaging>
    
  • Добавьте зависимости от pom

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    
  • Я использовал класс Application для хранения main(). У Main был код конфигурации, чтобы можно было вставить EntityManager и т.д. Эта EntityManager использовала информацию из файлов ApplicationContext и persistence.xml для информации о сохранении. Работал отлично под SpringBoot, но не под Tomcat. На самом деле под Tomcat Main() не вызывается. Класс Application расширяет SpringBootServletInitializer.

  • В класс приложения добавлен следующий метод:

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        Application obj = new Application();
        @SuppressWarnings("resource")
        ConfigurableApplicationContext applicationContext = 
             new ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml");
         applicationContext.registerShutdownHook();
         applicationContext.getBeanFactory().autowireBeanProperties(
             obj, AutowireCapableBeanFactory.AUTOWIRE_NO, false);
        return application.sources(Application.class);
    }
    

Требуется только последняя строка - другой код был сохранен в Main() до и был перемещен сюда, чтобы получить инъекцию EntityManager.

  1. Необходимые аннотации:

    @EnableAutoConfiguration
    @ComponentScan
    //@SpringBootApplication will consist of both of these and @Configuration
    
  2. Некоторым URL-адресам теперь может понадобиться изменить корневой контекст, включив

    <artifactId>contextname</artifactId>.
    

Надеюсь, что поможет