您现在的位置是:亿华云 > 系统运维
在Spring Boot中从类路径加载文件
亿华云2025-10-09 01:35:02【系统运维】3人已围观
简介在下面,您将找到在WAR和JAR中加载文件的解决方案。资源加载器使用Java,您可以使用当前线程的classLoader并尝试加载文件,但是Spring Framework为您提供了更为优雅的解决方案
在下面,中从载文您将找到在WAR和JAR中加载文件的类路解决方案。
资源加载器使用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."); } } } }很赞哦!(43512)
上一篇:
相关文章
- 互联网其实拼的也是人脉,域名投资也是一个时效性很强的东西,一个不起眼的消息就会引起整个域名投资市场的动荡,因此拓宽自己的人脉圈,完善自己的信息获取渠道,让自己能够掌握更为多样化的信息,这样才更有助于自己的域名投资。
- 微服务实现简单的分布式日志追踪
- RPC 服务器之【多进程描述符传递】高阶模型
- 牛皮!几张图就把Nginx剖析的明明白白
- 4、参加域名拍卖会
- 搞定Tomcat重要参数调优!
- 拿什么拯救疫情下要远程办公的打工人?
- 聊聊单片机能用 C++ 开发吗?
- 3、不明先知,根据相关征兆预测可能发生的事件,以便提前做好准备,赶紧注册相关域名。;不差钱域名;buchaqian抢先注册,就是这种敏感类型。预言是最敏感的状态。其次,你应该有眼力。所谓眼力,就是善于从社会上时不时出现的各种热点事件中获取与事件相关的域名资源。眼力的前提是对域名领域的熟悉和丰富的知识。
- 是时候对数据中心脱碳进行现实检查了吗?