如何在重新加载服务器后不丢失数据



Devs!为了通过测试,我应该得到一些代码片段,并通过RESTful API请求返回它们。我已经完成了测试的第一部分,并将所有代码片段发送到H2数据库。在测试我的程序的第二部分中,他们通过以下命令重新加载服务器::reloadServer。如何从数据库中取回数据以成功响应RESTful请求并通过测试?

我的控制器:

@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

堆垛机

我应该如何修改我的控制器来做到这一点?

默认情况下,H2 DB数据是不稳定的,因此数据在重新启动后会丢失。您可以将H2更改为使用基于文件的存储。您不需要更改控制器,但在中您可以在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" />

如果是,请将其移除。

最新更新