2 回答
TA贡献1828条经验 获得超6个赞
如前所述,以前的答案是一种选择,但 boly38 的建议更清晰,成为我的首选方法。
@PreDestroy
public void preDestroy() {
try {
jdbcTemplate.execute("SHUTDOWN COMPACT");
} catch (DataAccessException e) {
// do nothing
}
}
这允许应用程序控制何时压缩数据库,并从最终用户手中移除潜在的错误选项。
TA贡献1829条经验 获得超9个赞
不确定这是否是最佳解决方案,但我确实设法找到了解决方案。CHECKPOINT DEFRAG我添加了一个可以在数据库上手动执行命令的 REST API 。
在主要的 Spring Boot 应用程序类中,我添加了一个获取JdbcTemplate这样的方法:
@Bean
public 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
得到一个JdbcTemplate
jdbcTemplate.execute()
执行“原始”SQL 命令的调用
添加回答
举报