在Spring Boot中從類路徑載入檔案解決方案
導讀 | 建立Spring Boot Web應用程式時,有時有時需要從類路徑中載入檔案;war和jar的載入檔案格式是不一樣的,在下面,您將找到在WAR和JAR中載入檔案的解決方案。 |
資源載入器
使用Java,您可以使用當前執行緒的classLoader並嘗試載入檔案,但是Spring Framework為您提供了更為優雅的解決方案,例如ResourceLoader。
您只需要自動連線ResourceLoader,然後呼叫getResource(„somePath“)方法即可。
在Spring Boot(WAR)中從資源目錄/類路徑載入檔案的示例
在以下示例中,我們從類路徑中載入名為GeoLite2-Country.mmdb的檔案作為資源,然後將其作為File物件檢索。
@Service("geolocationservice") public class GeoLocationServiceImpl implements GeoLocationService { private static final Logger LOGGER = LoggerFactory.getLogger(GeoLocationServiceImpl.class); private static DatabaseReader reader = null; private ResourceLoader resourceLoader; @Autowired public GeoLocationServiceImpl(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } @PostConstruct public void init() { try { LOGGER.info("GeoLocationServiceImpl: Trying to load GeoLite2-Country database..."); Resource resource = resourceLoader.getResource("classpath:GeoLite2-Country.mmdb"); File dbAsFile = resource.getFile(); // Initialize the reader reader = new DatabaseReader .Builder(dbAsFile) .fileMode(Reader.FileMode.MEMORY) .build(); LOGGER.info("GeoLocationServiceImpl: Database was loaded successfully."); } catch (IOException | NullPointerException e) { LOGGER.error("Database reader cound not be initialized. ", e); } } @PreDestroy public void preDestroy() { if (reader != null) { try { reader.close(); } catch (IOException e) { LOGGER.error("Failed to close the reader."); } } } }
在Spring Boot(JAR)中從資源目錄/類路徑載入檔案的示例
如果您想從Spring Boot JAR中的 classpath載入檔案,則必須使用該resource.getInputStream()方法將其作為InputStream檢索。如果嘗試使用resource.getFile()該方法,則會收到錯誤訊息,因為Spring嘗試訪問檔案系統路徑,但無法訪問JAR中的路徑。
@Service("geolocationservice") public class GeoLocationServiceImpl implements GeoLocationService { private static final Logger LOGGER = LoggerFactory.getLogger(GeoLocationServiceImpl.class); private static DatabaseReader reader = null; private ResourceLoader resourceLoader; @Inject public GeoLocationServiceImpl(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } @PostConstruct public void init() { try { LOGGER.info("GeoLocationServiceImpl: Trying to load GeoLite2-Country database..."); Resource resource = resourceLoader.getResource("classpath:GeoLite2-Country.mmdb"); InputStream dbAsStream = resource.getInputStream(); // <-- this is the difference // Initialize the reader reader = new DatabaseReader .Builder(dbAsStream) .fileMode(Reader.FileMode.MEMORY) .build(); LOGGER.info("GeoLocationServiceImpl: Database was loaded successfully."); } catch (IOException | NullPointerException e) { LOGGER.error("Database reader cound not be initialized. ", e); } } @PreDestroy public void preDestroy() { if (reader != null) { try { reader.close(); } catch (IOException e) { LOGGER.error("Failed to close the reader."); } } } }
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2730789/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring Boot @PropertySource 載入指定配置檔案、@ImportResource 匯入Spring 配置檔案Spring BootImport
- QT 檔案相對路徑載入QT
- XML檔案中url路徑中&失效解決辦法XML
- 載入常量-從檔案中載入
- 在Spring Boot程式中上傳和下載檔案Spring Boot
- 在cmd中開啟指定檔案路徑
- Spring boot + Vue axios 檔案下載Spring BootVueiOS
- 在spring boot專案(maven)中引入其他 spring boot專案Spring BootMaven
- Spring boot 獲取yml檔案工具類Spring Boot
- Spring Boot 檔案上傳與下載Spring Boot
- 前端JS 下載大檔案解決方案前端JS
- macos_macpath系統路徑檔案載入順序_201216Mac
- import匯入檔案路徑注意點Import
- Spring Boot入門(一):使用IDEA建立Spring Boot專案並使用yaml配置檔案Spring BootIdeaYAML
- Spring boot 解決跨域問題配置類Spring Boot跨域
- Spring Boot 配置檔案Spring Boot
- Spring Boot 2.2 中的延遲載入Spring Boot
- JavaFX——fxml檔案載入錯誤:[javafx.fxml.LoadException]解決方案之一JavaXMLException
- Spring Boot入門(一):搭建Spring Boot專案Spring Boot
- Spring Boot 容器化踩坑與解決方案(1)Spring Boot
- Eclipse 無法載入類檔案Eclipse
- Spring 對檔案上傳下載的支援(Spring boot實現)Spring Boot
- 徹底解決java WEB專案的檔案路徑問題(war包)JavaWeb
- 【轉載】Linux查詢檔案安裝路徑Linux
- python 在命令列中選擇檔案路徑的互動程式Python命令列
- 使用Jasypt在Spring Boot專案中加密配置檔案中任何密碼 - Aanchal SharmaSpring Boot加密密碼
- Spring Boot Web應用程式下載Excel檔案 - simplesolutionSpring BootWebExcel
- Spring boot入門(一):快速搭建Spring boot專案Spring Boot
- JAVAWEB——絕對路徑和相對路徑,到底加不加“/“,以及解決方案JavaWeb
- VS 開啟程式碼檔案時,在解決方案中自動定位到對應檔案位置
- 在datatable中載入easyui控制元件時,draw操作很慢的解決方案UI控制元件
- Spring Boot幾種啟動問題的解決方案Spring Boot
- 轉載:SpringBoot非官方教程 | 第二篇:Spring Boot配置檔案詳解Spring Boot
- Vue + Spring Boot 專案實戰(十九):Web 專案優化解決方案VueSpring BootWeb優化
- Spring Boot配置類的註解Spring Boot
- JavaWeb中讀取【專案路徑下檔案】的路徑問題:this.getServletContext().getRealPath()JavaWebServletContext
- Spring Boot的檔案上傳Spring Boot
- spring boot配置檔案相關Spring Boot