欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Spring Boot中從類(lèi)路徑加載文件的示例

 更新時(shí)間:2020年10月12日 09:24:30   作者:程序汪布丁  
創(chuàng)建Spring Boot Web應(yīng)用程序時(shí),有時(shí)有時(shí)需要從類(lèi)路徑中加載文件;war和jar的加載文件格式是不一樣的,在下面,您將找到在WAR和JAR中加載文件的解決方案。

資源加載器

使用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)文章!

相關(guān)文章

  • Eclipse可視化插件WindowBuilder的安裝方法

    Eclipse可視化插件WindowBuilder的安裝方法

    這篇文章主要介紹了Eclipse可視化插件WindowBuilder的安裝方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 基于Java ActiveMQ的實(shí)例講解

    基于Java ActiveMQ的實(shí)例講解

    下面小編就為大家?guī)?lái)一篇基于Java ActiveMQ的實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Java7之forkjoin簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java7之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-06
  • Spring Boot 自動(dòng)配置之條件注解淺析

    Spring Boot 自動(dòng)配置之條件注解淺析

    這篇文章主要介紹了Spring Boot 自動(dòng)配置之條件注解淺析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • spring如何解決循環(huán)依賴(lài)問(wèn)題

    spring如何解決循環(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-10
  • Java基礎(chǔ)之初識(shí)Maven

    Java基礎(chǔ)之初識(shí)Maven

    這篇文章主要介紹了Java基礎(chǔ)之初識(shí)Maven,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • JAVA.io讀寫(xiě)文件方式匯總

    JAVA.io讀寫(xiě)文件方式匯總

    這篇文章主要介紹了幾種JAVA.io讀寫(xiě)文件方式,文中代碼非常詳細(xì),幫助大家更好的理解學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • HashMap底層數(shù)據(jù)結(jié)構(gòu)詳細(xì)解析

    HashMap底層數(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-11
  • Java實(shí)現(xiàn)猜數(shù)程序

    Java實(shí)現(xiàn)猜數(shù)程序

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)猜數(shù)程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)

    SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)

    這篇文章主要介紹了SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論