在Spring Boot中從類路徑加載文件的示例
資源加載器
使用Java,您可以使用當(dāng)前線程的classLoader并嘗試加載文件,但是Spring Framework為您提供了更為優(yōu)雅的解決方案,例如ResourceLoader。
您只需要自動連接ResourceLoader,然后調(diào)用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嘗試訪問文件系統(tǒng)路徑,但無法訪問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.'); } } } }
以上就是在Spring Boot中從類路徑加載文件的示例的詳細(xì)內(nèi)容,更多關(guān)于spring boot 加載文件的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. JS實現(xiàn)前端動態(tài)分頁碼代碼實例2. 用Spring JMS使異步消息變得簡單3. 關(guān)于IDEA 2020.3 多窗口視圖丟失的問題4. PHP驗證碼工具-Securimage5. js實現(xiàn)碰撞檢測6. 一文帶你徹底理解Java序列化和反序列化7. ASP基礎(chǔ)知識VBScript基本元素講解8. Python 利用Entrez庫篩選下載PubMed文獻(xiàn)摘要的示例9. 通過實例解析Python文件操作實現(xiàn)步驟10. ASP.NET MVC使用jQuery ui的progressbar實現(xiàn)進(jìn)度條

網(wǎng)公網(wǎng)安備