
26 - Inicializador de Dados no Banco H2
Olá pessoal! Em aplicações que utilizam o banco de dados H2 em memória, os dados são apagados toda vez que a aplicação é finalizada ou reiniciada. Para facilitar os testes e evitar que você precise cadastrar os dados manualmente sempre, podemos utilizar um recurso chamado CommandLineRunner.
Esse recurso permite executar um bloco de código automaticamente assim que a aplicação é iniciada. Utilizando essa funcionalidade, podemos inserir dados no banco assim que o Spring Boot for carregado.
Estrutura Criada
- Pasta:
configuracao
- Arquivo:
Inicializador.java
Estrutura do arquivo
package br.com.api.pessoa.configuracao; // Importações import br.com.api.pessoa.modelo.PessoaModelo; import br.com.api.pessoa.repositorio.PessoaRepositorio; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; // Classe como um componente gerenciado pelo Spring, permitindo a injeção de dependência e execução na inicialização @Component public class Inicializador implements CommandLineRunner { // Atributo da classe @SuppressWarnings("unused") private final PessoaRepositorio pessoaRepositorio; // Construtor que injeta a dependência do PessoaRepositorio, permitindo o acesso ao banco de dados public Inicializador(PessoaRepositorio pessoaRepositorio) { this.pessoaRepositorio = pessoaRepositorio; } // Método que é executado logo após a inicialização da aplicação @Override public void run(String... args) throws Exception { // Criar objetos que serão utilizados para armazenar na tabela de pessoas PessoaModelo pessoa1 = new PessoaModelo(); pessoa1.setNome("João"); pessoa1.setIdade(30); pessoa1.setCidade("São Paulo"); PessoaModelo pessoa2 = new PessoaModelo(); pessoa2.setNome("Maria"); pessoa2.setIdade(25); pessoa2.setCidade("Rio de Janeiro"); PessoaModelo pessoa3 = new PessoaModelo(); pessoa3.setNome("Carlos"); pessoa3.setIdade(40); pessoa3.setCidade("Belo Horizonte"); PessoaModelo pessoa4 = new PessoaModelo(); pessoa4.setNome("Ana"); pessoa4.setIdade(28); pessoa4.setCidade("São Paulo"); PessoaModelo pessoa5 = new PessoaModelo(); pessoa5.setNome("Luciano"); pessoa5.setIdade(35); pessoa5.setCidade("Rio de Janeiro"); PessoaModelo pessoa6 = new PessoaModelo(); pessoa6.setNome("Suellen"); pessoa6.setIdade(22); pessoa6.setCidade("Curitiba"); PessoaModelo pessoa7 = new PessoaModelo(); pessoa7.setNome("Felipe"); pessoa7.setIdade(50); pessoa7.setCidade("Salvador"); PessoaModelo pessoa8 = new PessoaModelo(); pessoa8.setNome("Luana"); pessoa8.setIdade(30); pessoa8.setCidade("Porto Alegre"); PessoaModelo pessoa9 = new PessoaModelo(); pessoa9.setNome("Ricardo"); pessoa9.setIdade(40); pessoa9.setCidade("Florianópolis"); PessoaModelo pessoa10 = new PessoaModelo(); pessoa10.setNome("Sofia"); pessoa10.setIdade(27); pessoa10.setCidade("Fortaleza"); PessoaModelo pessoa11 = new PessoaModelo(); pessoa11.setNome("Gustavo"); pessoa11.setIdade(33); pessoa11.setCidade("Recife"); PessoaModelo pessoa12 = new PessoaModelo(); pessoa12.setNome("Fernanda"); pessoa12.setIdade(45); pessoa12.setCidade("São Paulo"); PessoaModelo pessoa13 = new PessoaModelo(); pessoa13.setNome("Roberta"); pessoa13.setIdade(26); pessoa13.setCidade("Manaus"); PessoaModelo pessoa14 = new PessoaModelo(); pessoa14.setNome("Eduardo"); pessoa14.setIdade(38); pessoa14.setCidade("Campinas"); PessoaModelo pessoa15 = new PessoaModelo(); pessoa15.setNome("Camila"); pessoa15.setIdade(31); pessoa15.setCidade("Belém"); // Efetuar cadastros pessoaRepositorio.save(pessoa1); pessoaRepositorio.save(pessoa2); pessoaRepositorio.save(pessoa3); pessoaRepositorio.save(pessoa4); pessoaRepositorio.save(pessoa5); pessoaRepositorio.save(pessoa6); pessoaRepositorio.save(pessoa7); pessoaRepositorio.save(pessoa8); pessoaRepositorio.save(pessoa9); pessoaRepositorio.save(pessoa10); pessoaRepositorio.save(pessoa11); pessoaRepositorio.save(pessoa12); pessoaRepositorio.save(pessoa13); pessoaRepositorio.save(pessoa14); pessoaRepositorio.save(pessoa15); } }
Explicação do Código
- A classe foi anotada com
@Component
, tornando-a um bean gerenciado pelo Spring. - Ela implementa a interface
CommandLineRunner
, que contém o métodorun
executado ao iniciar a aplicação. - Utilizamos a injeção de dependência via construtor para acessar o repositório de pessoas.
- Dentro do método
run
, criamos objetos da classePessoaModelo
e os salvamos no banco com o métodosave
.
Vantagens
- Economiza tempo ao evitar a inserção manual de dados a cada execução.
- Facilita os testes com rotas e funcionalidades do sistema.
- Permite iniciar a aplicação com uma base consistente de dados.
Dica
Esse tipo de inicializador é especialmente útil em ambientes de desenvolvimento e testes. Em ambientes de produção, o ideal é utilizar outros mecanismos para inserção de dados, como migrações com ferramentas como Flyway ou Liquibase.
Clique aqui para se tornar membro do canal
Abaixo segue nossa aula no YouTube: