在Spring Boot中從類路徑加載文件的示例
資源加載器
使用Java,您可以使用當(dāng)前線程的classLoader并嘗試加載文件,但是Spring Framework為您提供了更為優(yōu)雅的解決方案,例如ResourceLoader。
您只需要自動(dòng)連接ResourceLoader,然后調(diào)用getResource(„somePath“)方法即可。
在Spring Boot(WAR)中從資源目錄/類路徑加載文件的示例
在以下示例中,我們從類路徑中加載名為GeoLite2-Country.mmdb的文件作為資源,然后將其作為File對(duì)象檢索。
@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()該方法,則會(huì)收到錯(cuò)誤消息,因?yàn)镾pring嘗試訪問文件系統(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 加載文件的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. XML入門的常見問題(四)2. 使用css實(shí)現(xiàn)全兼容tooltip提示框3. 詳解CSS偽元素的妙用單標(biāo)簽之美4. 詳解PHP實(shí)現(xiàn)HTTP服務(wù)器過程5. 低版本IE正常運(yùn)行HTML5+CSS3網(wǎng)站的3種解決方案6. html小技巧之td,div標(biāo)簽里內(nèi)容不換行7. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)8. XML入門的常見問題(一)9. HTML DOM setInterval和clearInterval方法案例詳解10. ASP中格式化時(shí)間短日期補(bǔ)0變兩位長(zhǎng)日期的方法
