Este artículo presenta el uso de Flyway para Springboot para habilitar la migración de la base de datos. Se comparte contigo. Los detalles son los siguientes:
Primero, permítanme entender primero cómo funciona Flyway.
La solución más fácil es apuntar a Flyway a una base de datos vacía.
Intentará encontrar su tabla de metadatos. Cuando la base de datos está vacía, Flyway no la encontrará, sino que la cree. Ahora tiene una base de datos con una sola tabla vacía llamada Schema_Version:
Esta tabla se utilizará para rastrear el estado de la base de datos. Después de eso, Flyway comenzará a escanear el sistema de archivos de la aplicación o classpath para la migración. Se pueden escribir en SQL o Java.
Luego ordene las migraciones por su número de versión y aplique en orden:
A medida que se aplica cada migración, la tabla de metadatos se actualizará en consecuencia:
esquema_versión
Con los metadatos y el estado inicial en su lugar, ahora podemos hablar sobre la migración a versiones más nuevas.
Flyway escaneará el sistema de archivos de la aplicación o classpath nuevamente para la migración. Verifique las migraciones contra las tablas de metadatos. Si los números de versión son más bajos o iguales al número de versión marcado como la versión actual, se ignoran.
Las migraciones restantes están pendientes migraciones: disponibles pero no aplicadas.
Luego, ordenan por número de versión y ejecutan a su vez:
Esta tabla de metadatos se actualiza, así que:
esquema_versión
¡Eso es todo! Siempre que necesite desarrollar una base de datos, ya sea estructura (DDL) o datos de referencia (DML), simplemente cree una nueva migración con un número de versión más alto que la versión actual. La próxima vez que comience Flyway, descubre y actualiza la base de datos en consecuencia.
2. El uso de Flyway en Springboot
Una forma es establecer la propiedad hibernate.hbm2ddl.auto para crear, crear-drop o actualizar a través de la propiedad Spring Boot Spring.jpa.hibernate.ddl-Auto. Por ejemplo, para configurar hibernate.hbm2ddl.auto para crear-drop, podemos agregar el siguiente contenido en Application.yml:
Primavera: JPA: Hibernate: DDL-AUTO: CREAR-DROP
Sin embargo, esto no es ideal para entornos de producción, porque cada vez que la aplicación reinicia la base de datos, el esquema se vaciará y reconstruirá desde cero. Se puede configurar para actualizarse, pero aun así, no recomendamos usarlo para entornos de producción.
Hay otra forma. Podemos definir el esquema en el esquema.sql. En la primera ejecución, no hay problemas para hacerlo, pero cada vez que se inicia la aplicación, este script de inicialización falla porque la tabla de datos ya existe. Esto requiere un cuidado adicional al escribir scripts de inicialización y no repetir el trabajo que se ha realizado.
Una mejor opción es usar la biblioteca de migración de la base de datos. Utiliza una serie de scripts y registros de bases de datos que se han utilizado y no usan el mismo script varias veces. Cada paquete de implementación de una aplicación contiene estos scripts, y la base de datos puede ser consistente con la aplicación. Spring Boot proporciona soporte de configuración automática para dos bibliotecas de migración de bases de datos populares.
Cuando desee usar una de estas bibliotecas en Spring Boot, solo necesita agregar las dependencias correspondientes al proyecto y escribir un script. Comencemos con Flyway.
1. Use Flyway para definir el proceso de migración de la base de datos
Flyway es una biblioteca de migración de base de datos de código abierto muy simple que utiliza SQL para definir los scripts de migración. La idea es que cada script tiene un número de versión, y Flyway ejecutará estos scripts en secuencia para llevar la base de datos al estado deseado. También registra el estado de script ejecutado y no se repetirá. Aquí en la aplicación de la lista de lectura, comenzamos con una base de datos vacía sin tablas de datos y datos. Por lo tanto, este script necesita crear primero las tablas de lector y libros, incluidas las restricciones de clave extranjera y los datos de inicialización. El listado 8-2 del código es un script de Flyway desde una base de datos vacía a un estado disponible.
Script inicial de la base de datos de Flyway
Cree Tabla Reader (ID Serial Key primario, nombre de usuario Varchar (25) No NULL, no nulo, contraseña Varchar (25) No NULL, FullName Varchar (50) No NULL); Crear libro de tabla (ID Serial Primary Clave, Autor Varchar (50) No NULL, Descripción Varchar (1000) No NULL, ISBN Varchar (10) No NULL, Title Varchar (250) No NULL, Reader_Username Varchar (25) No NULL, Foreign Key (Reader_Username) References Reader (UserName)); cree secuencia hibernate_sequence; inserte en valores de lector (nombre de usuario, contraseña, nombre completo) ('craig', 'contraseña', 'craig walls'); Como puede ver, el guión de Flyway es SQL. Lo que lo hace funcionar es su ubicación y nombre de archivo en ClassPath. Los scripts de Flyway siguen una especificación de nombres, que contiene números de versión, como se muestra en la Figura 8-1.
Todos los guiones de Flyway tienen nombres que comienzan con la letra mayúscula V, seguido del número de versión del script. Seguido de dos subrayos y una descripción del script. Dado que este es el primer script en todo el proceso de migración, su versión es 1. La descripción puede ser muy flexible y se usa principalmente para ayudar a comprender el propósito del script. Más tarde, debemos agregar una nueva tabla a la base de datos, o agregar un nuevo campo a la tabla de datos existente. Puede crear otro script con la versión número 2. El script Flyway debe colocarse en la ruta /db /migración en relación con la ruta de la clase de la aplicación. Por lo tanto, en el proyecto, el script debe colocarse en src/main/recursos/db/migración. También debe establecer spring.jpa.Hibernate.ddl-Auto a ninguno, para que Hibernate no cree tablas de datos. Esto está relacionado con el siguiente contenido en Application.yml:
Primavera: JPA: Hibernate: DDL-Auto: Ninguno
Todo lo que queda es agregar Flyway como dependencia del proyecto. En Gradle, esta dependencia se ve así:
compilar ("org.flywaydb: flyway-core")En el proyecto Maven, se ve así:
<Spendency> <ProupId> org.flywayfb </groupid> <artifactid> flyway-core </artifactid> </dependencia>
Después de implementar y ejecutar la aplicación, Spring Boot detectará el Flyway en el ClassPath y configurará automáticamente los frijoles requeridos. Flyway verá los scripts en /db /migración a su vez, y ejecutará estos scripts si no se han ejecutado. Después de ejecutar cada script, escriba un registro en la tabla Schema_Version. La próxima vez que se inicie la aplicación, Flyway primero buscará los registros en Schema_Version y omitirá esos scripts.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.