我试图通过在控制器中添加一个方法来扩展这个例子: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配置执行此操作的资源。我刚刚开始春天,这可能是一个基本问题,也是我读过的所有内容,我不知道该怎么做。
答案 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 ,您的数据将在重新启动后保留