[英]How to not lose data after reloading the server?
开发者。 为了通过测试,我应该得到一些代码片段并通过 RESTful API 请求返回它们。 我已经完成了测试的第一部分并将所有代码片段发送到 H2 数据库,在测试我的程序的第二部分中:他们正在通过命令重新加载服务器 this:.reloadServer? 如何从数据库中取回数据以成功响应 RESTful 请求并通过测试?
我的 controller:
@Controller
public class SnippetController {
@Autowired
SnippetService snippetService;
@Autowired
Repository repository;
public SnippetController(SnippetService snippetService) {
this.snippetService = snippetService;
}
@GetMapping(value = "/api/code/{id}")
@ResponseBody
public Snippet getSnippet(@PathVariable int id) {
return snippetService.getSnippet(id);
}
@GetMapping(value = "/code/{id}")
public String showSnippet(@PathVariable int id, Model model) {
model.addAttribute("snippet", snippetService.getSnippet(id));
return "code";
}
@GetMapping(value = "/api/code/latest")
@ResponseBody
public List<Snippet> getLatestSnippets() {
return snippetService.getLatestSnippets();
}
@GetMapping(value = "/code/latest")
public ModelAndView showLatestSnippets(Model model) {
List<Snippet> sortedList = getLatestSnippets();
ModelAndView mv = new ModelAndView("latest");
mv.addObject("latestSnippets", sortedList);
return mv;
}
@PostMapping(value = "/api/code/new")
@ResponseBody
public Map<String, String> addSnippet(@RequestBody Snippet snippet) {
int id = snippetService.addSnippet(snippet);
repository.save(snippet);
return Map.of("id", String.valueOf(id));
}
@GetMapping(value = "/code/new")
public String showSnippetAddingForm() {
return "create";
}
}
应用程序属性
server.port=8888
management.endpoints.web.exposure.include=*
management.endpoint.shutdown.enabled=true
spring.datasource.url=jdbc:h2:file:../snippetsOfCode
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.h2.console.enabled=true
spring.h2.console.settings.trace=false
spring.h2.console.settings.web-allow-others=false
我应该如何修改我的 controller 来做到这一点?
嗯,默认情况下H2 DB数据是易失的,所以重启后数据会丢失。 您可以做的是将 H2 更改为使用基于文件的存储。 您不需要更改 controller,但您可以在 Spring 配置文件中完成:
spring.datasource.url=jdbc:h2:file:/data/demo
或(如果使用.yml):
spring:
datasource:
url: jdbc:h2:file:/data/demo
如果这不起作用,则可能是在重新启动后重新创建了您的数据库。 您还可以将其添加到您的 application.properties:
spring.jpa.hibernate.ddl-auto=update
还要检查您的 persistence.xml 中是否有以下行:
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
如果是这样,请将其删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.