情况如下:
此过程的两个已知步骤是:
问题:
这是一个普遍的Spring问题 - 当你需要改变生产中存在的结构并操纵旧数据以适应新格式时,你如何处理这种情况呢?
例如在PHP中,我使用与应用程序集成的终端脚本并在应用程序环境中运行(在Laravel中使用" artisan"命令);我可以轻松地创建一个正确的操作顺序:获取旧数据并记住它,更改数据库结构,操纵旧数据,并将数据插入新结构 - 它只需一个脚本和一个事务。我不知道如何在春天这样做。
答案 0 :(得分:1)
我找到了答案 - 基于Flyway Java的迁移:https://flywaydb.org/documentation/migrations#java-based-migrations
基于Java的迁移非常适合所有使用SQL无法轻松表达的更改。这些通常是像BLOB& CLOB更改,高级批量数据更改(重新计算,高级格式更改,...)
看起来像这样:
package db.migration;
import org.flywaydb.core.api.migration.spring.SpringJdbcMigration;
import org.springframework.jdbc.core.JdbcTemplate;
/**
* Example of a Spring Jdbc migration.
*/
public class V1_2__Another_user implements SpringJdbcMigration {
public void migrate(JdbcTemplate jdbcTemplate) throws Exception {
jdbcTemplate.execute("INSERT INTO test_user (name) VALUES ('Obelix')");
}
}
数据库操作可以在这里与Java代码和数据操作交错。
我怀疑Liquibase具有类似的功能。