在Spring Boot中從類(lèi)路徑加載文件的示例
資源加載器
使用Java,您可以使用當(dāng)前線程的classLoader并嘗試加載文件,但是Spring Framework為您提供了更為優(yōu)雅的解決方案,例如ResourceLoader。
您只需要自動(dòng)連接ResourceLoader,然后調(diào)用getResource(„somePath“)方法即可。
在Spring Boot(WAR)中從資源目錄/類(lèi)路徑加載文件的示例
在以下示例中,我們從類(lèi)路徑中加載名為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)中從資源目錄/類(lèi)路徑加載文件的示例
如果您想從Spring Boot JAR中的 classpath加載文件,則必須使用該resource.getInputStream()方法將其作為InputStream檢索。如果嘗試使用resource.getFile()該方法,則會(huì)收到錯(cuò)誤消息,因?yàn)镾pring嘗試訪問(wèn)文件系統(tǒng)路徑,但無(wú)法訪問(wèn)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中從類(lèi)路徑加載文件的示例的詳細(xì)內(nèi)容,更多關(guān)于spring boot 加載文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 淺談SpringBoot2.4 配置文件加載機(jī)制大變化
- SpringBoot內(nèi)部外部配置文件加載順序解析
- 詳解springboot啟動(dòng)時(shí)是如何加載配置文件application.yml文件
- 簡(jiǎn)單了解springboot加載配置文件順序
- Spring Boot加載配置文件的完整步驟
- Springboot為什么加載不上application.yml的配置文件
- SpringBoot配置文件的加載位置實(shí)例詳解
- spring boot啟動(dòng)時(shí)加載外部配置文件的方法
- spring boot加載第三方j(luò)ar包的配置文件的方法
- 詳解Spring Boot加載properties和yml配置文件
相關(guān)文章
Eclipse可視化插件WindowBuilder的安裝方法
這篇文章主要介紹了Eclipse可視化插件WindowBuilder的安裝方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Java7之forkjoin簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Java7引入了Fork Join的概念,來(lái)更好的支持并行運(yùn)算。接下來(lái)通過(guò)本文給大家分享Java7之forkjoin簡(jiǎn)介,感興趣的朋友一起看看吧2017-06-06spring如何解決循環(huán)依賴(lài)問(wèn)題
Spring在單例模式下用三級(jí)緩存設(shè)計(jì)解決setter方法注入bean屬性循環(huán)依賴(lài)問(wèn)題,但無(wú)法解決多例Bean和構(gòu)造方法注入?yún)?shù)的循環(huán)依賴(lài),三級(jí)緩存通過(guò)A、B兩對(duì)象互相注入屬性的過(guò)程解決循環(huán)依賴(lài),其中,構(gòu)造方法的循環(huán)依賴(lài)無(wú)法解決是因?yàn)閯?chuàng)建對(duì)象會(huì)走構(gòu)造方法2024-10-10HashMap底層數(shù)據(jù)結(jié)構(gòu)詳細(xì)解析
這篇文章主要介紹了HashMap底層數(shù)據(jù)結(jié)構(gòu)詳細(xì)解析,HashMap作為開(kāi)發(fā)中常用的數(shù)據(jù)結(jié)構(gòu),也是面試中經(jīng)常被問(wèn)的知識(shí)點(diǎn),因此作為開(kāi)發(fā)者應(yīng)該盡可能多的理解其底層的數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下2023-11-11SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)
這篇文章主要介紹了SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07