versiones tutorial datos curso control java jdbc liquibase flyway

java - datos - liquibase tutorial



Cambio de código de Java en liquibase (2)

Un ejemplo completo se verá así

Cree una clase que implemente CustomTaskChange o CustomSqlChange.

package com.example; import liquibase.change.custom.CustomTaskChange; import liquibase.database.Database; import liquibase.database.jvm.JdbcConnection; import liquibase.exception.CustomChangeException; import liquibase.exception.SetupException; import liquibase.exception.ValidationErrors; import liquibase.logging.LogFactory; import liquibase.resource.ResourceAccessor; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.sql.PreparedStatement; import java.sql.ResultSet; public class DataLoaderTask implements CustomTaskChange { //to hold the parameter value private String file; private ResourceAccessor resourceAccessor; public String getFile() { return file; } public void setFile(String file) { this.file = file; } @Override public void execute(Database database) throws CustomChangeException { JdbcConnection databaseConnection = (JdbcConnection) database.getConnection(); try { //Opening my data file BufferedReader in = new BufferedReader( new InputStreamReader(resourceAccessor.getResourceAsStream(file))); //Ignore header String str = in.readLine(); while ((str = in.readLine()) != null && !str.trim().equals("")) { LogFactory.getLogger().info("Processing line "+ str); //Do whatever is necessary } in.close(); } catch (Exception e) { throw new CustomChangeException(e); } } @Override public String getConfirmationMessage() { return null; } @Override public void setUp() throws SetupException { } @Override public void setFileOpener(ResourceAccessor resourceAccessor) { this.resourceAccessor = resourceAccessor; } @Override public ValidationErrors validate(Database database) { return null; } }

En el conjunto de cambios xml puede usar la clase como se muestra a continuación

<changeSet id="1" author="murali" runAlways="false" failOnError="true" > <customChange class="com.example.DataLoaderTask"> <param name="file" value="/com/example/data/user.csv" /> </customChange> </changeSet>

Para mí, el archivo de datos está en src / main / resources / com / example / data directory

Espero que esto ayude

¿Hay alguna forma en liquibase de crear un conjunto de cambios de código java (es decir, proporcionar una clase java, que recibirá una conexión JDBC y realizará algunos cambios en la base de datos)?

(Sé que la ruta migratoria tiene esa característica)


Sí, hay tal característica. Puede crear un customChange :

<customChange class="my.java.Class"> <param name="id" value="2" /> </customChange>

La clase debe implementar la interfaz liquibase.change.custom.CustomTaskChange .

@Override public void execute(final Database arg0) throws CustomChangeException { JdbcConnection dbConn = (JdbcConnection) arg0.getConnection(); try { ... do funny stuff ... } catch (Exception e) { // swallow the exception ! } }