IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Boot配置文件相关 -> 正文阅读

[Java知识库]Spring Boot配置文件相关

目录

1.配置文件的应用

2.配置文件的格式

3.properties 配置?件说明

4.yml配置文件说明

5.两种配置文件对比


1.配置文件的应用

整个项?中所有重要的数据都是在配置?件中配置的,?如:

数据库的连接信息(包含?户名和密码的设置);

项?的启动端?; 第三?系统的调?秘钥等信息;

?于发现和定位问题的普通?志和异常?志等。

想象?下如果没有配置信息,那么 Spring Boot 项?就不能连接和操作数据库,甚?是不能保存可以? 于排查问题的关键?志,所以配置?件的作?是?常重要的。

比如我们Spring Boot启动的默认端口是8080,而有时这个端口被占用了,我们想更换一个端口,此时我们可以通过配置文件非常快捷地区修改。比如下面这样:

我们就会发现我们的端口号就从8080变成了8081?

这就是配置文件简单的应用之一,接下来我们会继续讲解配置文件相关用法?有关Spring Boot更多系统配置项请查看官网,在需要时我们直接查看即可,不需要背下来

2.配置文件的格式?

Spring Boot 配置?件主要分为以下两种格式:

.properties

.yml

如下图所示:

?这两种配置文件其实在作用上别无二致,只不过是两个时代的产物罢了。.properties是比较老的一种格式,而.yml是比较新的一种格式。

注意:

1. 理论上讲 properties 可以和 yml ?起存在于?个项目当中,当 properties 和 yml ?起存在?个项?中时,如果配置?件中出现了同样的配置,?如 properties 和 yml 中都配置了“server.port”,那 么这个时候会以 properties 中的配置为主,也就是 .properties 配置?件的优先级最高,但加载完 .properties ?件之后,也会加载 .yml?件的配置信息。

2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取?种统?的配 置?件格式,这样可以更好的维护(降低故障率)。

3.配置文件必须是以application命名。这里体现了Spring Boot约定大于配置的思想(Spring Boot相比Spring需要配置的东西少了很多,因为更多的东西是通过约定而简化了)。类似的还有需要托管到Spring Boot的对象必须要放在Spring Boot启动类的根路径或者子路径下才能被框架识别。这里我们不需要像Spring一样去配置xml文件就是因为我们已经约定好了Spring Boot的扫描路径。

为配置文件安装提示插件?

IDEA 社区版安装 Spring Assistant 插件之后,就可以正常创建 Spring Boot 项?了,并且 yml 的配置 ?件就有提示了。但默认情况下是不?持 properties 格式的日志提示的,这个时候需要安装了 Spring Tools 插件才会有相应的提示。但是该插件目前仅支持2020及以前的版本,所以大家有能力的可以自行去安装IDEA教育版或者专业版,可以省去安装许多插件的烦恼。

3.properties 配置文件说明

3.1 解决properties中文乱码的问题

大家初次配置properties文件时,如果输入了中文,在重启idea后可能就会发现中文消失或者变成了乱码。这是因为properties文件的编码格式默认并不是UTF-8,所以需要我们去手动更改。

首先我们进入设置:

接下来进入编辑器->文件编码设置下面将这三个选项全部改成UTF-8即可。

?然后还需要进入新项目设置再重复一次上述步骤。

?最后将原来的properties文件删除再重新创建即可(因为原来文件的编码格式已经无法更改,只能删除重建)。

3.2?properties 基本语法

properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如:

# 系统的配置文件
server.port=8081
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8mb4&useSSL=true
spring.datasource.name=root
spring.datasource.password=123456
# 自定义配置项
bilibili.token=xxx
mybilibili.token=xxx
bilibili_token=xxx

同时我们可以注意到除了系统的配置文件我们也可以自定义配置项,这个在我们使用一些软件的接口时会用到。

3.3?读取配置文件

如果在项?中,想要主动的读取配置?件中的内容,可以使用?@Value 注解来实现

@Value 注解使?“${}”的格式读取,如下代码所示:

@Controller
public class UserController {

    @Value("${server.port}") // 读取配置项
    private String port;

    @ResponseBody // 返回一个非静态页面的数据
    @RequestMapping("/test") // 设置路由地址
    public String Test() {
        return "port:" + port;
    }
}

这样我们就可以在页面上来读取到我们的端口号信息了。

3.4?properties 缺点分析?

properties 配置是以 key-value 的形式配置的,如下图所示:

?但是我们可以发现其实有很多信息是冗余的:

?想要解决这个问题,就可以使? yml 配置?件的格式化了。

4. yml配置文件说明

yml 是 YMAL 是缩写,它的全称 Yet Another Markup Language 翻译成中?就是“另?种标记语?”。 yml 是?个可读性?,易于理解,?来表达数据序列化的格式。它的语法和其他?级语?类似,并且可 以简单表达清单(数组)、散列表,标量等数据形态。

4.1 yml的特点

1.写法简单,可读性高

2.支持更多数据类型(比如对象)

3.跨语言使用(Java/Go/Python等)

其中跨语言是yml最大的优势,他使得运维人员不需要同时维护多个不同语言的配置文件 。

4.2 yml的语法

yml 是树形结构的配置?件,它的基础语法是“key: value”,注意 key 和 value 之间使?英?冒号加空格的?式组成的,其中的空格不可省略

这里似乎是因为专业版的原因所以会标红报错,社区版貌似并没有提示,大家请注意。

使用?yml 连接数据库

spring:
  datasource:
    url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
    username: root
    password: 123456

可以看到yml因为采用了树形结构,相比properties它大大减少了代码冗余

4.3 yml的使用

4.3.1 yml 配置不同数据类型

# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ?进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null,~代表null
null.value: ~

4.3.2 yml配置读取

此处语法与properties读取配置完全一致,@Value 注解使?“${}”的格式读取,请参考前文的代码。这里不再重复说明。

4.3.3 有关value值单双引号的注意事项

字符串默认不?加上单引号或者双引号,如果加英?的单双引号可以表示特殊的含义。

我们看到下面的代码:

string:
  str1: Hello\nWorld
  str2: 'Hello\nWorld'
  str3: "Hello\nWorld"

我们将他读取出来并打印:

?从上述结果可以看出:

1.字符串默认不?加上单引号或者双引号。

2.单引号会转义特殊字符,特殊字符最终只是?个普通的字符串数据

3.双引号不会转义字符串??的特殊字符;特殊字符会作为本身想表示的意思

4.3.4 配置对象?

不同于properties,在yml中是支持对象的。如下面配置。

student:
  id: 1
  name: 张三
  age: 18

也可以使用行内写法(与上面下用法一致,根据个人习惯选择即可)

student: {id: 2,name: 李四,age: 20}

这个时候就不能? @Value 来读取配置中的对象了,此时要使?另?个注解 @ConfigurationProperties 来读取,具体实现如下:

@Data
@ConfigurationProperties(prefix = "student")
@Component
public class StudentComponent {
    private int id;
    private String name;
    private int age;
}

注意此处我们使用了@Data注解。

@Data注解是lombok.jar包下的注解,该注解通常用在实体bean上,不需要写出set和get方法,但是具备实体bean所具备的方法,简化编程提高变成速度。

@Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。

如果不使用@Data注解的话我们还需要写出get和set以及tostring方法。

调?类的实现如下:

@Component
public class ReadYml2 {
    @Autowired
    private StudentComponent studentComponent;
    @PostConstruct
    public void postConstruct() {
        System.out.println(studentComponent);
   }
}

@Component 在 Spring Boot 启动时候会注?到框架中,注?到框架中时会执? @PostConstruct 初 始化?法,这个时候就能读取到配置信息了。


该注解的方法在整个Bean初始化中的执行顺序:

Constructor(构造方法)?->?@Autowired(依赖注入)?->?@PostConstruct(注释的方法)

运行结果如下:

?4.3.5 配置集合

dbtypes:
 name:
   - mysql
   - sqlserver
   - db2

也可以使用行内写法

dbtypes: {name: [mysql,sqlserver,db2]}

集合的读取和对象?样,也是使? @ConfigurationProperties 来读取的,具体实现如下:

@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
    private List<String> name;
}

打印类如下:

@Component
public class ReadYml {
    @Autowired
    private ListConfig listConfig;
    @PostConstruct
    public void postConstruct() {
        System.out.println(listConfig.getName());
   }
}

?结果如下:

?5.properties 与?yml 对比总结

1.roperties 是以 key=value 的形式配置的键值类型的配置?件,而?yml 使用的是类似 json 格式的 树形配置?式进?配置的,yml 层级之间使?换行缩进的?式配置,key 和 value 之间使?“: ”英? 冒号加空格的?式设置,并且空格不可省略。

2.properties 为早期并且默认的配置?件格式,但其配置存在?定的冗余数据,使? yml 可以很好的 解决数据冗余的问题。

3.yml 通用性更好,?持更多语?,如 Java、Go、Python 等,如果是云服务器开发,可以使??份 配置?件作为 Java 和 Go 的共同配置?件。

4.yml 虽然可以和 properties 共存,但?个项?中建议使?统?的配置类型?件。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:12:25  更:2022-11-05 00:17:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/30 13:16:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码