在本教程中,我们将展示如何在 Spring Boot 应用中加载资源。
Spring 是用于创建企业应用的流行 Java 应用框架。 Spring Boot 是一种以最少的精力创建独立的,基于生产级别的基于 Spring 的应用的方法。
Spring Boot 资源
资源是程序需要以与程序代码的位置无关的方式访问的数据,例如图像,音频和文本。
由于java.net.URL
不足以处理各种低级资源,因此 Spring 引入了org.springframework.core.io.Resource
。 要访问资源,我们可以使用@Value
注解或ResourceLoader
类。
Spring Boot 加载资源示例
我们的应用是一个 Spring Boot 命令行应用,它可以计算文本文件中单词的出现次数。 该文件位于src/main/resources
目录中,这是应用资源的标准 Maven 位置。
这是项目结构。
pom.xml
这是 Maven 构建文件。 Spring Boot 启动器是一组方便的依赖项描述符,我们可以在我们的应用中包含这些描述符。 它们极大地简化了 Maven 配置。 spring-boot-starter-parent
提供了 Spring Boot 应用的一些常见配置。 spring-boot-starter
依赖性是一个核心启动器,其中包括自动配置支持,日志记录和 YAML。 spring-boot-maven-plugin
在 Maven 中提供了 Spring Boot 支持,使我们可以打包可执行的 JAR 或 WAR 档案。 它的spring-boot:run
目标运行 Spring Boot 应用。
resources/application.yml
application.yml
文件包含 Spring Boot 应用的各种配置设置。 我们具有banner-mode
属性,可在其中关闭 Spring 标语。 另外,我们将 spring 框架的日志记录级别设置为 ERROR,将我们的应用设置为 INFO。 该文件位于src/main/resources
目录中。
resources/thermopylae.txt
这是我们在应用中读取的文本文件。 它也位于src/main/resources
目录中。
com/zetcode/service/CountWords.java
CountWords
是一个 Spring 托管的 bean,它执行给定文件中的单词计数。 文本从文件中读取到句子列表中。 句子被分成单词并计数。
wordCount
是一个映射,其中键是单词,频率是整数。
我们使用Files.readAllLines()
方法一次读取所有内容。 Files.readAllLines()
方法返回字符串列表。
我们遍历这些线,将它们分成单词; 单词之间用空格隔开。
我们删除尾随点和逗号。
如果单词已经在地图中,则增加其频率; 否则,我们将其插入地图并将其频率设置为 1。
com/zetcode/MyRunner.java
使用CommandLineRunner
,Spring Boot 应用在终端上运行。
使用@Value
注解,将文件设置为资源。
我们注入了CountWords
bean。
我们调用getWordsCount()
方法,并接收单词及其频率的映射。 我们遍历地图,并将键/值对打印到控制台。
com/zetcode/Application.java
Application
设置 Spring Boot 应用。 @SpringBootApplication
启用自动配置和组件扫描。
使用ResourceLoader
以前,我们使用@Value
注解来加载资源。 以下是ResourceLoader
的替代解决方案。
com/zetcode/MyRunner.java
或者,我们可以使用ResourceLoader
加载资源。
ResourceLoader
被注入到现场。
Resource
是通过getResource()
方法从资源加载器获得的。
运行应用
该应用在命令行上运行。
使用mvn spring-boot:run
命令,运行应用。 -q
选项禁止 Maven 日志。
在本教程中,我们使用了 Spring Boot 应用中的资源。 我们使用@Value
和ResourceLoader
加载资源文件。