Giriş
Şu satırı dahil ederiz
import org.flywaydb.core.api.callback.Callback; import org.flywaydb.core.api.callback.Context; import org.flywaydb.core.api.callback.Event;
Flyway Callbacks kullanım senaryosu şöyle
Rebuilding materialized views – we might want to rebuild materialized views whenever we apply migrations affecting the base tables of those views. SQL callbacks are a good fit for executing this type of logicFlushing a cache – perhaps we have a migration that modifies data that happens to be cached. We can use callbacks to flush caches making sure that our application pulls fresh data from the databaseCalling an external system – using callbacks, we can call out to an external system using an arbitrary technology. For example, we might want to publish an event, send an email, or trigger a server restart
Örnek - AFTER_MIGRATE
Şöyle yaparız
@Component public class CsvUpsertCallback implements Callback { @Autowired private ResourceLoader resourceLoader; @Override public String getCallbackName() { return "csv_upsert_callback";} @Override public boolean supports(Event event, Context context) { return event == Event.AFTER_MIGRATE; } @Override public boolean canHandleInTransaction(Event event, Context context) {return true;} @Override public void handle(Event event, Context context) { Connection connection = context.getConnection(); try { // Get the path to the CSV directory PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(resourceLoader); Resource[] resources = resolver.getResources("classpath:csv/*"); List<File> files = new ArrayList<>(); for (Resource resource : resources) { File file = resource.getFile(); if (file.getName().toLowerCase().endsWith(".csv")){ files.add(file); } } for (File csvFile : files) { processCsvFile(csvFile, connection); } } catch (IOException | SQLException e) { throw new SQLException("Error processing CSV files", e); } } }
Şöyle yaparız
private void processCsvFile(File csvFile, Connection connection) throws IOException, SQLException { String tableName = "my_table"; try (BufferedReader reader = new BufferedReader(new FileReader(csvFile))) { String line; while ((line = reader.readLine()) != null) { // Split the line into columns String[] columns = line.split(","); // Perform UPSERT operation String sql = "INSERT INTO " + tableName + " (id, name, email) " + "VALUES (?, ?, ?) " + "ON CONFLICT (id) " + "DO UPDATE SET name = EXCLUDED.name, email = EXCLUDED.email"; try (PreparedStatement statement = connection.prepareStatement(sql)) { statement.setInt(1, Integer.parseInt(columns[0])); statement.setString(2, columns[1]); statement.setString(3, columns[2]); statement.executeUpdate(); } } } }
Hiç yorum yok:
Yorum Gönder