Pular para o conteúdo principal

Questão de Programação — Java — FGV 2023

ProgramaçãoJava
Código
fg071456
Banca
FGV
Órgão
TCE-SP
Ano
2023
Nível
Superior
Cargo
Agente da Fiscalização - TI
O analista Jacó implementou a aplicação TCERestAPI utilizando Java com Spring Boot. A TCERestAPI é apta para o deploy em servidores de aplicação Java preexistentes, mas também suporta a execução standalone do Spring Boot.Para viabilizar ambas as formas de execução da TCERestAPI, Jacó precisou modificar a classe principal da aplicação, fazendo com que ela estendesse diretamente determinada classe do Spring Boot.Jacó fez com que a classe principal da TCERestAPI estendesse a classe do Spring Boot:v
  1. ASpringBootStarterTomcat;
  2. BSpringBootServletInitializer;
  3. CSpringBootStarterUndertow;
  4. DServletContextInitializerBeans;
  5. ESpringServletContainerInitializer.
Revelar gabarito e comentário

GabaritoB — SpringBootServletInitializer;

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Spring Boot – Deploy em servidor externo

Gabarito: letra B. Para que uma aplicação Spring Boot possa ser implantada tanto em modo standalone (via main()) quanto em um servidor de aplicação Java tradicional (como Tomcat, Jetty ou Undertow), a classe principal deve estender a classe SpringBootServletInitializer e sobrescrever o método configure(). Essa classe permite que o Spring Boot seja inicializado como um servlet dentro de um container web, mantendo a compatibilidade com a execução standalone.

Alternativa A — ❌ Incorreta

SpringBootStarterTomcat é um starter (dependência) que configura o Tomcat embarcado, não é uma classe para estender. Starters são adicionados ao pom.xml/build.gradle, não herdados.

Alternativa B — ✅ Correta ⟵ GABARITO

SpringBootServletInitializer é a classe que a documentação oficial do Spring Boot indica para ser estendida quando se deseja gerar um arquivo WAR que funcione em servidores de aplicação tradicionais. Ao estendê-la, a aplicação pode ser empacotada como WAR e implantada em qualquer container servlet compatível com Servlet 3.0+, além de ainda poder ser executada como JAR standalone.

Alternativa C — ❌ Incorreta

SpringBootStarterUndertow também é um starter (dependência) para usar o Undertow embarcado, não uma classe de configuração para deploy externo.

Alternativa D — ❌ Incorreta

ServletContextInitializerBeans não existe na API do Spring Boot. É um nome inventado que confunde com o conceito de ServletContextInitializer (interface) e beans do Spring, mas não há classe com esse nome.

Alternativa E — ❌ Incorreta

SpringServletContainerInitializer é uma interface do Servlet API (javax.servlet) utilizada pelo Spring para inicialização programática, mas não é a classe que a classe principal deve estender. A classe correta é a própria SpringBootServletInitializer do Spring Boot.

PEGA ESSA DICA!

Para lembrar: a classe que permite deploy em servidor externo tem nome composto por "SpringBootServletInitializer" – pense em "inicializador do servlet" (é ela que configura o ServletContext para o Spring Boot rodar dentro de um container). Já os nomes com "Starter" referem-se a dependências de construção, não a classes para herança.

Gabarito: letra B.

Link permanente: /questoes/fg071456