配置文件的格式
配置⽂件主要是为了解决硬编码带来的问题, 把可能会发⽣改变的信息, 放在⼀个集中的地⽅, 当启动某个程序时, 应⽤程序从配置⽂件中读取数据, 并加载运⾏
硬编码是将数据直接嵌⼊到程序或其他可执⾏对象的源代码中, 也就是"代码写死"
使⽤配置⽂件, 可以使程序完成⽤⼾和应⽤程序的交互, 或者应⽤程序与其他应⽤程序的交互
SpringBoot 配置文件
SpringBoot⽀持并定义了配置⽂件的格式, 也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的⽬的
项⽬的启动端⼝SpringBoot内置了Tomcat服务器, 默认端⼝号是8080, 但是⽤⼾电脑上8080端⼝号有可能就被其他应⽤程序占⽤了, 所以SpringBoot需要⽀持让⽤⼾⾃定义端⼝号
数据库连接信息为了更⽅便简单的访问数据库, 出现了⼀些持久层框架, 其实就是对JDBC进⾏了更深层次的封装.让⽤⼾通过简单⼏⾏代码就可完成数据库的访问. 但是不同的应⽤程序访问的数据库不同, 这些持久层框架就需要⽀持⽤⼾可以⾃定义配置数据库的连接信息
Tocmat 默认端⼝号是8080, 所以程序访问时的端⼝号也是8080
如果8080端⼝号已经被其他进程使⽤了——>我们可以通过配置⽂件来修改服务的端⼝号
SpringBoot 在创建项⽬时, 就已经帮我们创建了配置⽂件
运行程序
配置⽂件的格式
Spring Boot 配置⽂件有以下三种:• application.properties• application.yml• application.yam当应⽤程序启动时, Spring Boot会⾃动从classpath路径找到并加载 application.properties 和 application.yaml 或者 application.yml ⽂件也可以通过spring.config.name指定⽂件路径和名称特殊说明1. 理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中,当 .properties 和 .yml 并存时,两个配置都会加载. 如果配置⽂件内容有冲突, 则以 .properties 为主, 也就是 .properties 优先级更⾼2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置⽂件格式,这样可以更好的维护(降低故障率)
properties 配置文件说明"
properties 配置⽂件是最早期的配置⽂件格式,也是创建 SpringBoot 项⽬默认的配置⽂件
配置文件中使用 “#” 添加注释信息
properties 配置是以 key-value 的形式配置的
properties 配置⽂件中会有很多的冗余的信息
yml 配置文件说明
yml 是树形结构的配置⽂件,它的基础语法是"key: value"
key 和 value 之间使⽤英⽂冒号加空格的⽅式组成, 空格不可省略
连接数据库:yml 方式properties 方式
yml 使用进阶
yml 配置不同数据类型及 null
//字符串 string:value: Hello //布尔类型 boolean:value: true //整数 int:value: 18 //浮点数 float:value: 3.14 //Null null:value: //空字符串(一般用''表示,更直观) empty:value: ''
yml 配置读取
在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现
@Value 注解使⽤ "${}" 的格式读取
@RequestMapping("/yml") @RestController public class YmlController {@Value("${server.port}")private Integer port;@RequestMapping("/port")public String getPort() {return "从配置文件中得到:" + port;} }
字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义 @Value("${string.str1}") private String str1; @Value("${string.str2}") private String str2; @Value("${string.str3}") private String str3;@RequestMapping("/string") public String string(){System.out.println(str1);System.out.println(str2);System.out.println(str3);return "从配置文件中得到"; }
• 字符串默认不⽤加上单引号或者双引号• 单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串• 双引号不会转义字符串⾥⾯的特殊字符, 特殊字符会表⽰本⾝的含义
这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解 @ConfigurationProperties 来读取
配置 对象 @ConfigurationProperties(prefix = "userinfo") @Controller @Data public class UserInfo {private String name;private Integer age;public UserInfo(){}public UserInfo(String name){this.name = name;} }@Autowired private UserInfo userInfo; @RequestMapping("/userinfo") public String getUserInfo(){return "从配置文件中获取对象:"+userInfo; }
配置 List
@ConfigurationProperties(prefix = "list") @Controller @Data public class MyList {private List<UserInfo> userInfoList; }@Autowired private MyList list; @RequestMapping("/list") public String getList(){return "从配置文件中获取:"+list+",size:"+list.getUserInfoList().size(); }
配置 Map
@ConfigurationProperties(prefix = "map") @Controller @Data public class MyMap {private HashMap<String,String> HashMap; }@Autowired private MyMap map; @RequestMapping("/map") public String getMap(){return "从配置文件中获取:"+map+",size:"+map.getHashMap().size(); }
优点:
1. 可读性⾼,写法简单, 易于理解2. ⽀持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态3. ⽀持更多的编程语⾔, 不⽌是Java中可以使⽤, 在Golang, Python, Ruby, JavaScript中也可以使⽤
缺点:
1. 不适合写复杂的配置⽂件2. 对格式有较强的要求