Erro no Flyway - resolvido

Banco de dados

image

Erro

2021-10-29 11:00:20.463  INFO 74552 --- [  restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler     : Starting...
2021-10-29 11:00:20.463  INFO 74552 --- [  restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler     : BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [DefaultSubscriptionRegistry[cache[0 destination(s)], registry[0 sessions]]]]
2021-10-29 11:00:20.463  INFO 74552 --- [  restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler     : Started.
2021-10-29 11:00:20.477  INFO 74552 --- [  restartedMain] b.c.g.c.crud.CrudApiApplication          : Started CrudApiApplication in 8.797 seconds (JVM running for 10.039)
2021-10-29 11:00:58.612  INFO 74552 --- [  restartedMain] o.f.c.internal.license.VersionPrinter    : Flyway Community Edition 6.4.4 by Redgate
2021-10-29 11:00:58.724  INFO 74552 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2021-10-29 11:01:02.098  INFO 74552 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2021-10-29 11:01:02.554  INFO 74552 --- [  restartedMain] o.f.c.internal.database.DatabaseFactory  : Database: jdbc:sqlserver://localhost:1433;useFmtOnly=false;useBulkCopyForBatchInsert=false;cancelQueryTimeout=-1;sslProtocol=TLS;jaasConfigurationName=SQLJDBCDriver;statementPoolingCacheSize=0;serverPreparedStatementDiscardThreshold=10;enablePrepareOnFirstPreparedStatementCall=false;fips=false;socketTimeout=0;authentication=NotSpecified;authenticationScheme=nativeAuthentication;xopenStates=false;sendTimeAsDatetime=true;trustStoreType=JKS;trustServerCertificate=false;TransparentNetworkIPResolution=true;serverNameAsACE=false;sendStringParametersAsUnicode=true;selectMethod=direct;responseBuffering=adaptive;queryTimeout=-1;packetSize=8000;multiSubnetFailover=false;loginTimeout=30;lockTimeout=-1;lastUpdateCount=true;encrypt=false;disableStatementPooling=true;databaseName=rede_dois;columnEncryptionSetting=Disabled;applicationName=Microsoft JDBC Driver for SQL Server;applicationIntent=readwrite; (Microsoft SQL Server 15.0)
2021-10-29 11:01:04.053  INFO 74552 --- [  restartedMain] ConditionEvaluationReportLoggingListener : 
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-10-29 11:01:04.059 ERROR 74552 --- [  restartedMain] o.s.boot.SpringApplication               : Application run failed
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-10-29 10:54:18.602 ERROR 78268 --- [  restartedMain] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:798) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:779) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
	at br.com.ghnetsoft.comprasfood.crud.CrudApiApplication.main(CrudApiApplication.java:38) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.3.5.RELEASE.jar:2.3.5.RELEASE]
Caused by: org.flywaydb.core.api.FlywayException: Validate failed: 
Migration checksum mismatch for migration version 158
-> Applied to database : 0
-> Resolved locally    : -2102695793

	at org.flywaydb.core.Flyway.doValidate(Flyway.java:285) ~[flyway-core-6.4.4.jar:na]
	at org.flywaydb.core.Flyway.access$100(Flyway.java:74) ~[flyway-core-6.4.4.jar:na]
	at org.flywaydb.core.Flyway$1.execute(Flyway.java:167) ~[flyway-core-6.4.4.jar:na]
	at org.flywaydb.core.Flyway$1.execute(Flyway.java:159) ~[flyway-core-6.4.4.jar:na]
	at org.flywaydb.core.Flyway.execute(Flyway.java:530) ~[flyway-core-6.4.4.jar:na]
	at org.flywaydb.core.Flyway.migrate(Flyway.java:159) ~[flyway-core-6.4.4.jar:na]
	at br.com.ghnetsoft.comprasfood.crud.service.FlywayService.migrarFlyway(FlywayService.java:36) ~[classes/:na]
	at br.com.ghnetsoft.comprasfood.crud.service.FlywayService.lambda$0(FlywayService.java:30) ~[classes/:na]
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na]
	at br.com.ghnetsoft.comprasfood.crud.service.FlywayService.migrarTodas(FlywayService.java:30) ~[classes/:na]
	at br.com.ghnetsoft.comprasfood.crud.config.IniciaFlyway.run(IniciaFlyway.java:35) ~[classes/:na]
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:795) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
	... 10 common frames omitted
2021-10-29 11:01:04.062  INFO 74552 --- [  restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler     : Stopping...
2021-10-29 11:01:04.062  INFO 74552 --- [  restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler     : BrokerAvailabilityEvent[available=false, SimpleBrokerMessageHandler [DefaultSubscriptionRegistry[cache[0 destination(s)], registry[0 sessions]]]]
2021-10-29 11:01:04.062  INFO 74552 --- [  restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler     : Stopped.
2021-10-29 11:01:04.246  INFO 74552 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'brokerChannelExecutor'
2021-10-29 11:01:04.247  INFO 74552 --- [  restartedMain] o.s.s.c.ThreadPoolTaskScheduler          : Shutting down ExecutorService 'messageBrokerTaskScheduler'
2021-10-29 11:01:04.256  INFO 74552 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'clientOutboundChannelExecutor'
2021-10-29 11:01:04.256  INFO 74552 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'clientInboundChannelExecutor'
2021-10-29 11:01:04.266  INFO 74552 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'

Estava funcionando, mas hoje parou

package br.com.ghnetsoft.comprasfood.crud.service;

import java.io.Serializable;

import org.flywaydb.core.Flyway;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.stereotype.Service;

import br.com.ghnetsoft.comprasfood.crud.client.RedeClient;
import br.com.ghnetsoft.comprasfood.crud.dto.rede.RedeInternoDTO;

@Service
public class FlywayService implements Serializable {

    private static final long serialVersionUID = -3789604790256965238L;
    @Value("${spring.datasource.driverClassName}")
    private String datasourceDriver;
    @Autowired
    private RedeClient cliente;

    public void migrar(final Long id) {
        final RedeInternoDTO rede = cliente.buscarPorId(id);
        migrarFlyway(rede.getUrl(), rede.getNomeBanco(), rede.getUsuarioAcesso(), rede.getSenhaAcesso());
        cliente.instalou(id);
    }

    public void migrarTodas() {
        cliente.buscarTodasAtivas().forEach((final RedeInternoDTO entidade) -> migrarFlyway(entidade.getUrl(), entidade.getNomeBanco(), entidade.getUsuarioAcesso(), entidade.getSenhaAcesso()));
    }

    private void migrarFlyway(final String url, final String nomeBanco, final String usuarioAcesso, final String senhaAcesso) {
        final var factory = DataSourceBuilder.create().url("jdbc:sqlserver://" + url + ";databaseName=" + nomeBanco).username(usuarioAcesso).password(senhaAcesso).driverClassName(datasourceDriver);
        final var ds = factory.build();
        Flyway.configure().dataSource(ds).load().migrate();
    }
}
UPDATE TAB_FUNCIONALIDADE SET CD_ACAO = 'IMPORTAR_FORNECEDOR'
WHERE
   CD_ACAO= 'IMPORTAR'
AND
   CD_TELA= 'FORNECEDOR';

O que pode ser ?

O checksum do ficheiro mudou desde que ele foi aplicado. O ficheiro foi alterado?

1 curtida

Alguém deve ter editado a migration após ela já ter sido executada pelo Flyway, isso altera o checksum do arquivo e faz com que ocorra essa quebra.

1 curtida

É um arquivo novo

Se eu pego o mesmo código e tento fazer o update, da erro.

O banco é SQL SERVER, só funciona se coloco rede_dois.dbo.TAB_FUNCIONALIDADE

É um arquivo novo

Mas ele aparece registrado na tabela de controle do Flyway ainda ou já chegou a remover e executar novamente?

Esse problema de precisar colocar rede_dois.dbo.TAB_FUNCIONALIDADE para funcionar, os scripts anteriores também usam este prefixo ou não?

1 curtida

Nunca utilizamos o prefixo.

VOu olhar na tabela do Flyway

Estava na tabela do Flyway

Grato @Jonathan_Medeiros e @pmlm

2 curtidas