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 命令的調用
添加回答
舉報