繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM