Java項目啟動時動態(tài)配置實體類注解參數(shù)
在Java開發(fā)中,尤其使用Easypoi的@excel注解處理Excel導入導出圖片時,經(jīng)常需要根據(jù)不同環(huán)境(本地開發(fā)、測試環(huán)境、生產(chǎn)環(huán)境)動態(tài)配置savePath參數(shù)。本文介紹一種在項目啟動時動態(tài)修改Easypoi @Excel注解savePath參數(shù)的方法,避免手動修改代碼。
問題:靜態(tài)配置savePath的局限性
直接在@Excel注解中硬編碼savePath,例如:@Excel(savePath = “D:upload”),這種靜態(tài)配置方式在不同環(huán)境下需要修改代碼,部署繁瑣且易出錯。
解決方案:動態(tài)獲取并設(shè)置savePath
我們可以通過在項目啟動時,讀取系統(tǒng)環(huán)境變量或配置文件,動態(tài)獲取savePath,然后在Easypoi導入導出之前設(shè)置到ImportParams對象中。
以下是一個示例代碼,演示如何動態(tài)設(shè)置savePath:
立即學習“Java免費學習筆記(深入)”;
import org.apache.poi.ss.usermodel.Workbook; import org.jeecg.common.util.oConvertUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; @Service public class EasypoiService { @Value("${easypoi.savePath}") private String savePath; public void exportExcel(List<?> list, Class<?> pojoClass, String fileName) throws Exception { ExportParams exportParams = new ExportParams("標題", "子標題"); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list); File savefile = new File(savePath + fileName + ".xls"); FileOutputStream fos = new FileOutputStream(savefile); workbook.write(fos); fos.close(); } public List<?> importExcel(Class<?> pojoClass, String filePath) throws Exception { ImportParams importParams = new ImportParams(); importParams.setSaveUrl(savePath); // 動態(tài)設(shè)置savePath return ExcelImportUtil.importExcel(new File(filePath), pojoClass, importParams); } }
代碼說明:
- 使用@Value(“${easypoi.savePath}”)注解從配置文件(例如application.yml或application.properties)中讀取easypoi.savePath屬性,將其賦值給savePath變量。
- 在exportExcel和importExcel方法中,將savePath變量用于設(shè)置ExportParams和ImportParams對象的路徑參數(shù)。
配置文件示例 (application.yml):
通過這種方式,只需修改配置文件即可改變savePath,無需重新編譯代碼,方便在不同環(huán)境中部署。 記得根據(jù)你的實際項目結(jié)構(gòu)和環(huán)境調(diào)整路徑。 如果使用其他配置方式,例如環(huán)境變量,則需要相應(yīng)修改代碼以讀取環(huán)境變量的值。
這種方法比直接在代碼中硬編碼路徑更靈活,更易于維護。 它利用了spring框架的依賴注入功能,將配置與代碼解耦,提高了代碼的可維護性和可重用性。 同時,也避免了直接使用絕對路徑帶來的潛在問題。