Spring Boot配置文件

日升时奋斗,日落时自省 

目录

1、配置文件作用

2、配置文件格式

2.1、使用注意

3、properties配置文件

3.1、注释中文问题

3.2、properties语法格式

3.3、读取配置文件

3.3.1、Value读取

3.3.2、PropertySource读取

3.3.3、原生方式读取配置文件

3.4、properties缺点分析

4、yml配置文件

4.1、优点分析

4.2、yml语法格式

4.2.1、设置不同数据类型

4.2.2、yml配置读取

 4.2.3、配置对象

4.2.4、配置集合

5、properties和yml区别

6、设置不同创建环境的配置文件


1、配置文件作用

配置文件是一种存储应用程序配置信息的文件,通常采用纯文本格式

<1>存储应用程序的配置参数:在软件开发过程中,很多参数需要在运行时进行调整,例如数据库连接、日志级别等。通过配置文件,可以将这些参数组织起来并进行统一管理

<2>方便程序的部署:在程序部署时,需要根据不同的环境进行不同的配置,例如开发环境、测试环境和生产环境等。通过配置文件,可以轻松地进行环境切换,从而方便程序的部署和管理

2、配置文件格式

Spring Boot配置文件主要分为两种格式:

.properties (比较老的格式)

.yml(也能写作.yaml 都算是新版格式)

两者都是可以出现在一个目录下使用的(使用就是同时存在而且还能跑)

类似于纸币,旧纸币和新纸币,.properties 后缀的配置文件 就类似于“旧纸币”,.yml类似于“新纸币”但是效果都是一样的100元,不能当50元用嘛,还是原来的价值(都可以使用,也可以并存)

2.1、使用注意

<1>虽然.properties文件和.yml文件是可以在同一个项目中,但是这样也会有所影响,.properties文件的优先级还是比较高的,.properties配置文件会先进行加载,.yml配置文件也加载但是需要在.properties配置文件之后

<2>尽可能的使用一种格式的配置文件,便于维护(降低故障可能性),推荐在刚刚开始学习SpringBoot的时候使用.properties配置文件

3、properties配置文件

properties配置文件是早期文件格式,也是默认格式,在创建Spring Boot项目时,会直接创建好

3.1、注释中文问题

有的友友肯定会遇到注释中文乱码 

 在配置文件中输入 中文注释,当关闭idea再次打开时就会出现乱码

不如提前解决这个问题,以免后面遇到了临时处理很慌乱(提前预判)(修改两个地方)

<1>当前项目修改字符集

<2>修改新项目的字符集

最后操作:就是把本项目刚刚加载的properties配置文件给删了,自己从新创建一个,就也是utf-8字符集 

3.2、properties语法格式

properties是键值对的形式配置的,键值连接方式是 “= ”连接的

这里演示几个给友友们看,这里推荐友友们下载一个插件(这是社区版的插件,可以支持配置文件的快捷提示,方面我们输入)

File -> Settings -> plugins

 安装完成后,idea重启 就可以了

# 首次使用properties配置文件
#配置文件中 设置端口号
server.port=8080
#设置数据库连接
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/class?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root

#也可以自定义 设置键值对

javaclass=myclass

3.3、读取配置文件

配置不仅仅可以设置连接,端口号等固定操作,还可以设置自定义,在项目中会有主动读取配置文件内容情况,这里就涉及到了一个新的注解@Value来实现

3.3.1、Value读取

使用操作:@Value("${key}")   这里的key就是键

就以上面的配置文件为例,我们拿一下 端口号 和 自定义设置的键值对

@RestController   //相当于  @Controller注解 和 @ResponseBody注解
@RequestMapping("/test")         //设置路由
public class TestController {

    @Value("${server.port}")
    public String port;

    @Value("${javaclass}")
    public String mystr1;

    @RequestMapping("/port")   //设置二级路由
    public void sayhi(){
        System.out.println("从配置文件中拿出的端口号:"+port);
        System.out.println("自定义配置文件键值对取值:"+mystr1);
    }
}

类写完之后,开始启动Maven ,此时启动控制台并不会打印什么,需要访问这里写的myport路由

控制台才会显示打印结果

运行结果: 都是我们刚刚配置文件中设置的

3.3.2、PropertySource读取

@PropertySource注解读取方法只能读取properties配置文件

下面就来演示@PropertySource注解的读取操作,这里是指定读取哪个properties配置文件

使用一个类来演示

//组合注解
@RestController
//该注解 指定读取的配置文件 如果出现乱码问题也可以设置字符集
@PropertySource(value = "application.properties",encoding = "utf8")
//设置路由地址
@RequestMapping("/proper")
public class ProperController {
    @Value("${server.port}")
    private String port;

    @Value("${spring.datasource.url}")
    private String url;
    @RequestMapping("sayhi")
    public void sayhi(){
        System.out.println("指定配置文件获取端口:"+port);
        System.out.println("指定配置文件获取连接:"+url);
    }
}

 剩下部分就交给启动了,启动后需要访问路由才能看见打印结果

运行结果:(友友们也可以从新创建一个properties配置文件进行操作,两个配置文件中设置不同的端口号,想要加载那个就给注解中添加那个配置文件)

注:该注解只能支持properties为后缀的配置文件 

3.3.3、原生方式读取配置文件

原生的读取配置文件的方式是使用 Properties 类,该类只支持以 .properties 为后缀的属性文件,不支持读取 YAML 格式的配置文件

@RestController
@RequestMapping("/native")
public class NativeController {
    @RequestMapping("/sayhi")
    public void sayhi() throws IOException {
        //创建properties对象 
        Properties properties=new Properties();
        //获取配置文件中的字节   同时设置字符集
        InputStreamReader inputStreamReader=new InputStreamReader(
                this.getClass().getClassLoader().getResourceAsStream("application.properties"),
                StandardCharsets.UTF_8);
        //properties配置文件加载字节流
        properties.load(inputStreamReader);
        //获取后就可以直接进行打印了
        System.out.println("Properties port:"+properties.getProperty("server.port"));
    }
}

3.4、properties缺点分析

properties配置是以键值对的形式配置的

但是配置冗余代码过多,前面写有一个连接数据库的配置(url,username,password前缀相同但是都需要再写一次)

 当然除了这个缺点,有个有利于我们的优点就是格式很简单(“=”号连接的键值对),允许空格随便打

4、yml配置文件

yml全称是yaml(Yet Another Markup Language),是一种基于文本的数据序列化语言,这里说yml是一种“语言”,是一种新的通用数据序列化格式(操作简洁)

4.1、优点分析

<1>易读性高:YAML的语法结构简单、清晰,易于理解和阅读。它的格式类似于自然语言,可以直接将数据表示为键值对,而不需要大量的标记和转义字符。

<2>可维护性高:由于YAML的易读性,它更容易维护和修改。在开发过程中,程序员可以使用YAML格式的配置文件轻松地进行调试和修改,而无需关心底层的数据结构。

<3>支持多种类型的数据:除了常见的字符串、数字、布尔值之外,YAML还支持数组、哈希表等多种类型的数据,能够满足各种应用场景的需求。同时,YAML也支持一些高级特性,比如引用和锚点等,方便用户在大型文件中进行数据共享和重复利用。

<4>平台无关性:YAML是基于文本的数据序列化格式,不依赖于任何特定的编程语言或操作系统平台,因此具有良好的跨平台可移植性。

<5>支持编程语言更为丰富,它不止限制于java使用,也可以使用在Python、PHP、JS等

虽然优点很多,但是初学者使用Spring Boot不推荐使用,格式规定简洁能省很多事情,但是格式是比较固定的,不谨慎容易出错

4.2、yml语法格式

yml是树形结构的配置文件,优点类似于Python的基础语法格式,空格划分等级,这里也是使用键值方式,连接键值方式 “key: value”

注:key后面有一个:冒号和一个空格,这个空格不能少(少了会报错)

这里就还是拿刚刚properties的配置再yml中再写一下

#yml配置文件 设置端口号
server:
  port: 8080
# 设置连接数据库
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/class?characterEncoding=utf8
    username: root
    password: root
#设置自定义 键值
javaclass: myclass

代码冗余减少了,连接数据库需要写一次spring: datasource: 

4.2.1、设置不同数据类型

#设置字符串 以下这些都是我们自己设置的键值 不是yml中自带的
string.value: string-hello

#设置布尔类型
boolean.value: true;

#设置整数
int.value: 100

#设置浮点数
float.value: 2.712
float.value1: 2712e-5  #使用科学计数法

#NULL表示 ~
null.value: ~

4.2.2、yml配置读取

yml的读取操作和properties配置文件基本是一样的,使用@Value注解 参数中除了把key放入,注意:不是使用:冒号连接,这里获取对象是.点来连接,现在我们先把刚刚properties配置文件中的内容注释掉, 以免影响yml加载,properties加载早于yml,也会优先使用properties

还是在controller包中添加一个新类在写yml读取,ReadYml类

 4.2.3、配置对象

在配置文件中也可以写一个对象以及对象的属性

下面就来展示一下

#可以写成键值不同等级的形式
student:
  id: 1
  name: 白无常
  age: 20
#也可以将对象直接写成类似数组的形式 行内写法
student1: {id: 2,name: 黑无常, age: 25}

针对对象的读取就不能通过@Value注解来实现了,需要使用另外一个注解,此处又要接触一个新的注解了@ConfigurationProperties注解来读取

读取对象是将配置文件中的对象获取,所以要添加注解加载配置文件中指定的对象

这里需要创建一个对应的实体类,当然也不一定完全需要,多几个属性,最多就是值为null

实体类代码:

@ConfigurationProperties(prefix = "student")   //加载配置文件中 对应到的对象
@Component                            //类注解
@Setter//lombok set方法注解
@Getter//lombok get方法注解
@ToString//lombok toString方法注解
public class StudentComponent {
    private int id ;
    private String name;
    private int age;
}

控制层代码:

@RestController   //相当于  @Controller注解 和 @ResponseBody注解
@RequestMapping("/test")         //设置路由
public class TestController {

    @Value("${server.port}")
    public String port;

    @Value("${javaclass}")
    public String mystr1;


    @Autowired
    private StudentComponent studentComponent;

    @RequestMapping("/port")   //设置二级路由
    public void sayhi(){
        System.out.println("从配置文件中拿出的端口号:"+port);
        System.out.println("自定义配置文件键值对取值:"+mystr1);
        System.out.println(studentComponent.toString());
    }
}

4.2.4、配置集合

配置文件也可以存放list集合,写法上和对象有几分相似

配置文件代码 ,这里写的代码也是yml文件中写的

#设置集合
databasetypes:
  name: [mysql,sqlserver,db]

#集合的行内写法
databaserow: {name: [mysql,sqlserver,db]}]}

读取集合:

这里我们还需要创建一个实体类来接收这个集合 (如下操作)

 针对集合创建的实体类:

@ConfigurationProperties(prefix = "databasetypes")
@RestController
@Setter
@Getter
@ToString
public class StudentComponent2 {
    private List<String> name;
}

 注:prefix如果注解中参数只有一个,可以加也不加,前面写的就没有加

属性注入,这里就不在附加代码了,在之前附加的代码上添加即可

当然了,系统配置不是就止于此(有需求的友友们,可以自行去官网看看,下面是官网网址)

Common Application Properties

 5、properties和yml区别

<1>语法:Properties 使用简单的键值对格式,例如 key=value;而 YAML 使用缩进和换行来表示数据结构

<2>数据类型:Properties 中的值只能是字符串类型;而 YAML 支持多种数据类型,例如字符串、整数、浮点数、布尔值、日期等

<3>复杂度:Properties 的数据结构相对简单,通常用于存储简单的配置信息;而 YAML 支持复杂的数据结构,例如列表、嵌套结构等,更适合存储较为复杂的数据

<4>可读性:由于 YAML 使用缩进和换行进行格式化,具有很好的可读性和易用性,更容易被人类阅读和编辑;而 Properties 的格式相对简单,不够直观

6、设置不同创建环境的配置文件

此处问就来使用一套配置文件,这里使用yml这套配置文件,这里就将properties配置文件删除或者注释掉(同时对应的类也需要稍微做已处理)

针对不同平台需要端口号不同 

例如:

开发环境:需要使用端口号为 9090

测试环境:需要使用端口号位 8090

 就以这两个环境来解释 ,现在每一个环境就需要一个配置文件,那就分别创建一个配置文件,同时这里还会有一个主配置文件,主配置文件中不需要设置端口号,因为不同环境下有不同的端口号(需要设置的是不同的内容,而相同内容不需要设置),主配置文件是公用的

操作: spring: profiles: active: 文件名可以修改的部分

 我们这里创建的文件看着比较有规律,实际上只能这么创建,这是一种创建格式

例如: application-dev.yml  其实只有黑色这部分我们能改,其他都是固定格式,dev也就是创建的名称

 注:公共部分放在主配置文件中,只有特殊部分用其他配置文件来表示

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值