Spring的配置文件,如何配置端口号,,properties,yml获取配置项等方法,外观模式及其优缺点,日志代表的信息

目录

一、回顾

二.如何配置端口号

配置文件,最重要的目的:解决硬编码问题-代码写死

1.常见配置项

yml获取配置项

多次获取配置项(yml会对我们的参数情况,进行的一定类型转换比如数字10,转换成"10")

[null:使用key后面+-(破折号)](#null:使用key后面+-(破折号))

空字符串:key后面之间空着,但是不易读,推荐使用单引号或者双引号扩起来

转义字符

赋值给对象

yml优缺点

三、日志代表的信息:

外观模式(门面模式))

对于设计模式的理解

日志的级别

日志如何去使用


一、回顾

二.如何配置端口号

配置文件,最重要的目的:解决硬编码问题-代码写死

1.常见配置项

使用阶段

Spring配置文件,有三种格式

事实上是:SpringBoot只支持三个文件
1.application.properties
2.application.yaml
3.application.yml  
二和三一致,是一样的,只是后缀名字不一样

1.properties

2.yaml (2和3是一个)

3.yml(yaml,缩写,后缀名字不同而已,现在yml更多)

如果项目中,同时存在properties和yml,properties的优先级更高

企业开发中,通常只使用其中一个文件

配置文件格式

properties(这个key-value的键值对格式):

server.port=8080

#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test....省略

如何获取配置项:

//properties里面写这个东西
demo.key1=hello.properties

package com.example.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PropertiesController {
//使用@Value注解
    @Value("${demo.key1}")
    private String key1;
    @RequestMapping("readKey")
    public String readKey(){
        return "读取到的配置项key1"+key1;
    }
}
复制代码
去掉$符号之后,他就不取出来配置项,而是把配置项当成字符串打印了

yml文件格式(把.换成冒号+换行,注意端口号那里有空格,⚠️格式要求比较严格,空格不可以省略)

复制代码
server:
  port: 8081

要从左边开始写,就像是废物python

 #数据库的相关配置
spring:
  datasource:
    url: jdbc...
    password: root
    username: root

yml获取配置项

复制代码
demo:
  key1: hello,yml
@RestController
public class YmlController {
    @Value("${demo.key1}")
    public String key1;
    @RequestMapping("/readYml")
    public  String readYml(){
        return key1;
    }
}
多次获取配置项(yml会对我们的参数情况,进行的一定类型转换比如数字10,转换成"10")
null:使用key后面+-(破折号)
空字符串:key后面之间空着,但是不易读,推荐使用单引号或者双引号扩起来
转义字符
言语可能有些迷惑:慢慢品尝
单引号会对特殊字符进行转义,双引号不会进行转义
原因:\n本身的含义是换行
使用单引号时,内容就表示成了\n,而不是换行,所以认为是转义
使用双引号时候,\n表示成了换行,也就是\n本来的含义(换句话说,他本来就是个女的,你镜子照之后,他还是个女的,你没有那个转义功能)
赋值给对象
package com.example.demo;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
//下面这个的含义是说从配置文件中获取这个student给这个对象赋值
@ConfigurationProperties(prefix = "student")
@Data
public class Student {
    private Integer id;
    private  String name;
    private Integer age;
}
//这个是使用的时候记得要加Autowired
 //@Autowired
   // public Student student;

赋值给集合:

假如不加空格,那么这些会变成一个整体,一起赋值给name,长度变成1了

yml优缺点

优点:可读性高,写法简单,易于理解

可支持更多的数据类型,可以简单的表达对象,数组,List,Map等集合之类的

支持更多的编程语言

缺点:不适合写复杂的配置文件(格式要求严格)
与之带来的功能:

热部署:

写的代码,立即被加载,生效了

热加载:

如果代码发生了变动,就会重新部署

如何实现验证码

客户端和服务端都可以生产

1.后端引入依赖

三、日志代表的信息:

左边是时间,INFO表示级别,3353表示当前的PID​​​​​​​

main(进程),com....(打印日志的类),(后面那些是日志内容)

spring帮我们集成了很多的框架

下面是日志的写法

package com.example.captcha1.demos.web;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;

@RestController
public class LoggerController {
    //从日志工厂(是一个工厂模式),拿到类一个日志对象,要传一个日志名称
    private  static Logger logger= LoggerFactory.getLogger(LoggerController.class);
//这就是相当于起了个进程名字,但是推荐不要这么起名字,最好是要去找到当前进程。
//    private  static Logger logger= LoggerFactory.getLogger("lcl是大王");
    @PostConstruct
    public void print(){
        System.out.println("打印日志");
        logger.info("__没毛病");
    }
}

选择当前选中的org

打印日志和正常print的区别,一个是正常的打印,另一个是如同spring的信息一样

一般日志的进程名建议是起名为当前类

外观模式(门面模式)

用来定义一个统一的接口,用来访问子系统中的一群接口,主要特征是定义一个高层接口,让子系统更容易去使用(像是我们之前写的图书管理系统),就像是家里的灯,要是有一个总开关,就能一个位置打开所有你想开的灯这种。

优点:

减少了系统的相互依赖,实现了客户端和子系统的耦合关系,这使得子系统的变化不会影响到调用它的客户端。

提高了灵活性,简化了客户端对于子系统的使用难度,客户端无需关心子系统的具体实现方式,而只需要和门面对象交互即可

提高了安全性,可以灵活设定访问权限,不在门面对象中开通方法,就无法访问。

对于设计模式的理解

设计模式是为了解决生活中一些常见的问题的解决方案,就如同象棋中的别人选择当头炮,你选择上马一样,更像是一种套路,模版,可以让我们对身边的问题解决起来更方便。

日志冲突:版本bug,或者是不同框架的bug问题,引入第三方框架还要去不得不去维护多套框架(假如没有日志门面log4j,log4j本身是有他的一套规范,这样我们通过log4j就可以去放心调用)

日志当然也会影响一些性能,所以对于日志,要去适当使用。

日志的级别

日志如何去使用

package com.example.captcha1.demos.web;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;

@RestController
public class LoggerController {
    //从日志工厂,拿到类一个日志对象,要传一个日志名称
    private  static Logger logger= LoggerFactory.getLogger("lcl是大王");
    @PostConstruct
    public void print(){
        System.out.println("打印日志");
        logger.info("__没毛病");
        logger.error("我是傻子");
        logger.warn("你是傻子");
        logger.info("我们都不聪明");
        logger.debug("你才傻傻都");
        logger.trace("要不要去放烟花呀");
    }
}

我们可以看到他只显示了INFO以上的,但是INFO以下的没有显示,因为spring的基础设定是INFO普通事件,但是我们该怎么让这样显示呢?我们可以去配置。让他配置成初始debug级别

application.yml(配置文件)

logging:
  level:
    root: debug

这也就使最基础级别变成了debug

​​​​​​​

相关推荐
paterWang4 分钟前
小程序-基于java+SpringBoot+Vue的美食推荐系统设计与实现
java·spring boot·小程序
《源码好优多》5 分钟前
基于Java Springboot餐饮美食分享平台
java·spring boot·美食
说书客啊8 分钟前
计算机毕业设计 | SpringBoot+vue美食推荐商城 食品零食购物平台(附源码+论文)
java·spring boot·node.js·vue·毕业设计·课程设计·美食
小宋102117 分钟前
实现java执行kettle并传参数
java·开发语言·etl
小学鸡!17 分钟前
Bean的生命周期详解保姆级教程,结合spring boot和spring.xml两种方式讲解,5/7/10大小阶段详细分析
xml·spring boot·spring
打你个大西瓜️40 分钟前
单片机知识总结(完整)
数据库·单片机·mongodb
贝克街的天才40 分钟前
据说在代码里拼接查询条件不够优雅?Magic-1.0.2 发布
java·后端·开源
Vae_Mars1 小时前
QT-installEventFilter
数据库·qt
日拱一卒无有尽, 功不唐捐终入海1 小时前
html转成图片
spring·maven
神仙别闹1 小时前
基于Java实现的(GUI)华容道小游戏
java·gui