Tomcat não faz depoly de app Springboot

Fiz um app com springboot e quando rodo ele dentro do springboot ele funciona normalmente porém quando gero o war e boto pra rodar no tomcat ele dá uns erros. Já tentei algumas coisas que vi na internet mas até agora nada me ajudou. Não tenho ideia do que esses erros significam nem o que fazer pra resolver, a única que eu sei, pelos logs, é que algo é relacionado ao jdbc ou hibernate…

No manager aparece essas mensagens:

FAIL - Application at context path /noivas-0.0.1-SNAPSHOT could not be started

FAIL - Encountered exception org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/noivas-0.0.1-SNAPSHOT]]

E nos logs:

GRAVE: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/noivas-0.0.1-SNAPSHOT]] (continua...)

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration

Caused by: org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration

Caused by: java.lang.NoClassDefFoundError: javax/el/ELManager

GRAVE: Error deploying web application archive C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\noivas-0.0.1-SNAPSHOT.war java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/noivas-0.0.1-SNAPSHOT]]

GRAVE: The web application [/noivas-0.0.1-SNAPSHOT] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. jul 19, 2018 9:51:43 AM org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads

GRAVE: The web application [/noivas-0.0.1-SNAPSHOT] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. jul 19, 2018 9:51:43 AM org.apache.catalina.loader.WebappClassLoaderBase validateJarFile

INFORMAÇÕES: validateJarFile(C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\noivas-0.0.1-SNAPSHOT\WEB-INF\lib\tomcat-embed-core-8.5.31.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class jul 19, 2018 9:51:43 AM org.apache.catalina.loader.WebappClassLoaderBase validateJarFile

INFORMAÇÕES: validateJarFile(C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\noivas-0.0.1-SNAPSHOT\WEB-INF\lib\tomcat-embed-el-8.5.31.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/el/Expression.class jul 19, 2018 9:51:44 AM org.apache.catalina.loader.WebappClassLoaderBase findResourceInternal

INFORMAÇÕES: Illegal access: this web application instance has been stopped already. Could not load . The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. jul 19, 2018 9:51:48 AM org.apache.catalina.startup.TldConfig execute

INFORMAÇÕES: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

Desculpa, meu comentário nao responde sua pergunta, mas minha dúvida é: porque você quer fazer deploy no tomcat ao invés de rodar diretamente pelo jar gerado pelo springboot?

Isso costuma facilitar tanto o trabalho de operaçao (deploy, monitoramento, provisionar máquinas).

Oi Adel. Cara, pra ser sincero eu não sei fazer nem de um jeito, nem de outro. Eu gerei um jar logo quando terminei, mas não soube fazer direito, então por ser um aplicação que “roda” no browser, pensei que o único jeito era servir ela em um servidor e fui atrás de aprender a fazer pelo war. Detalhe, essa aplicação vai rodar local, então se tiver um jeito mais simples seria até melhor…

Entao, dá uma olhada nesse guia do spring boot:

Você deve usar maven ou gradle pra construir seu jar, e no final, com o jar pronto, só rodar com:

java -jar sua_aplicacao.jar

Tanto no maven quanto no gradle ha opçoes de criar um “uber jar” que é um jar com todas suas dependências dentro. Daí pra colocar pra rodar é só copiar esse jar na máquina que quiser e rodar o comando acima.

clique com o botão direito no seu projeto e ‘Run As’ e escolha maven build, na tela que abrir em goal digite ‘mvn clean install’ vais er criado um .jar do seu projeto.

é só rodar o comando no CMD java -jar sua_aplicacao.jar

Adel e Fabio, se eu fizer assim, toda vida tenho que iniciar a aplicação pelo CMD?

Vamos por partes:

  • Você tem o pom.xml configurado e de acordo com o que pede o funcionamento do spring boot?
  • Você tem uma classe com a anotação @SpringBootApplication, que contenha um método main e a instrução de execução do spring boot?
  • Se você vai executar pela IDE, basta executar a classe com o método main (a mesma do item acima)
  • Se vai executar pelo prompt, não tem mistério é java -jar NOME_DO_JAR.jar
  • Se executa e apresenta erro, qual é o erro?
  1. acredito que sim, pois dentro do springboot ele funciona perfeitamente
  2. Sim
  3. Dentro do springboot eu faço isso mesmo, acontece que é um sistema que vou botar pra funcionar em outros computadores, não posso deixar o sistema rodando dentro do ambiente de desenvolvimento nem com a execução via prompt, pra quem vai usar fica muito difícil… Minha ideia era botar o tomcat como serviço que iniciaria junto com o SO, e então só entrar localhost:8080/aplicação. Esses erros que mostrei dá quando boto o .war da aplicação dentro da pasta webapps do tomcat e tento dar o deploy.