management enabled actuator java spring hibernate spring-boot flyway

java - enabled - spring boot actuator metrics



IntegraciĆ³n de Flyway y Spring Boot (1)

Intento integrar Flyway para migraciones en un proyecto Spring Boot con Hibernate y Spring JPA. Recibo la siguiente excepción:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''flyway'' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Found non-empty schema "PUBLIC" without metadata table! Use init() or set initOnMigrate to true to initialize the metadata table.

Mi pom.xml se ve así:

<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>3.2</version> </dependency>

Estoy usando Hibernate y un archivo config java para postgres (etapa dev) y h2 (local). Las firmas se ven así:

@Bean(initMethod = "migrate") public Flyway flyway() { Flyway fly = new Flyway(); fly.clean(); fly.init(); //flyway.setInitOnMigrate(true); fly.setSchemas("SBA_DIALOG"); //flyway.setLocations("filesystem:src/main/resources/db/migration"); fly.setDataSource(this.dataSource()); fly.migrate(); return fly; } @Bean(name = "sbaEntityManagerFactory") @DependsOn("flyway") public LocalContainerEntityManagerFactoryBean entityManagerFactory() { ...

No puedo encontrar nada sobre mi problema descrito en esta pregunta. ¿Alguien puede ayudar?


Spring-Boot es capaz por sí mismo de hacer esto. Simplemente agregue la ruta de vuelo como dependencia de su proyecto y la bota de resorte la recogerá. La migración de la ruta migratoria comenzará cuando se inicie el servicio.

Si ya tiene algunas tablas en la base de datos, agregue:

flyway.baseline-on-migrate=true

en su archivo de propiedad para mantener la calma de la ruta de vuelo cuando descubre que ya existen algunas tablas. ;-)

Flyway debe recoger su fuente de datos. Si necesita, por ejemplo, otro usuario o algo así para flyway, puede establecer estas propiedades:

flyway.url: jdbc:postgresql://${db.host}/${db.name} flyway.user: MYUSER flyway.password: MYPWD

(¡Por supuesto, agregue sus valores! Puede usar SPEL para hacer referencia a otras propiedades)

Actualizar

Una palabra de advertencia: si usa una base de datos en clúster, puede tener problemas para que varias instancias que se inician al mismo tiempo intenten realizar las actualizaciones al mismo tiempo. Este es un problema cuando los bloqueos de tabla no funcionan, lo que me sucedió usando un mariaDB agrupado.