一、配置端口号
通过配置文件application.properties配置修改端口号
修改 application.properties 文件
#端口号修改成 9090
server.port=9090
运行结果,观察日志
二、配置文件格式
Spring Boot 配置⽂件有以下三种:
• application.properties
• application.yml
• application.yaml
其中yml为yaml的简写,实际开发中出现频率最高
应⽤程序启动时,SpringBoot会⾃动从classpath路径找到并加载 application.properties 和 application.yaml 或者 application.yml ⽂件.
说明:
1.理论上讲·properties和·yml可以并存在于一个项目中,当·properties和·yml
并存时,两个配置都会加载.如果配置文件内容有冲突,则以properties为主,也就是
properties优先级更高.
2.虽然理论上来讲·properties可以和·ymL共存,但实际的业务当中,我们通常会采取一种
统一的配置文件格式,这样可以更好的维护(降低故障率)
三、properties配置文件说明
properties 配置⽂件是最早期的配置⽂件格式,也是创建SpringBoot项⽬默认的配置⽂件
3.1 properties 基本语法
properties 是以键值的形式配置的,key和value之间是以"="连接的
#端口号修改成 9090
server.port=9090
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
pring.datasource.password=123456
3.2 读取配置⽂件
如果在项目中,想要主动的读取配置文件中的内容,可以使用@Value注解来实现。
@Value注解使用”${}“的格式读取,如下代码所示:
application.properties的文件配置:
book.key1=key1
在postman中运行结果:
3.3 properties 缺点分析
properties 配置是以key-value的形式配置的,properties配置文件中会有很多的冗余的信息 如下图:
四、yml配置文件的说明
4.1 yml基本语法
yml是树形结构的配置文件,它的基础语法是"key:value"
key和value之间使⽤英文冒号加空格的⽅式组成,空格不可省略
使用yml连接数据库
yml使用示例:
#端口号
server:port: 9092#连接数据库
spring:datasource:url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: 123456
yml和properties连接数据库的配置对比
yml:
properties:
4.2 yml使用进阶
4.2.1 yml配置不同数据类型及null
#字符串
string.value: hello world#布尔值
boolean.value1: true
boolean.value2: false#整数
int.value: 10#浮点数
float.value: 3.14159#Null
null.value: ~#"" 空字符串
# 直接后⾯什么都不加就可以了,但这种⽅式不直观,更多的表⽰是使⽤引号括起来
empty.value: ""
4.2.1.1 yml配置读取
yml读取配置的⽅式和properties相同,使⽤@Value 注解即可,实现代码如下:
yml配置:
@RestController
public class PropertiesController {@Value("${int.value}")private int intValue;@RequestMapping("/readInt")public String readAll() {return "intValue:" + this.intValue ;}
}
在postman中测试 访问127.0.0.1:9090/readInt
4.2.1.2 注意事项:value值加单双引号
字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义。
在application.yml中配置如下信息:
String:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."
在ReadYml中实现如下代码:
@RestController
public class ReadYml {@Value("${String.str1}")private String str1;@Value("${String.str2}")private String str2;@Value("${String.str3}")private String str3;@RequestMapping("/yml")public String readYml() {System.out.println("str1 : " + str1);System.out.println("str2 : " + str2);System.out.println("str3 : " + str3);return "yml";}
}
运行结果如下:
4.2.2 配置对象
在yml中配置对象:
student:id: 1name: zhangsanage: 18
此时要使用另⼀个注解 @ConfigurationProperties 来读取
package com.example.demo.model;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "student")
@Data
public class Student {private Integer id;private String name;private Integer age;
}
调用类(StudentController)的实现如下:
package com.example.demo.controller;import com.example.demo.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class StudentController {@Autowiredprivate Student student;@RequestMapping("/readStudent")public String readStudent() {return student.toString();}
}
访问 http://127.0.0.1:8080/readStudent:结果如下:
4.2.3 配置集合
配置文件也可以配置list集合:
dbtypes:name:-- mysql-- sqlserver-- db
集合的读取和对象⼀样,也是使用 @ConfigurationProperties 来读取
package com.example.demo.model;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Map;@Component
@ConfigurationProperties(prefix = "dbtypes")
@Data
public class DBType {private List<String> name;private Map map;
}
访问集合的实现如下:
@RestController
public class ReadYml {@AutowiredDBType dbType;@RequestMapping("/readList")public String readList() {return dbType.toString();}
}
访问 127.0.0.1:8080/readList 结果如下:
4.2.4 配置Map
配置文件也可以配置map
maptypes:map:key1: value1key2: value2key3: value3
Map的读取和对象⼀样,也是使用@ConfigurationProperties 来读取
package com.example.demo.model;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.HashMap;@Component
@ConfigurationProperties(prefix = "maptypes")
@Data
public class MapConfig {private HashMap<String, String> map;
}
打印类的实现:
package com.example.demo.controller;import com.example.demo.model.DBType;
import com.example.demo.model.MapConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ReadYml {@AutowiredMapConfig mapConfig;@RequestMapping("/readMap")public String readMap() {return mapConfig.toString();}
}
访问:127.0.0.1:8080/readMap 返回结果如下:
五、使用yml的好处
优点:
1.可读性高,写法简单,易于理解
2. 支持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态.
3. 支持更多的编程语言,不止是Java中可以使用,在Golang,Python,Ruby,JavaScript中也可以使用
缺点:
1、不适合写复杂的配置文件
xml 和 properties的对比图如下: