在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/31559985/viewspace-2731013/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- QT 檔案相對路徑載入QT
- 載入常量-從檔案中載入
- Spring Boot @PropertySource 載入指定配置檔案、@ImportResource 匯入Spring 配置檔案Spring BootImport
- XML檔案中url路徑中&失效解決辦法XML
- java中獲取類載入路徑和專案根路徑的5種方法Java
- Spring學習總結(24)——Spring配置檔案載入路徑總結Spring
- spring boot啟動載入外部配置檔案Spring Boot
- 在Spring Boot程式中上傳和下載檔案Spring Boot
- 在cmd中開啟指定檔案路徑
- JavaWeb 專案中的絕對路徑和相對路徑以及問題的解決方案JavaWeb
- VC從檔案中載入圖片
- 在spring boot專案(maven)中引入其他 spring boot專案Spring BootMaven
- 前端JS 下載大檔案解決方案前端JS
- Spring boot 獲取yml檔案工具類Spring Boot
- Spring Boot 檔案上傳與下載Spring Boot
- Spring boot + Vue axios 檔案下載Spring BootVueiOS
- Spring Boot 2.2 中的延遲載入Spring Boot
- help:如何獲取類檔案的路徑
- Spring Boot 熱載入Spring Boot
- Spring boot 解決跨域問題配置類Spring Boot跨域
- spring application.xml中載入配置檔案SpringAPPXML
- 在datatable中載入easyui控制元件時,draw操作很慢的解決方案UI控制元件
- Spring Boot 配置檔案Spring Boot
- Spring Boot 容器化踩坑與解決方案(1)Spring Boot
- Spring Boot + thymeleaf 實現檔案上傳下載Spring Boot
- JavaFX——fxml檔案載入錯誤:[javafx.fxml.LoadException]解決方案之一JavaXMLException
- JAVAWEB——絕對路徑和相對路徑,到底加不加“/“,以及解決方案JavaWeb
- Spring Boot入門(一):使用IDEA建立Spring Boot專案並使用yaml配置檔案Spring BootIdeaYAML
- Oracle直接路徑載入Oracle
- 讀取web專案properties檔案路徑 解決tomcat伺服器找不到properties路徑問題WebTomcat伺服器
- Spring Boot(十七):使用 Spring Boot 上傳檔案Spring Boot
- VS 開啟程式碼檔案時,在解決方案中自動定位到對應檔案位置
- spring 載入配置檔案的方式Spring
- Spring Boot入門(一):搭建Spring Boot專案Spring Boot
- 徹底解決java WEB專案的檔案路徑問題(war包)JavaWeb
- 使用Jasypt在Spring Boot專案中加密配置檔案中任何密碼 - Aanchal SharmaSpring Boot加密密碼
- Spring Boot幾種啟動問題的解決方案Spring Boot
- Eclipse 無法載入類檔案Eclipse