配置文件主要是用来解决硬编码带来的问题,把可能会发生改变的信息,放在用一个集中的地方,当我们启动某个程序的时候,应用程序从配置文件中读取数据,并加载运行
所谓"硬编码"是值,将数据直接嵌入到程序或其他可执行对象的源代码中,也就是将代码写死,就比如手机字体大小,如果采用硬编码的方式,就直接在程序中指定字体大小,所有的用户使用的都是同一个字体大小
但是实际上不同的用户有不同的选择,就可以将字体大小放在配置文件里面,当程序启动的时候,读取配置信息,以用户设置的字体大小来显示
SpringBoot配置文件
SpringBoot支持并定义了配置文件的格式,很多项目或者框架的的配置信息也放在配置文件里面,比如:
Spring内置的Tomcat服务器的默认端口是8080,但是如果8080端口号已经被其他进程使用了呢? 我们可以通过配置文件来修改服务器的端口号
SpringBoot在创建项目的时候,就已经帮我们创建了配置文件
我们尝试修改这个配置文件:
server.port=9090
此时显示的Tomcat启动的端口号就是9090了
Spring Boot的配置文件有以下三种格式:
(实际上,yml是yaml的简写,使用方式一样)
当程序启动的时候,Spring Boot会自动从classpath路径找到并加载三种配置文件
那么此时启动的端口号是多少??
可以看出,如果配置文件里面的内容有冲突,则以.properties为主,如果不冲突,则两个都起作用
properties是以键值对的形式配置的,key和value之间是以"="连接的.
# 配置项目端口号 server.port=9090 # 配置数据库连接信息 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?charsetEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root
使用 @value
注解来主动读取配置文件里面的内容@value
注解使用${}
的格式读取
# 配置信息 mykey.key1 = jwcb
@RestController public class PropertiesController { @Value("${mykey.key1}") private String key1; @RequestMapping("/getKey") public String getKey() { return "读到的值为" + key1; } }
访问结果为:
由于properties是以键值对的格式配置的,就会存有很很多的冗余的信息
yml是树形结构的配置文件,他的基础语法是"key:value"
key和value之间用冒号加空格的方式组成,空格不可省略
# 正确配置 key1: jwbc # 错误配置 key2:jwbc
使用yml连接数据库
spring: datasource: url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false username: root password: root
# 字符串 string: value: Hello # 布尔值 boolean: value: true # 整数 int: value: 1 # 浮点数 float: value: 1.1 # null(~代表null) null: value: ~ # 空字符串(直接什么都不跟也可以) empty: value: ''
与properties类似,使用@value
即可
访问后得到:
** 如果value加上单双引号:**
# 字符串 string: value1: Hello \n Hi value2: 'Hello \n Hi' value3: "Hello \n Hi"
@RestController public class YmlController { @Value("${string.value1}") private String str1; @Value("${string.value2}") private String str2; @Value("${string.value3}") private String str3; @RequestMapping("/getYml") public void getYml() { System.out.println(str1); System.out.println(str2); System.out.println(str3); } }
访问后结果为:
可以看出:
student: id: 1 name: zhangsan age: 18
此时读取的时候要通过@ConfigurationProperties
实现
@Component @ConfigurationProperties(prefix = "student")//prefix即前缀的意思 @Data public class Student { private int id; private String name; private int age; } @RestController public class YmlController { @Autowired private Student student; @RequestMapping("getStudent") public Student getStudent() { return student; } }
访问后得到:
就是我们配置的数据
studentlist: name: - zhangsan - lisi - wangwu
读取的时候也是通过@ConfigurationProperties
实现
@Configuration @ConfigurationProperties("studentlist") @Data public class ListConfig { private List name; } @RestController public class ListConfigController { @Autowired private ListConfig listConfig; @RequestMapping("/getList") public String getList() { return listConfig.toString(); } }
mapexample: map: k1: k11 k2: k22 k3: k33
a @Component @ConfigurationProperties("mapexample") public class MapConfig { private HashMap map; } @RestController public class MapConfigController { @Autowired private MapConfig mapConfig; @RequestMapping("/getMap") public MapConfig getMap() { return mapConfig; } }
不适合写复杂的配置文件
上一篇:段落的格式包括什么内容
下一篇:快速介绍git(Linux)