是否可以从 Spring Boot 应用程序压缩嵌入式 HSQL 数据库?

我创建了一个带有嵌入式、基于文件的 HSQL 数据库的 Spring Boot 应用程序。正在创建的数据文件变得相当大,特别是考虑到使用模型,所以我想知道是否有办法压缩它?是手动还是自动?

HSQL 文档表明有一个SHUTDOWN COMPACT命令(根据文档,这可能需要一段时间),但我不知道如何配置 Spring Boot 来使用它。

我愿意SHUTDOWN COMPACT在关闭 Spring Boot 应用程序时强制执行 a(如果这是唯一的选择),或者找到一种方法来发出手动“紧凑”命令(如果 HSQLDB 支持这样的命令),或者人们可能有的任何其他建议.


万千封印
浏览 75回答 2
2回答

30秒到达战场

如前所述,以前的答案是一种选择,但 boly38 的建议更清晰,成为我的首选方法。@PreDestroypublic void preDestroy() {    try {        jdbcTemplate.execute("SHUTDOWN COMPACT");    } catch (DataAccessException e) {        // do nothing    }}这允许应用程序控制何时压缩数据库,并从最终用户手中移除潜在的错误选项。

PIPIONE

不确定这是否是最佳解决方案,但我确实设法找到了解决方案。CHECKPOINT DEFRAG我添加了一个可以在数据库上手动执行命令的 REST API 。在主要的 Spring Boot 应用程序类中,我添加了一个获取JdbcTemplate这样的方法:@Beanpublic JdbcTemplate jdbcTemplate(DataSource dataSource) {    return new JdbcTemplate(dataSource);}然后我决定创建一个新的 REST 控制器(而不是使用现有控制器),以提供一个 API 来手动压缩数据库:@RestController@RequestMapping("/admintools")public class TEVAdminToolsController {    @Autowired    private JdbcTemplate jdbcTemplate;    @GetMapping("/compressDB")    public Boolean compressDB() {        try {            jdbcTemplate.execute("CHECKPOINT DEFRAG");        } catch (DataAccessException e) {            return false;        }        return true;    }}从安全角度来看,这不是很好;对于我的用例,这不是一个问题,但对于其他人来说,它可能是一个非启动器。这其中的两个要点:对于@Bean得到一个JdbcTemplatejdbcTemplate.execute()执行“原始”SQL 命令的调用
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java