欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

在Spring Boot中从类路径加载文件的示例

时间:2022-06-04 12:20:36|栏目:JAVA代码|点击:

资源加载器

使用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."); 
   } 
  } 
 } 
} 

上一篇:SpringBoot中的Mybatis依赖问题

栏    目:JAVA代码

下一篇:Java使用J4L识别验证码的操作方法

本文标题:在Spring Boot中从类路径加载文件的示例

本文地址:http://www.codeinn.net/misctech/203714.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有