Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como rodar todas as migrations de uma única vez?

Fiz primeiro curso, mas não implementei os exemplos. Agora no curso 2, peguei os arquivos do projeto e tentei começar a partir daqui. Deu problema com as migrations. Como tem quatro versões, na minha cabeça, ele iria executar uma por uma em sequência e assim atualizaria o banco, mas não funcionou assim. Está gerando erro na segunda versão, apesar de ele não ter criado nem a primeira.

2023-07-12T15:47:53.174-03:00  INFO 2876 --- [  restartedMain] o.f.c.i.database.base.BaseDatabaseType   : Database: jdbc:mysql://localhost/java (MySQL 8.0)
2023-07-12T15:47:53.235-03:00  WARN 2876 --- [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Validate failed: Migrations have failed validation
Detected failed migration to version 2 (alter-table-medicos-add-column-telefone).
Please remove any half-completed changes then run repair to fix the schema history.

No banco, ele criou a tabela flyway_shema_history e só. Então pensei: Vou rodar os arquivos SQL direto no banco e seguimos em frente. Fiz isso, as tabelas foram criadas, mas quando executo o projeto no Java ele continua apresentando o mesmo erro. Ou, seja, pelo que entendi, é necessário que ele crie as tabelas para que ele saiba que foram criadas corretamente.

Eu sei que o correto seria voltar a sequência do curso curso 1, mas em um caso como este, haveria alguma forma de resolver o problema, sem precisar voltar e refazer o passo a passo inicial?

PS: Uma informação importante: A base de dados que optei por usar não está vazia, isto é, já existem outras tabelas.

2 respostas
solução!

Oi Luis!

Não tem problema você iniciar a partir do segundo curso com o projeto final do primeiro. O que o Flyway vai tentar fazer é exatamente o que você mencionou, vai rodar as migrations uma por uma, e se der algum erro ele interrompe o processo.

Isso aconteceu no seu caso, pois como você mencionou, o database não estava vazio e pode ser que uma migration tentou criar uma tabela que já existia e com isso o flyway se perde. O database deveria estar começar vazio, para que o Flyway crie todas as tabelas via migrations, sem intereferncias que cosias pré-existentes nele.

Muito obrigado. Funcionou.