我已经创建了一个带有嵌入式,基于文件的HSQL数据库的Spring Boot应用程序。正在创建的数据文件越来越大,尤其是在给定使用模型的情况下,所以我想知道是否存在一种可以压缩它的方法?手动还是自动?
HSQL文档指示存在一个SHUTDOWN COMPACT
命令(根据文档,这可能会花费一些时间),但是我不知道如何配置Spring Boot以使用它。
在关闭Spring Boot应用程序(如果这是唯一的选择)或寻找一种发出手动“紧凑”命令(如果HSQLDB支持这样的命令)的方法时,我愿意强制使用SHUTDOWN COMPACT
,或者其他人可能有的其他建议。
答案 0 :(得分:0)
不确定这是否是最佳解决方案,但我确实设法找到了 a 解决方案。我添加了一个REST API,可以在数据库上手动执行CHECKPOINT DEFRAG
命令。
在主要的Spring Boot应用程序类中,我添加了一种获取JdbcTemplate
的方法,如下所示:
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
然后我决定创建一个新的REST控制器(而不是使用现有的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
的{{1}} JdbcTemplate
以执行“原始” SQL命令答案 1 :(得分:0)
如前所述,以前的答案是一个选择,但boly38的建议更清晰,并且成为我的首选方法。
@PreDestroy
public void preDestroy() {
try {
jdbcTemplate.execute("SHUTDOWN COMPACT");
} catch (DataAccessException e) {
// do nothing
}
}
这允许应用程序控制何时压缩数据库,并从最终用户的手中删除潜在的错误选择。