java application是什么_Java后端精选技术:SpringBoot配置读取

简介

在早前的博客中曾经写过 Spring 程序通过 Bean 映射实现配置信息的读取。 在SpringBoot 框架中读取配置的方式变得非常多样,这导致读者在搜寻资料时反而容易迷糊。

  • 到底,SpringBoot 是按什么顺序加载配置?
  • 相应的,我们该选择什么样的方式去读取?

一、配置样例

先看一个例子:

6242d9d6033443321b3ff321edd6cdc5.png

代码中,@Component 将 BuildConfig 注册为 Bean , 接下来使用 @Value 注解,将 配置中的 buildinfo.version键映射到了 version 字段上。

我们都知道,通过 application.properties 可以方便的配置一些属性。 属性的值是支持变量替换的,如下:

a5ec26c470f8c82508967d45b3bce9ef.png

这点,是由 SpringBoot 自动生成的 PropertyPlaceholderConfigurer 对象实现的。

除了 上面所说 application.properties 之外,还有什么途径? 下面介绍如何注入配置


二、如何注入配置

1. 缺省配置文件

类路径中 application.properties(yml) 是默认的配置文件。 此外如果启动应用时,当前目录中存在同名的配置文件,则以此优先。

在此规则之下,SpringBoot 还能识别不同 profile下的配置,这将在后面篇幅中介绍。

2. 使用注解

@PropertySource

可指定属性配置文件的位置, 样例代码:

d5f202fc69706192c4e7248505e8815c.png

@TestPropertySource

与 @PropertySource 类似,该注解用于指定测试环境中的属性文件,其优先级高于 @PropertySource。

3. 启动参数

以下的命令以指定参数启动 SpringBoot 应用

8338fc3d62806a39f75a17b37504f228.png

server.port 值将被注入为环境属性值。

而以下的命令还可以指定 配置文件的位置

dae03d76f7c64036bcbb86ff528230de.png

这个spring.config.location就是指的配置文件位置, 默认情况下,SpringBoot 会从下面几路径找到配置文件:

02932716166d3d6ddd95b8cea996cf57.png

还有..

SpringBoot 注入配置的方式其实非常多,完整顺序如下表:

044e03535fdefa7b5304cde53b26f9ab.png

三、如何读取配置

@Value 注解

如以下的实现:

6b4560bd7a77229e009e011ba479c72c.png

除了类型自动转换之外,通过:false后缀可以指定默认值。

Environment 接口

Environment 是一个类似 Properties 的接口,用来获取属性非常方便。

f2475ce29456e6c0114ae78c83bee228.png

@ConfigurationProperties 注解

该注解一般用作前缀匹配,下面的代码摘自Mongodb

b00697bc9e7336a92eac985b535451cc.png

相应的 Mongodb 配置信息如:

9a8a228fa192bf663fe23bc5c46df238.png

四、不同环境中的配置

Spring 提供了 Profile 机制用于管理不同环境的配置。

配置内容可以是 Java Config(对应@Component或@Configuration),也可以是配置文件。 如:

b9083703c41cb6ba5b2ac2c581ca7ff8.png

通过@Profile注解可将代码配置关联到某个配置环境

在具体应用中,Profile的用途通常有二:

1. 区别开发、测试、发布环境

对于dev、prod、test分别做不同的配置

36bc91426b1c105be09a732d86fb8a0f.png

可以在 application.properties 指定启用的环境:

2d4cbdb08c46861135a4996fc3988488.png

也可以通过命令行指定:

3fd8a4154cdd2a78f7bc7fdcdbade14d.png

2. 声明多配置文件

当内容过多时,可以将配置信息进行拆分,如下:

application-mongodb.properties

282feee86b0b81ddb4fa55be5db6f0c4.png

application-mail.properties

50abf7abcca4bf63733fa9c08ffae637.png

在主配置文件指定包含关系:

application.properties

0319de4d2e51d6d7ec6ec27aa3773d3b.png

我目前是在职Java开发,如果你现在正在了解Java技术,想要学好Java,渴望成为一名Java开发工程师,在入门学习Java的过程当中缺乏基础的入门视频教程,你可以关注并私信我:01。我这里有一套最新的Java基础JavaSE的精讲视频教程,这套视频教程是我在年初的时候,根据市场技术栈需求录制的,非常的系统完整。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java后端开发中使用Spring Boot可以方便地实现文件的导入和导出功能。下面是一个简单的示例代码,演示了如何使用Spring Boot实现文件的导入和导出。 首先,确保你的项目中已经引入了Spring Boot的依赖。可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 接下来,创建一个Controller类,用于处理导入和导出请求。示例代码如下: ```java import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; @Controller public class FileController { @GetMapping("/export") public ResponseEntity<byte[]> exportFile() throws IOException { // 读取要导出的文件 File file = new File("path/to/your/file"); InputStream inputStream = new FileInputStream(file); // 设置Response Headers HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", file.getName()); // 将文件内容转换为字节数组 byte[] bytes = inputStream.readAllBytes(); inputStream.close(); // 返回ResponseEntity return ResponseEntity.ok() .headers(headers) .body(bytes); } // 处理文件上传请求 // 省略代码... } ``` 在上面的代码中,`exportFile`方法用于处理导出文件的请求,`@GetMapping("/export")`注解指定了处理的URL路径。在这个方法中,我们首先读取要导出的文件,然后设置Response Headers,包括Content-Type和Content-Disposition。最后,将文件内容转换为字节数组,并通过`ResponseEntity`返回给客户端。 你可以根据自己的需求修改代码中的路径和方法名。同时,你也可以添加其他处理文件导入的方法,通过使用`@PostMapping`注解来处理文件上传请求。 希望这个示例对你有帮助!如果有任何问题,请随时追问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值