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,您的数据将在重启后持续存在
我正在尝试扩展此示例: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,您的数据将在重启后持续存在