一、配置端口号
通过配置文件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=UTC
username: root
password: 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: 1
name: zhangsan
age: 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 {
@Autowired
private 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 {
@Autowired
DBType dbType;
@RequestMapping("/readList")
public String readList() {
return dbType.toString();
}
}
访问 127.0.0.1:8080/readList 结果如下:
4.2.4 配置Map
配置文件也可以配置map
maptypes:
map:
key1: value1
key2: value2
key3: 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 {
@Autowired
MapConfig 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的对比图如下: