如何在运行Spring Boot应用程序中重新加载初始数据?

squire380:

spring-boot-starter-data-jdbc在Web应用程序中使用依赖项。Spring Boot可以自动创建模式并从根类路径位置schema.sql以及data.sql在应用程序启动时对其进行初始化,但是我很好奇在应用程序启动之后,有什么方法可以使用非常相同的sql脚本来重新初始化数据库吗?

我需要在演示模式下使用此功能,以便用户在玩完表后可以将数据库重置为初始状态。这就是我希望我的复位控制器看起来像的样子:

@Controller
@RequestMapping("/reset")
@Profile("demo")
public class ResetController {

    @GetMapping
    public String resetTables(SessionStatus sessionStatus) {
        // some code re-initializing the database 
        // form schema.sql and data.sql goes here
        sessionStatus.setComplete();
        return "redirect:/home";
    }
}

我知道,我总是可以使用JdbcTemplate及其方法,按照schema.sql和中定义的sql语句的逻辑手动删除,创建和重新填充每个表data.sql,但这会有些乏味。也许,Spring有一些现成的方法可以对数据库执行这些脚本,这将有助于用初始演示数据重新加载表?

更新:

这是基于Flyway迁移的可能解决方案之一,正如Charles B在公认的答案中所建议的

  1. flyway-core向项目添加依赖项。
  2. 重命名schema.sqldata.sqlV1__schema.sqlV2__data.sql下面的迁徙路线命名要求,把他们在/resources/db/migration目录中。
  3. 然后,可以如上所述简单地重写上述复位控制器:
@Controller
@RequestMapping("/reset")
@Profile("demo")
public class ResetController {

    private final Flyway flyway;

    public ResetController(Flyway flyway) {
        this.flyway = flyway;
    }

    @GetMapping
    public String resetTables(SessionStatus sessionStatus) {
        flyway.clean();
        flyway.migrate();
        sessionStatus.setComplete();
        return "redirect:/home";
    }
    
}

此外,对于不同的迁移方案,可以spring.flyway.locations为每个配置文件分别设置引用不同SQL文件的属性,甚至可以通过将spring.flyway.enabled属性设置为来禁用某些配置文件的Flyway迁移false

查尔斯·B:

如果迁移到像迁徙路线,你可以建立一个控制器一样引用调用飞行用的清洁方法在这里易于迁移和长期维护。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Spring Boot应用程序中使用Flyway时,如何在H2中加载初始数据?

如何在运行集成测试之前启动spring-boot应用程序

如何在intellij中运行spring boot应用程序?

使用Spring-Security时在Docker中自动重新加载Spring Boot应用程序

无法加载在Docker中运行的Spring Boot应用程序

如何在JavaFX中重新加载应用程序?

角度| 在解决应用程序之前如何初始加载数据?

如何在运行时在Spring Boot上运行CUSTOM DDL DML ...

Spring Boot-如何在运行时获取端口而不使用spring注释

Spring Boot应用程序中的即时数据库重新配置

从数据库加载Spring Boot应用程序属性

如何在运行时在启用Spring的Web应用中安排新方法?

在Spring Boot应用程序中从数据库加载Cron语法

如何在运行时在spring-SAML中添加新的idp元数据

检查Spring Boot应用程序是否正在运行

如何在运行时在Spring Boot和Data中进行动态查询?

Spring Boot:如何在运行时获取tomcat端口?

如何在运行时更新数据存储在主应用程序类中的变量中的 kivy 标签颜色

如何在独立 Tomcat 中运行的 Spring Boot 应用程序中设置 cookie 名称?

如何在Spring应用程序中运行JFrame?

如何在 Heroku 中运行 Spring Boot WAR 应用程序?

如何在Spring Boot / PostgreSQL应用程序中检查长期运行的查询?

如何在运行时重新加载所需的模块?

如何在运行时重新加载AWS选项

如何在VSCode中运行Spring Boot Maven项目以及如何配置Spring Boot Web应用程序的基本URL

如何在Android 5.0(L)中获取正在运行的应用程序活动名称?

如何在iOS中获取正在运行的应用程序的名称

如何在Android中以编程方式找到当前正在运行的应用程序?

如何在正在运行的Gtk3应用程序中修改字体大小?