程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

初学Springboot(二)

发布于2021-03-13 13:51     阅读(896)     评论(0)     点赞(24)     收藏(5)


这回来讲一下Springboot一个常用依赖以及全局配置文件的使用

本次讲到的点:

1.热部署

2.全局配置文件(properties,yaml,yml)

2.1执行优先级以及格式

3.自定义全局配置文件

热部署

热部署只需要三步走
一.在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.对后台代码修改时,可以时刻更新,不用重新启动服务器,只需要刷新页面
其实就是在我们进行代码修改时,项目会重新再次启动一次启动类,实时更新网页

全局配置文件properties以及yaml以及yml

我们项目中,全局配置文件起到的作用有很多,比如
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注入属性的方式
现在说一下第二种方式

@Value注入属性(单个简易)

直接获取关键配置文件里面的定义属性

可以不用实体类的set方法注入

直接在测试方法中调用

@Value("${person.name}")
    private  String name;
    @Test
    public void contextLoads() {
    System.out.println(name);}

在这里插入图片描述
记住注解格式
@Value("${person.name}") 记得要双引号 要对应全局配置文件中所写的

对比

对比点@ConfigurationProperties@Value
底层框架Spring BootSpring
功能批量注入配置文件中的属性单个注入
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}

实体类同上面propertis的实体类一样

自定义properties文件

@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黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

24 0
收藏该文
已收藏

评论内容:(最多支持255个字符)