目录
2.1 在? .properties 下简单配置一个端口号来测试一下
?2.3?.properties? ?.yml ?都同时配置不同的端口号
整个项中所有重要的数据都是在配置件中配置的,如:
1)数据库的连接信息(包含户名和密码的设置);
2)项的启动端;
3)第三系统的调秘钥等信息;
4)于发现和定位问题的普通志和异常志等。
Spring Boot 配置文件主要分为两种格式
1) .properties
- .yml
将端口号改为 8085
通过改变后的端口号来访问获取的数据
在配置前,先把.properties 中配置好的端口后删除掉
在 .yml 下配置端口号为 8090
.properties 端口号配置为 8085
.yml 端口号配置为 8090
启动看项目选用哪个端口
从结果来看,项目选用的是.properties 的端口
1)理论上讲 properties 可以和 yml 起存在于个项当中,当 properties 和 yml 起存在个项中时,如果配置件中出现了同样的配置,如 properties 和 yml 中都配置了“server.port”,那 么这个时候会以 properties 中的配置为主,也就是 .properties 配置件的优先级最,但加载完 .properties 件之后,也会加载 .yml 件的配置信息
2) 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取种统的配 置件格式,这样可以更好的维护(降低故障率)
为配置件安装提示插件
IDEA 社区版安装 Spring Assistant 插件之后,就可以正常创建 Spring Boot 项了,
并且 yml 的配置 件就有提示了。但默认情况下是不持 properties 格式的志提示的
要使 .properties 有代码提示,就需要安装 Spring Tools 插件
properties 配置件是最早期的配置件格式,也是创建 Spring Boot 项默认的配置件。
.properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的, = 两边不需要空格,如下
因为代码结束是没有 ; 的,所以要注意后面是否多了一个空格
配置件中使“#”来添加注释信息。不过.properties 是不支持中文的,当我们把项目关闭后再打开就会乱码,变成????
这就需要我们进行配置,将下面的都设置为 UTF-8
当我们设置完成之后,当前文件还是不支持中文的原因是,文件已经定型了,使用的是其它编码格式,这就需要我们手动将 aplication.properies 删除掉,重新在原来的路径下创建回来,就可以支持中文了。后面再创建的也不会有乱码的情况了
如果在项中,想要主动的读取配置件中的内容,可以使 @Value 注解来实现。
@Value 注解使“${}”的格式读取,如下代码所示:
@Controller
public class UserController {
@Value("${server.port}") // 读取配置信息的端口号
private String port;//将端口号赋进去
@ResponseBody //返回一个非静态页面数据
@RequestMapping("/sayhi") //设置路由地址,全是小写,不能是大驼峰、小驼峰
public String sayHi() {
return "hello spring boot,"+ port;
}
}
获取结果
获取 .yml 中的配置信息也一样
@Controller
public class UserController {
@Value("${inyml.string}")
private String port;//将端口号赋进去
@ResponseBody //返回一个非静态页面数据
@RequestMapping("/sayhi") //设置路由地址,全是小写,不能是大驼峰、小驼峰
public String sayHi() {
return "hello spring boot,port: "+ port;
}
}
获取多个配置信息
@Controller
public class UserController {
@Value("${server.port}") // 读取配置信息的端口号
private String port;//将端口号赋进去
@Value("${inyml.string}")
private String yml;
@ResponseBody //返回一个非静态页面数据
@RequestMapping("/sayhi") //设置路由地址,全是小写,不能是大驼峰、小驼峰
public String sayHi() {
//return "hello spring boot,port: "+ port; //获取单个
return "port: "+ port + "|| yml: " + yml; //获取多个
}
}
properties 配置是以 key-value 的形式配置,所以冗余信息就会很多,如连接数据库时,都要反复写spring.datasource.
#连接数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/blog_system?characterEncoding=utf8mb4&useSSL=true
spring.datasource.username=root
spring.datasource.password=123
yml 是 YMAL 是缩写,它的全称 Yet Another Markup Language 翻译成中就是“另种标记语”。
yml 是个可读性,易于理解,来表达数据序列化的格式。它的语法和其他级语类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。
它使空符号缩进和量依赖外观的特,特别适合来表达或编辑数据结构、各种配置件等。
yml 最的优势是可以跨语,不是 Java 中可以使 golang、python 都可以使 yaml 作为配置件。
yml 是树形结构的配置件,它的基础语法是“key: value”,注意 key 和 value 之间使英冒号加空格的方式组成,其中空格不可以省略掉。
连接数据库
#连接数据库
spring:
datasoure:
ure: jdbc:mysql://127.0.0.1:3306/blog_system?characterEncoding=utf8mb4&useSSL=true
name: root
password: 123
可以对比 .properties 配置 ,简便了很多。
字符串引号的区别
在 .yml 中进行字符串配置
mystring: hello
世界
mystring2: 'hello
世界'
mystring3: "hello
世界"
@Controller
public class UserController {
@Value("${mystring}")
private String mystring;
@Value("${mystring2}")
private String mystring2;
@Value("${mystring3}")
private String mystring3;
@ResponseBody //返回一个非静态页面数据
@RequestMapping("/sayhi") //设置路由地址,全是小写,不能是大驼峰、小驼峰
public String sayHi() {
System.out.println("mystring: " + mystring);
System.out.println("mystring2: " + mystring2);
System.out.println("mystring3: " + mystring3);
return "mystring: "+ mystring + " || mystring2: " + mystring2 + " || mystring3: " + mystring3; //获取多个
}
}
看获取结果,在字符串中, 是换行,加了双引号,就会按本身表达的意思执行,如果不加或者加单引号,那么默认会将字符串中的特殊字符进行转义, →
(转义处理)
#字符串
string.value: hello
#布尔值
boolean.value: true
boolean.value2: false
#整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # 二进制
#浮点数
float.value: 3.14159
float.value1: 314159e-5 #科学计数法
#Null, ~ 代表null
null.value: ~
两种写法,举个学生例子
student:
id: 1
name: yang
age: 20
student2: {id: 1,name: yang,age: 20}
此时就不能 @Value 来读取配置中的对象了,此时要使另个注解 @ConfigurationProperties 加五大类注解之一来进行读取,目的是在启动之前就要获取完成
//Data 注解里面get、set方法都有
@Data
@ConfigurationProperties(prefix = "student") //读取配置文件中的对象
@Component //不能省略
public class Student {
private int id;
private String name;
private int age;
}
调用类
在调用类就不再是使用 @Value
而是使用 @Autowired
@Controller
public class UserController {
@Autowired
private Student student;
@ResponseBody //返回一个非静态页面数据
@RequestMapping("/sayhi") //设置路由地址,全是小写,不能是大驼峰、小驼峰
public String sayHi() {
return "studengt: " + student;
}
配置文件也可以配置list 集合,或者行内写法,如下所示
#配置集合
mydb:
name:
-mysql
-sqlserver
-db2
mydb2: {name: [mysql,sqlserver,db2]}
集合的读取和对象样,也是使 @ConfigurationProperties 来读取的,具体实现如下:
@Component
@Data
@ConfigurationProperties(prefix = "mydb")
public class ReadList {
private List name;
}
配置和读取对于关系如下
调用启动类
@Controller
public class UserController {
@Autowired
private ReadList readList;
@ResponseBody //返回一个非静态页面数据
@RequestMapping("/sayhi") //设置路由地址,全是小写,不能是大驼峰、小驼峰
public String sayHi() {
return "ReadList: " + readList.getName();//返回集合里面的name属性,因为集合里面设置了一个属性
}
}
● properties 是以 key=value 的形式配置的键值类型的配置件, yml 使的是类似 json 格式的树形配置式进配置的,yml 层级之间使换缩进的式配置,key 和 value 之间使“: ”英冒号加空格的式设置,并且空格不可省略。
● properties 为早期并且默认的配置件格式,但其配置存在定的冗余数据,使 yml 可以很好的解决数据冗余的问题。
● yml 通性更好,持更多语,如 Java、Go、Python 等,如果是云服务器开发,可以使份配置件作为 Java 和 Go 的共同配置件。
● yml 虽然可以和 properties 共存,但个项中建议使统的配置类型件。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦