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

时间:2015-01-17 20:00:20

标签: spring spring-data-jpa

我试图通过在控制器中添加一个方法来扩展这个例子:https://github.com/scratches/jpa-method-security-sample"注册"将新用户动态添加到repo的位置。 import.sql脚本中添加了一组默认的现有用户。但是,我看到我的动态添加用户在服务器重启时被清除。你能否指出我确保表持续更新的方法。

以下是我的注册方法代码:

@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进行了更改,以便为新用户返回正确的权限。这适用于一个服务器会话,我可以使用新用户登录。但是,在服务器重新启动时,需要重新添加用户。我想阻止这一点。

我有一种感觉,我需要做一些更精细的事情,比如配置持久数据源。如果是这种情况,请你指点一些使用java配置执行此操作的资源。我刚刚开始春天,这可能是一个基本问题,也是我读过的所有内容,我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

由于您使用嵌入式内存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 DB。例如,ddl-auto property is set to create-drop

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

此属性的值,例如默认情况下,MySql设置为 none ,这意味着您必须首先运行覆盖该属性的应用程序(在 application.properties 中设置它)

spring.jpa.hibernate.ddl-auto: create

这将首先从 import.sql 创建数据。首次启动后,将属性更改为 update ,您的数据将在重新启动后保留