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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Spring的配置文件,如何配置端口号,,properties,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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `<appender>` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `<logger>` 和 `<root>` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
338 1
|
4月前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
238 0
|
3月前
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
119 23
|
3月前
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
256 5
|
3月前
|
Java Spring 容器
两种Spring Boot 项目启动自动执行方法的实现方式
在Spring Boot项目启动后执行特定代码的实际应用场景中,可通过实现`ApplicationRunner`或`CommandLineRunner`接口完成初始化操作,如系统常量或配置加载。两者均支持通过`@Order`注解控制执行顺序,值越小优先级越高。区别在于参数接收方式:`CommandLineRunner`使用字符串数组,而`ApplicationRunner`采用`ApplicationArguments`对象。注意,`@Order`仅影响Bean执行顺序,不影响加载顺序。
133 2
|
5月前
|
人工智能 自然语言处理 Java
Spring 集成 DeepSeek 的 3大方法(史上最全)
DeepSeek 的 API 接口和 OpenAI 是兼容的。我们可以自定义 http client,按照 OpenAI 的rest 接口格式,去访问 DeepSeek。自定义 Client 集成DeepSeek ,可以通过以下步骤实现。步骤 1:准备工作访问 DeepSeek 的开发者平台,注册并获取 API 密钥。DeepSeek 提供了与 OpenAI 兼容的 API 端点(例如),确保你已获取正确的 API 地址。
Spring 集成 DeepSeek 的 3大方法(史上最全)
|
4月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
4月前
|
数据库连接 测试技术 Windows
【YashanDB知识库】windows配置ODBC跟踪日志, 使用日志定位问题
【YashanDB知识库】windows配置ODBC跟踪日志, 使用日志定位问题
|
7月前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
253 73
|
7月前
|
SQL
南大通用GBase 8a配置gcware日志等级,减少日志输出,节省磁盘IO
南大通用GBase 8a配置gcware日志等级,减少日志输出,节省磁盘IO

热门文章

最新文章