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