发布于2021-03-13 13:51 阅读(1035) 评论(0) 点赞(24) 收藏(5)
这回来讲一下Springboot一个常用依赖以及全局配置文件的使用
热部署只需要三步走
一.在pom.xml引入依赖(这个热部署依赖代码尽量记住,以后面试可能会考到)
<!-- 热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
二,勾选自动生成项目选项
这里打开Settings也可以采用快捷键Ctrl+Alt+s,
三.Ctrl+Alt+Shift+/ 打开Maintenance面板
这里打勾后缀为running选项
我们在进行搜索的时候可以直接在键盘输入run会自动搜索出来这个选项
这样我们的热部署就设置完成了
热部署的好处
1.不用手动重新启动启动类,更加便捷
2.对后台代码修改时,可以时刻更新,不用重新启动服务器,只需要刷新页面
其实就是在我们进行代码修改时,项目会重新再次启动一次启动类,实时更新网页
我们项目中,全局配置文件起到的作用有很多,比如
1.绑定各种数据库
2.改端口号,虚拟路径
3.进行查看开源项目中,也可以先看全局配置文件,将其中的用户信息改成本地的,比如数据库密码以及用户名
4.springboot能够自动加载配置文件
个人见解:其实yaml和yml一样格式的,后缀名不同而已
我们先来说说properties
代码例子
#修改地址
server.address=80
#修改端口号
server.port=8443
#连接数据库地址
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.config.additional-location=
spring.config.location=
spring.config.name=application
我们来试试修改端口号(我们默认是8080)
端口号已经发生改变
接下来我们试试在全局配置中设置对象类型信息
继续在properties中添加
#对象类型
person.id=1
person.name=lisi
person.hobby=play,read,sleep
person.family=father,mother
person.map.k1=v1
person.map.k2=v2
person.pet.type=dog
person.pet.name=piti
然后创建对应的一个实体类Person
我们创建一个domain文件夹用于存放实体类
在其中创建Person实体类
这里说一个小技巧:
我们使用的如果是idea开发,我们在写了对应的属性后 键盘按下Alt+Insert ,可以自动生成get跟set方法还有tosring
这里要提一点,我们这边的实体类目前不需要Consturctor
@Component //生成当前类的实体类对象存到IOC容器中
@ConfigurationProperties(prefix = "person")//将配置文件中的前缀为person的每个属性的值映射到当前类中是变量上
public class Person {
private int id;//id
private String name;//姓名
private List hobby;//爱好
private String[] family;//家庭成员
private Map map;
private Pet pet;//宠物
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List getHobby() {
return hobby;
}
public void setHobby(List hobby) {
this.hobby = hobby;
}
public String[] getFamily() {
return family;
}
public void setFamily(String[] family) {
this.family = family;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public Pet getPet() {
return pet;
}
public void setPet(Pet pet) {
this.pet = pet;
}
@Override
public String toString() {
return "person{" +
"id=" + id +
", name='" + name + '\'' +
", hobby=" + hobby +
", family=" + Arrays.toString(family) +
", map=" + map +
", pet=" + pet +
'}';
}
}
@Component //生成当前类的实体类对象存到IOC容器中
@ConfigurationProperties(prefix = “person”)//将配置文件中的前缀为person的每个属性的值映射到当前类中是变量上
这两个注解要注意一定要加,不然项目扫描不到这个类就起不了作用
接下来在测试类中进行控制台打印
@Autowired
private Person person;
public void contextLoads() {
System.out.println(person.toString());
}
控制台可以看到该数据说明成功了
有的人会发现pet=null
是因为pet也得创建对应的实体类
public class Pet {
private String type;//宠物类型
private String name;//宠物名字
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Pet{" +
"type='" + type + '\'' +
", name='" + name + '\'' +
'}';
}
}
刚刚我们是使用@ConfigurationProperties注入属性的方式
现在说一下第二种方式
直接获取关键配置文件里面的定义属性
可以不用实体类的set方法注入
直接在测试方法中调用
@Value("${person.name}")
private String name;
@Test
public void contextLoads() {
System.out.println(name);}
记住注解格式
@Value("${person.name}") 记得要双引号 要对应全局配置文件中所写的
对比
对比点 | @ConfigurationProperties | @Value |
---|---|---|
底层框架 | Spring Boot | Spring |
功能 | 批量注入配置文件中的属性 | 单个注入 |
SpEL表达式 | 不支持 | 支持 |
属性setXX()方法 | 需要 | 不需要 |
复杂类型属性注入 | 支持 | 不支持 |
松散绑定 | 支持 | 不支持 |
JSR303数据校验 | 支持 | 不支持 |
总结一句话:
@ConfigurationProperties适合批量复杂属性注入
@Value适合简单属性注入
接下来讲一下yaml
这里需要介绍一下yaml
1.YAML文件格式是Spring Boot支持的一种JSON超集文件格式。
2.相较于传统的Properties配置文件,YAML文件以数据为核心,是一种更为直观且容易被电脑识别的数据序列化格式。
3.yaml的数据更加结构化,更少混淆,具有分层配置数据
4.application.yaml文件的工作原理和application.properties一样。
yaml的格式为
#key:(空格)value
server:
port: 8081
path: /hello
我们创建yaml直接在全局配置文件夹中右键
文件名为application.yaml
一定要application,不然识别不出来yaml
当我们看见这个图标,说明创建成功了
然后打开yaml文件开始试试
#当value值为普通数据类型值的配置
server:
port: 8082
servlet:
context-path: /hello
记得要层级分层,注意格式
试一下运行启动类
这里会发现,明明写的端口号是8082为什么会变成8081
这是因为,当全局配置文件中有多个配置文件时,执行顺序不同,且先执行的会被后者覆盖
加载顺序为yml-yaml-properties
如果同时有两个核心配置文件,后面的会覆盖前面的
这时候我们去先把propertis的端口号设置去掉重新运行启动类
这样就成功运行了
接下来说一下yaml跟properties属性书写不同的地方
这里有两种写法
#当value为数组或单列集合
hobby:
- play
- read
- sleep
#方式2
#hobby1: [play,read,sleep]
#当value值为map的时候
map:
k1:v1
k2:v2
#方式2
#map1: {k1:v1,k2:v2}
#对实体类对象person进行属性配置
people:
name: wahaha
person:
id: 3
name: lisi
hobby: [sing,read,sleep]
family: [father,mother]
map: {k1:v1,k2:v2}
pet: {type: cat,name: tom}
空格!空格!记得打空格冒号后面空格
如果不确定,你可以看一下字体是否有加粗了,如果格式正确是加粗的
记得写的属性别重复
如果出现控制台打印为null,记得看一下属性格式对不对
注意,配置map与实体类属性,都用{ A:A1 ,B:B1}
@PropertySource(自己配置核心配置)
这里涉及到的注解
@Configuration//指定当前类为配置类 也可以使用@component注解代替
@PropertySource("classpath:test.properties")//指定自定义配置文件的位置和名称
@EnableConfigurationProperties(Myproperties.class)//开启配置类的属性注入功能
@ConfigurationProperties(prefix = "test")
@PropertySource:指定自定义配置文件的位置和名称
@Configuration :自定义配置类,Spring容器组件
首先,创建一个自定义全局配置文件-new一个file
在配置文件中我们试一下定义属性
#对实体类对象MyProperties进行属性配置
test.id=100
test.name=test
比如考试考了一百分
接下来创建实体类Myproperties
@Configuration//指定当前类为配置类 也可以使用@component注解代替
@PropertySource("classpath:test.properties")//指定自定义配置文件的位置和名称
@EnableConfigurationProperties(Myproperties.class)//开启配置类的属性注入功能
@ConfigurationProperties(prefix = "test")
public class Myproperties {
private int id;
private String name;
@Override
public String toString() {
return "Myproperties{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
再在测试类进行测试
@Autowired
private Myproperties myproperties;
@Test
public void contextLoads() {
System.out.println(myproperties);
即为创建成功
1.解决打印乱码问题
2.启动类记得放在根目录外面,这样才能扫描到子级目录以及同级目录的类
3.关键注解记得有
原文链接:https://blog.csdn.net/loler15/article/details/114680268
作者:忽明忽灭
链接:http://www.javaheidong.com/blog/article/114170/1465f1e6ae3c72d571cf/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!