亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以從 Spring Boot 應用程序壓縮嵌入式 HSQL 數據庫?

是否可以從 Spring Boot 應用程序壓縮嵌入式 HSQL 數據庫?

萬千封印 2023-01-05 16:55:11
我創建了一個帶有嵌入式、基于文件的 HSQL 數據庫的 Spring Boot 應用程序。正在創建的數據文件變得相當大,特別是考慮到使用模型,所以我想知道是否有辦法壓縮它?是手動還是自動?HSQL 文檔表明有一個SHUTDOWN COMPACT命令(根據文檔,這可能需要一段時間),但我不知道如何配置 Spring Boot 來使用它。我愿意SHUTDOWN COMPACT在關閉 Spring Boot 應用程序時強制執行 a(如果這是唯一的選擇),或者找到一種方法來發出手動“緊湊”命令(如果 HSQLDB 支持這樣的命令),或者人們可能有的任何其他建議.
查看完整描述

2 回答

?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

如前所述,以前的答案是一種選擇,但 boly38 的建議更清晰,成為我的首選方法。


@PreDestroy

public void preDestroy() {

    try {

        jdbcTemplate.execute("SHUTDOWN COMPACT");

    } catch (DataAccessException e) {

        // do nothing

    }

}

這允許應用程序控制何時壓縮數據庫,并從最終用戶手中移除潛在的錯誤選項。


查看完整回答
反對 回復 2023-01-05
?
PIPIONE

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;

    }

}

從安全角度來看,這不是很好;對于我的用例,這不是一個問題,但對于其他人來說,它可能是一個非啟動器。

這其中的兩個要點:

  1. 對于@Bean得到一個JdbcTemplate

  2. jdbcTemplate.execute()執行“原始”SQL 命令的調用


查看完整回答
反對 回復 2023-01-05
  • 2 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號