不确定这是否是最佳解决方案,但我确实设法找到了解决方案。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 命令的调用