Не уверен, что это лучшее решение, но мне удалось найти решение. Я добавил REST API, который может вручную выполнить команду CHECKPOINT DEFRAG
в базе данных.
В основной класс приложения 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