欢迎观看~
目录
1.配置文件的作用
(1)配置包括哪些文件呢?
整个项目中所有重要的数据都是在配置文件中配置的,比如:
①数据库的连接信息(包括用户名和密码)
②项目的启动端口
③第三方系统的调用秘钥等信息
④用于发现和定位问题的普通日志和异常日志
(2)要是没有配置文件的话会出现什么问题?那么Spring Boot项目就不能连接和操作数据库,甚至不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的。
(3)配置文件的分类:
①系统的配置文件:
比如连接字符串,比如日志的相关设置,系统定义好的。
②用户自定义的
2.配置文件的格式
①配置文件主要有两种格式:
properties
yml
注意:要是没有properties的话,就先在IDEA中下载安装一个Spring Tools,要是没有下面这个yml的话,可以参考这篇文章,就可以得以创建:
(11条消息) idea中如何创建yml文件_丶牧魂人的博客-CSDN博客_idea创建yml文件
②规则:
a.一个项目中可以同时存在这两种配置文件,但是我们不建议一个项目中出现两种配置文件。
b.当一个项目的某个配置,出现在两种格式的配置文件中时,那么配置项会以properies为主,而忽略yml中的配置对上述结论进行演示,我们在application.properties里面将端口号设为9090,而在application.yml中将端口号设为8080,然后我们会发现这个时候,打印的是9090
3.properties 配置文件说明
properties配置文件是最早期的配置文件格式,也是创建spring boot项目默认的配置文件
3.1properties 基本语法
①格式:
properties是以键值的形式配置的,key和value之间是以“=”进行连接的
②示例:
③注意:关于properies中文乱码问题的处理
a.打开setting设置,找到encoding
b.将下图标识地方全部修改为utf-8,并点击确认
c.配置新项目中的乱码问题:(找到对应位置后,重复上述a,b步骤)
d.将原来的application.properies删除掉,重新创建一个application.properi。因为之前的配置文件已经创建好了,我们才设置的文件格式,如果不删除重建的话,在这个application.properies中的话,仍然不会支持中文编码的。
这样的话我们的中文设置配置好了。
3.2读取配置文件
①格式:
@Value注解以及${}的格式就可以进行读取了
②注意:
一个@Value只能读取一个配置文件,要是想要读取多个的话,就需要建立多个@Value
③示例:
a.application.properties:
# 这是端口号 server.port=9090
b.test:
package com.example.demo.next; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class test { @Value("${server.port}") private String port; @ResponseBody//返回一个非静态页面的数据 @RequestMapping("/Sayhi")//设置路由地址 public String sayHi(){ System.out.println("Hello" + port);//在控制台打印 return "Hello,World + port:" + port;//在网页上打印 } }
结果显示:
3.3properties 的缺点
因为properties的格式是key=value这种形式,因此很容易出现如下图所示的冗余的现象。
4.yml配置文件的说明
①什么是yml?
yml 是 YMAL 是缩写,它的全称 Yet Another Markup Language 翻译成中文就是“另一种标记语言”②yml语言的特点:可读性高,易于理解支持更多的数据类型跨语言使用,如golang,java,高版本python等。
4.1yml基本语法
①格式:
key:(空格)value
注意此处的空格一定不能省略,否则程序会报错
②示例:
4.2读取配置文件
yml读取配置文件和properties是一致的,都是通过@Value(${})来进行读取,演示如下:
①yml:
#端口号 server: port: 8080 Stirng: java
②test:
package com.example.demo.next; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class test { @Value("${server.port}") private String port; @ResponseBody//返回一个非静态页面的数据 @RequestMapping("/Sayhi")//设置路由地址 public String sayHi(){ System.out.println("Hello" + port);//在控制台打印 return "Hello,World + port:" + port;//在网页上打印 } }
4.3yml配置对象
①我们在yml中进配置:(此处有两种不同的写法)
#第一种写法 student1: id: 1 name: 张三 age : 18 #第二种写法 student2: {id: 2,name: 李四,age: 20}
②创建一个student类,并且加上相关属性
(注意:这个时候就不能用@Value 来读取配置中的对象了,此时要使用另⼀个注解@ConfigurationProperties来读取:)
package com.example.demo.next; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Controller; @Controller @Data//这个注解为我们封装提供了getter,setter,toString等方法,我们就不用再写 @ConfigurationProperties("student2") public class Student { private String name; private int id; private int age; }
③我们进行测试上述内容:(这里用UserController来进行测试)
package com.example.demo.next; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class UserController { @Autowired private Student student; @ResponseBody//返回一个非静态页面的数据 @RequestMapping("/sayhi")//路由地址 public String sayHi() { System.out.println(student); return "student:" + student; } }
输出结果:
4.4yml配置集合
配置文件也可以配置 list 集合,如下所示:
①yml相关代码:
#集合 dbtypes: {name: [mysql,sqlserver,db2]}
②list相关的代码:
package com.example.demo.next; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Controller; import java.util.List; @Data @Controller @ConfigurationProperties("dbtypes") public class ListTest { private List<String> name; }
③创建一个UserController2来进行测试:
package com.example.demo.next; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; @Controller public class UserController2 { @Autowired private ListTest list; @ResponseBody//返回一个非静态页面的数据 @RequestMapping("/list")//设置路由地址(一定要全部小写) public String sayHi(){ return "list: "+ list; } }
另外,这里补充一个yml加“”与‘’的区别的例子:
①我们在yml中配置如下相关内容:
mystring: hello\n世界 mystring2: 'hello\n世界' mystring3: "hello\n世界"
②我们来建一个UserController3来实现这个测试:
package com.example.demo.next; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class UserCntroller3 { @Value("${mystring1}") private String mystring1; @Value("${mystring2}") private String mystring2; @Value("${mystring3}") private String mystring3; @ResponseBody @RequestMapping("/test2")//设置路由地址 public String sayHi(){ System.out.println("mystring1:"+ mystring1); System.out.println("mystring2:"+ mystring2); System.out.println("mystring3:"+ mystring3); return null; } }
③输出结果如下:
我们可以发现:当用单引号的时候,得到的内容是原来有的一模一样的内容,而用双引号得到的才是带有换行本身意义的字符。即:yml里面如果使用了双引号就会按照(原)语义执行,如果不加单、双引号,或者加了单引号,那么默认会将字符串中的特殊字符进行转义