Perguntas da entrevista do Spring Boot

Perguntas da entrevista do Spring Boot

1. Introdução

Desde a sua introdução, o Spring Boot tem sido um participante importante no ecossistema do Spring. Este projeto facilita muito nossa vida com sua capacidade de configuração automática.

Neste tutorial, cobriremos algumas das perguntas mais comuns relacionadas ao Spring Boot que podem surgir durante uma entrevista de emprego.

Leitura adicional:

Principais perguntas da entrevista do Spring Framework

Uma rápida discussão de perguntas comuns sobre o Spring Framework que podem surgir durante uma entrevista de emprego.

Read more

Uma comparação entre Spring e Spring Boot

Entenda a diferença entre o Spring e o Spring Boot.

Read more

2. Questões

Q1. Quais são as diferenças entre Spring e Spring Boot?

O Spring Framework fornece vários recursos que facilitam o desenvolvimento de aplicativos da web. Esses recursos incluem injeção de dependência, ligação de dados, programação orientada a aspectos, acesso a dados e muito mais.

Ao longo dos anos, o Spring tem se tornado cada vez mais complexo, e a quantidade de configuração que esse aplicativo requer pode ser intimidadora. É aqui que o Spring Boot é útil - facilita muito a configuração de um aplicativo Spring.

Essencialmente, enquanto a Primavera não tem opinião,Spring Boot takes an opinionated view of the platform and libraries, letting us get started quickly.

Aqui estão dois dos benefícios mais importantes que o Spring Boot traz:

  • Configure automaticamente aplicativos com base nos artefatos que encontrar no caminho de classe

  • Fornecer recursos não funcionais comuns aos aplicativos em produção, como verificações de segurança ou integridade

Por favor, verifique um de nossos outros tutoriais para umdetailed comparison between vanilla Spring and Spring Boot.

Q2. Como podemos configurar um aplicativo Spring Boot com Maven?

Podemos incluir o Spring Boot em um projeto Maven, como faria em qualquer outra biblioteca. No entanto, a melhor maneira é herdar do projetospring-boot-starter-parent e declarar dependências paraSpring Boot starters. Isso permite que nosso projeto reutilize as configurações padrão do Spring Boot.

Herdar o projetospring-boot-starter-parent é simples - só precisamos especificar um elementoparent empom.xml:


    org.springframework.boot
    spring-boot-starter-parent
    2.1.1.RELEASE

Podemos encontrar a versão mais recente despring-boot-starter-parent emMaven Central.

Using the starter parent project is convenient, but not always feasible. Por exemplo, se nossa empresa exige que todos os projetos sejam herdados de um POM padrão, não podemos contar com o pai inicial do Spring Boot.

Nesse caso, ainda podemos obter os benefícios do gerenciamento de dependências com este elemento POM:


    
        
            org.springframework.boot
            spring-boot-dependencies
            2.1.1.RELEASE
            pom
            import
        
    

Finalmente, podemos adicionar algumas dependências aos iniciadores do Spring Boot, e então estamos prontos.

Q3. Quais Spring Boot Starters estão disponíveis por aí?

O gerenciamento de dependências é uma faceta crucial de qualquer projeto. Quando um projeto é complexo o suficiente, gerenciar dependências pode se transformar em um pesadelo, pois haverá artefatos demais envolvidos.

É aqui que os iniciantes do Spring Boot são úteis. Cada acionador de partida desempenha um papel de balcão único para todas as tecnologias Spring necessárias. Outras dependências necessárias são então transferidas e gerenciadas de forma consistente.

Todos os iniciantes estão no grupoorg.springframework.boot e seus nomes começam comspring-boot-starter-. This naming pattern makes it easy to find starters, especially when working with IDEs that support searching dependencies by name.

No momento da redação deste artigo, existem mais de 50 entradas disponíveis. Os mais usados ​​são:

  • spring-boot-starter: inicializador principal, incluindo suporte para configuração automática, registro e YAML

  • spring-boot-starter-aop: inicial para programação orientada a aspectos com Spring AOP e AspectJ

  • spring-boot-starter-data-jpa: inicial para usar Spring Data JPA com Hibernate

  • spring-boot-starter-jdbc: inicial para usar JDBC com o pool de conexão HikariCP

  • spring-boot-starter-security: inicial para usar Spring Security

  • spring-boot-starter-test: starter para testar aplicativos Spring Boot

  • spring-boot-starter-web: inicial para a construção da web, incluindo RESTful, aplicativos usando Spring MVC

Para uma lista completa de iniciadores, consultethis repository.

Para encontrar mais informações sobre os iniciadores Spring Boot, dê uma olhada emIntro to Spring Boot Starters.

Q4. Como desativar uma configuração automática específica?

Se quisermos desabilitar uma autoconfiguração específica, podemos indicá-la usando o atributoexclude da anotação@EnableAutoConfiguration. Por exemplo, este snippet de código neutralizaDataSourceAutoConfiguration:

// other annotations
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
public class MyConfiguration { }

Se habilitássemos a configuração automática com a anotação@SpringBootApplication - que tem@EnableAutoConfiguration como uma metanotação - poderíamos desativar a configuração automática com um atributo de mesmo nome:

// other annotations
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class MyConfiguration { }

Também podemos desabilitar uma configuração automática com a propriedade de ambientespring.autoconfigure.exclude. Esta configuração no arquivoapplication.properties faz a mesma coisa que antes:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Q5. Como registrar uma configuração automática personalizada?

Para registrar uma classe de configuração automática, devemos ter seu nome totalmente qualificado listado na chaveEnableAutoConfiguration no arquivoMETA-INF/spring.factories:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.autoconfigure.CustomAutoConfiguration

Se construirmos um projeto com o Maven, esse arquivo deve ser colocado no diretórioresources/META-INF, que irá parar no local mencionado durante a fasepackage.

Q6. Como dizer a uma configuração automática para recuar quando um feijão existe?

Para instruir uma classe de autoconfiguração a recuar quando um bean já existe, podemos usar a anotação@ConditionalOnMissingBean. Os atributos mais visíveis desta anotação são:

  • value: Os tipos de feijão a serem verificados

  • name: Os nomes dos feijões a serem verificados

Quando colocado em um método adornado com@Bean, o tipo de destino é padronizado para o tipo de retorno do método:

@Configuration
public class CustomConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public CustomService service() { ... }
}

Q7. Como implantar aplicativos da Web do Spring Boot como arquivos Jar e War?

Tradicionalmente, empacotamos um aplicativo Web como um arquivo WAR e depois o implantamos em um servidor externo. Fazer isso nos permite organizar vários aplicativos no mesmo servidor. Durante o tempo em que a CPU e a memória eram escassas, essa era uma ótima maneira de economizar recursos.

No entanto, as coisas mudaram. O hardware do computador é bastante barato agora e a atenção voltou-se para a configuração do servidor. Um pequeno erro na configuração do servidor durante a implantação pode levar a consequências catastróficas.

Spring tackles this problem by providing a plugin, namely spring-boot-maven-plugin, to package a web application as an executable JAR. Para incluir este plugin, basta adicionar um elementoplugin apom.xml:


    org.springframework.boot
    spring-boot-maven-plugin

Com este plugin instalado, obteremos um JAR gordo após executar a fasepackage. Este JAR contém todas as dependências necessárias, incluindo um servidor incorporado. Portanto, não precisamos mais nos preocupar em configurar um servidor externo.

Em seguida, podemos executar o aplicativo como faria com um JAR executável comum.

Observe que o elementopackaging no arquivopom.xml deve ser definido comojar para construir um arquivo JAR:

jar

Se não incluirmos esse elemento, o padrão também serájar.

No caso de desejarmos construir um arquivo WAR, altere o elementopackaging parawar:

war

E deixe a dependência do contêiner fora do arquivo compactado:


    org.springframework.boot
    spring-boot-starter-tomcat
    provided

Depois de executar a fase Mavenpackage, teremos um arquivo WAR implementável.

Q8. Como usar o Spring Boot para aplicativos de linha de comando?

Assim como qualquer outro programa Java, um aplicativo de linha de comando Spring Boot deve ter um métodomain. Este método serve como um ponto de entrada, que invoca o métodoSpringApplication#run para inicializar o aplicativo:

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class);
        // other statements
    }
}

A classeSpringApplication então dispara um contêiner Spring e configura automaticamente os beans.

Observe que devemos passar uma classe de configuração para o métodorun para funcionar como a fonte de configuração primária. Por convenção, esse argumento é a própria classe de entrada.

Depois de chamar o métodorun, podemos executar outras instruções como em um programa normal.

Q9. Quais são as possíveis fontes de configuração externa?

O Spring Boot fornece suporte para configuração externa, permitindo executar o mesmo aplicativo em vários ambientes. Podemos usar arquivos de propriedades, arquivos YAML, variáveis ​​de ambiente, propriedades do sistema e argumentos de opção da linha de comandos para especificar propriedades de configuração.

Podemos então obter acesso a essas propriedades usando a anotação@Value, um objeto vinculado por meio dethe @ConfigurationProperties annotation ou a abstraçãoEnvironment.

Aqui estão as fontes mais comuns de configuração externa:

  • Propriedades da linha de comando: os argumentos das opções da linha de comando são argumentos do programa que começam com um hífen duplo, como–server.port=8080. O Spring Boot converte todos os argumentos em propriedades e os adiciona ao conjunto de propriedades do ambiente.

  • Propriedades do aplicativo: as propriedades do aplicativo são aquelas carregadas do arquivoapplication.properties ou de sua contraparte YAML. Por padrão, o Spring Boot procura por este arquivo no diretório atual, raiz do classpath ou em seu subdiretórioconfig.

  • Propriedades específicas do perfil: as propriedades específicas do perfil são carregadas do arquivoapplication-{profile}.properties ou de sua contraparte YAML. O marcador de posição{profile} refere-se a um perfil ativo. Esses arquivos estão nos mesmos locais e têm precedência sobre arquivos de propriedades não específicos.

Q10. O que significa que o Spring Boot suporta ligações descontraídas?

A vinculação relaxada no Spring Boot é aplicável athe type-safe binding of configuration properties.

Com a vinculação relaxada, a chave de uma propriedade de ambiente não precisa ser uma correspondência exata de um nome de propriedade. Essa propriedade de ambiente pode ser escrita em camelCase, kebab-case, snake_case ou em maiúsculas com palavras separadas por sublinhados.

Por exemplo, se uma propriedade em uma classe de bean com a anotação@ConfigurationProperties for chamadamyProp, ela pode ser vinculada a qualquer uma dessas propriedades de ambiente:myProp,my-prop,my_prop ouMY_PROP.

Q11. What éSpring Boot Devtools Used For?

O Spring Boot Developer Tools, ou DevTools, é um conjunto de ferramentas que facilitam o processo de desenvolvimento. Para incluir esses recursos de tempo de desenvolvimento, precisamos apenas adicionar uma dependência ao arquivopom.xml:


    org.springframework.boot
    spring-boot-devtools

O módulospring-boot-devtools é desabilitado automaticamente se o aplicativo for executado em produção. A reembalagem de arquivos também exclui esse módulo por padrão. Portanto, isso não trará nenhuma sobrecarga para o nosso produto final.

Por padrão, o DevTools aplica propriedades adequadas a um ambiente de desenvolvimento. Essas propriedades desativam o cache do modelo, habilitam o log de depuração para o grupo da Web e assim por diante. Como resultado, temos essa configuração sensível do tempo de desenvolvimento sem definir nenhuma propriedade.

Os aplicativos que usam o DevTools são reiniciados sempre que um arquivo no caminho de classe é alterado. Esse é um recurso muito útil no desenvolvimento, pois fornece feedback rápido para modificações.

Por padrão, recursos estáticos, incluindo modelos de visualização, não reiniciam. Em vez disso, uma alteração de recurso aciona uma atualização do navegador. Observe que isso só pode acontecer se a extensão LiveReload estiver instalada no navegador para interagir com o servidor LiveReload incorporado que o DevTools contém.

Para obter mais informações sobre este tópico, consulteOverview of Spring Boot DevTools.

Q12. Como escrever testes de integração?

Ao executar testes de integração para um aplicativo Spring, devemos ter umApplicationContext.

Para tornar nossa vida mais fácil, Spring Boot fornece uma anotação especial para testes -@SpringBootTest. Esta anotação cria umApplicationContext das classes de configuração indicadas por seu atributoclasses.

In case the classes attribute isn’t set, Spring Boot searches for the primary configuration class. A pesquisa começa a partir do pacote que contém o teste até encontrar uma classe anotada com@SpringBootApplication ou@SpringBootConfiguration.

Observe que se usarmos o JUnit 4, devemos decorar a classe de teste com@RunWith(SpringRunner.class).

Para obter instruções detalhadas, verifique nosso tutorial emtesting in Spring Boot.

Q13. What Is Spring Boot Actuator Used For?

Essencialmente, o Actuator dá vida aos aplicativos Spring Boot, ativando recursos prontos para produção. Esses recursos nos permitem monitorar e gerenciar aplicativos quando eles estão sendo executados na produção.

A integração do Spring Boot Actuator em um projeto é muito simples. Tudo o que precisamos fazer é incluir o iniciadorspring-boot-starter-actuator no arquivopom.xml:


    org.springframework.boot
    spring-boot-starter-actuator

O Spring Boot Actuator pode expor informações operacionais usando pontos de extremidade HTTP ou JMX. A maioria dos aplicativos usa HTTP, entretanto, onde a identidade de um endpoint e o prefixo/actuator formam um caminho de URL.

Aqui estão alguns dos pontos de extremidade internos mais comuns que o Actuator fornece:

  • auditevents: Expõe informações de eventos de auditoria

  • env: Expõe propriedades do ambiente

  • health: Mostra informações de saúde do aplicativo

  • httptrace: Exibe informações de rastreamento HTTP

  • info: Exibe informações arbitrárias do aplicativo

  • metrics: Mostra informações de métricas

  • loggers: Mostra e modifica a configuração dos loggers no aplicativo

  • mappings: Exibe uma lista de todos os caminhos de@RequestMapping

  • scheduledtasks: Exibe as tarefas agendadas em seu aplicativo

  • threaddump: Executa um despejo de thread

Por favor, consulte nossoSpring Boot Actuator tutorial para um resumo detalhado.

3. Conclusão

Este tutorial abordou algumas das perguntas mais críticas sobre o Spring Boot que você pode enfrentar durante uma entrevista técnica. Esperamos que eles o ajudem a conseguir o emprego dos seus sonhos.