Spring JPA 如何确保数据写入持久存储

Spring JPA how to make sure that data gets written into persistent storage

我正在尝试扩展此示例:https://github.com/scratches/jpa-method-security-sample 通过在控制器中向 "signup" 添加一个方法,将新用户动态添加到存储库中。在 import.sql 脚本中添加了默认的现有用户集。但是,我看到我动态添加的用户在服务器重新启动时被清除了。你能告诉我确保 table 持续更新的方法吗?

这是我的注册方法代码:

@RequestMapping(value = "signup",method =  RequestMethod.GET)
    public String signup(Map<String, Object> model) {
        model.put("message","Sign up!");
        model.put("title", "Hello Signup");
        model.put("date", new Date());
        users.createUser();
        return "signup";
    }

 public void createUser() {
    User u = new User();
    u.setName("xxx");
    u.setPassword("spring");
    repo.save(u);
}

我也已将 loadUserByUserName 更改为 return 新用户的正确权限。这适用于一个服务器会话,我可以用新用户登录。但是,在服务器重新启动时,需要重新添加用户。我想阻止这种情况。

我觉得我需要做一些更精细的事情,比如配置持久数据源。如果是这种情况,能否请您指出一些使用 java 配置来执行此操作的资源。我才刚刚开始spring,这可能是一个基本问题,在我阅读的所有内容中,我不确定接下来要做什么。

由于您使用的是嵌入式内存中的 H2 数据库,数据不会在重启后保留。您应该远离嵌入式数据库,并且由于该应用程序基于 spring-boot,您可以轻松地重新配置它并使用例如mysql,通过向 pom 添加 mysql 依赖项。

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

application.properties 中的适当数据库属性,例如

spring.datasource.url=jdbc:mysql://localhost/[YOUR DB]
spring.datasource.username=[YOUR USERNAME]
spring.datasource.password=[YOUR PASSWORD]
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

要记住的另一件事是,某些默认值特定于嵌入式数据库,例如 H2 数据库。例如,ddl-auto property is set to create-drop.

这意味着数据库模式将在创建 SessionFactory 时创建并在关闭时删除。

此 属性 的值,例如MySql 默认设置为 none,这意味着您最初必须 运行 您的应用程序覆盖 属性(将其设置在 application.properties)

spring.jpa.hibernate.ddl-auto: create

这将最初从 import.sql 创建数据。第一次启动后,将 属性 更改为 update,您的数据将在重启后持续存在