Deploy de .war no SpringBoot não funciona. Mostra erro 404

Bom dia pessoal!

Estou com o seguinte problema, tenho uma aplicação que funciona perfeitamente rodando na minha IDE (Spring Tool Suite) mas ao gerar o arquivo war e subir a aplicação no tom cat ele não funciona, mas apenas erro 404, abri o war e todos os arquivo estão lá, já tem seguir tudo quando e tutorial com problemas semelhantes mas nenhum resolveu. Abaixo mais informações,.

Versão do java na aplicacao 11
Versão do jva no servidor 11
Versão do tomcat no servidor 8.5.55

minha classe principal

package br.com.masterplastfitas;
 
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;
 
@SpringBootApplication
public class MasterApplication extends SpringBootServletInitializer {
 
    public static void main(String[] args) {
        SpringApplication.run(MasterApplication.class, args);
    }
     
     @Override
      protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
          return builder.sources(MasterApplication.class);
      }
}

meu pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.2</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>masterplast</groupId>
    <artifactId>Master</artifactId>
    <version>2.0</version>
    <packaging>war</packaging>
    <name>Master</name>
    <description>Aplicação web </description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity5</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mindrot</groupId>
            <artifactId>jbcrypt</artifactId>
            <version>0.4</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> 
                </plugin> -->
        </plugins>
    </build>
</project>

tomcat

Como o spring-boot vem com um tomcat embarcado, vc deve fazer algumas mudanças para poder rodar o projeto num tomcat externo. Siga os passos desse link: https://www.baeldung.com/spring-boot-war-tomcat-deploy

Obrigado Lucas! Pois é eu fiz essa mudanças também mas nao mudou nada, nao da erro na hora de complilar mas quando coloco no tomcat ele so dá erro 404. Tem alguma outra ideia?

1 curtida

Aparentemente o 404 que você está recebendo é do próprio tomcat e não do Spring.

Seu contexto que foi configurado no tomcat é realmente o /master?

Oi Janthan, sim é /master, inclusive na ide funciona normal. Já tentei tudo quando é jeito e nada no tomcat

Tente também excluir o tomcat das dependências no pom.xml:

<dependencies>
  <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>
</dependencies>

Esse coloquei pra testar, estava sem, mas mesmo sem da esse erro

Mas na IDE você está rodando direto a aplicação pelo servidor embedded ou você configurou um servidor externo?

pelo servidor embutido, estou usando o spring tools suit com o tomcat embutido nele

Então por isso que na IDE funciona, o servidor embedded do Spring é auto configurado e pode ser modificado através dos arquivos de properties.

Algum motivo especial para você estar querendo gerar um artefato como .war e configurar um servidor na mão ao invés de disponibilizar sua aplicação como um .jar e utilizar o embedded tomcat?

é que já tem aqui na empresa um servidor com algumas aplicações que rodam em jsp, esse é meu primeiro projeto com spring, ai pensei em colocar junto. essas em jsp fiz usando o netbeans(não me zoa) e funcionaram de primeira.

as pliacaoes jsp sao em java 8 com tomcat 8.5, achei que fosse esse o problema já que a aplicacao em spring usa java 11, ai instalei o tomcat 11 mas nao adiantou, mesmo erro.

Se você precisa obrigatoriamente colocar sua aplicação spring junto das demais que são jsp, e é algo relacionado ao seu trabalho, eu recomendaria você trocar uma ideia com as pessoas do seu time para pegar a base de configuração padrão do servidor e configurar sua aplicação spring da mesma forma que o tutorial que o @Lucas_Camara compartilhou.

Agora, se não é obrigatório usar o servidor de aplicação tomcat externo, eu não perderia tempo tentando colocá-lo na mesma estrutura que as demais aplicações jsp estão, utilizaria o próprio servidor embedded mesmo.

kkkk, é que as pessoas do meu time sou só eu kkkk, vou tentar gerar o jar com o servidor embedded e logo posto se deu certo.

Bah, saquei, pensei que tinha mais pessoas no time!

Mano, nesse caso, se a decisão é sua e você tem autonomia para tomá-la, eu iria pelo caminho mais simples, de usar o tomcat embedded do spring e já ter essa aplicação totalmente apartada das aplicações legadas.

Tem razão Jonathan, passei um trabalho aqui pra desfazer as mudanças que tinha feito em relação ao .war mas estou enfrentando um problema parecido agora, a aplicação .jar executa, mas ao tentar acessar ela da esse erro:

package br.com.masterplastfitas.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class RotaIndexController {
	@GetMapping("/")
	public String index() {
		return"/index";
	}
}


essa é a rota do index

O que vc está usando para fazer as telas?

html e javascript

bootstrap