Tratar os erros é uma das etapas mais importantes do projeto, nenhuma aplicação é a prova de falhas e algumas podem ser vitais. No Spring podemos tratar *exceptions* que são capturadas e entregam uma mensagem personalizada para o *client* de forma muito fácil.
Cada conexão com o banco de dados tem seu custo e, percorrer todas as etapas a cada consulta é inviável para grandes aplicações, comprometendo a performance e consumindo mais recursos. Uma estratégia que veio para mitigar esses problemas foi o pool de conexões que nada mais é do que manter aberta algumas conexões com o banco para que elas possam ser reaproveitadas sem que seja necessário abrir uma nova.
Uma das coisas mais legais do Spring Data JPA, é a implementação em tempo de execução dos repositórios, isto é, para algumas funções básicas de CRUD, basta uma interface extender de *JpaRepository* passando o tipo da entidade e o tipo da chave primária nos generics e o Spring vai automaticamente criar um repositório com métodos como *save()*, *findAll()* e etc.
Spring Data JPA é um projeto Spring que facilita a interação com banco de dados implementando as interfaces do JPA e trazendo funcionalidades como a criação de repositórios em tempo de execução. A implementação do JPA padrão do projeto é o Hibernate, um dos ORMs mais utilizados no ecossistema.
Primeiro é necessário entender a diferença entre Spring Framework e Spring Boot. Spring é um framework para resoluções de problemas em Java, Kotlin e Groovy, com um sistema que traz injeção de dependências, inversão de controle e diversas outras funcionalidades para facilitar a vida do programador, o Spring Framework tomou conta do mercado e é amplamente utilizado no mundo corporativo.