简介SpringBoot

目录

一、简介SpringBoot

二、SpringBoot项目的创建与使用

1、创建SpringBoot项目

2、使用SpringBoot项目 

三、 SpringBoot中的配置文件

.properties配置文件

读取配置文件信息 

.yml配置文件 

读取配置文件信息 

四、SpringBoot中的日志文件 

1、日志文件简介

2、自定义日志打印

3、日志级别 

4、日志保存 

5、自定义日志文件的更简单实现 


一、简介SpringBoot

SpringBoot是在Spring的基础上引入的,引入SpringBoot就是为了简化Spring的开发,SpringBoot的开发效率相比Spring也是达到了质的提升,目前SpringBoot也是主流的框架。

SpringBoot的优点:

  • 快速集成框架;
  • 内置了运行容器,无需再配置Tomcat等Web容器,可以直接运行和部署程序;
  • 快速部署项目,无需外部容器即可启动并运行项目;
  • 使用注解和配置的方式进行开发,完全抛弃繁琐的XML;
  • 支持更多的的指标,可以更好了解项目的运行情况;

二、SpringBoot项目的创建与使用

1、创建SpringBoot项目

使用IDEA开发工具来创建SpringBoot项目,对于IDEA社区版需要下载并应用,专业版则不用。

点击file选择新建项目,之后选择如下:

 一般选择次新版较为稳定。

等项目创建好之后,启动main文件夹下的DemoApplication的main方法进行运行。 

运行结果:

2、使用SpringBoot项目 

使用SpringBoot项目的时候,需要创建的类应该位于SpringBoot项目启动类的根路径或者子路径之中,在SpringBoot中配置较少,并且约定是大于配置的。

那么我们就在SpringBoot启动类的根路径下创建一个UserController类,使用@Controller注解,并且在方法上添加@RequestMapping注解来设置路由地址,在设置路由地址时尽量都使用小写,在Windows系统中不严格区分大小写,但是在LInux系统中是严格区分大小写的。使用ResponseBody注解表明返回的是一个数据,而不是静态页面:

@Controller
public class UserController {
    @ResponseBody//返回的不是一个静态页面,而是数据
    @RequestMapping("/sayhi")//设置路由地址
    public String sayHi(){
        return "hi,world";
    }
}

在启动类启动成功之后,使用localhost:8080/sayhi来进行访问: 

三、 SpringBoot中的配置文件

SpringBoot的配置文件就是位于resource文件夹下的:

 整个项目中的重要数据信息都是在配置文件中配置的,例如数据库的连接信息,还有项目的启动端口以及第三方系统的调用密钥等信息。

配置文件的分类:

  • 系统的配置文件信息;
  • 用户自定义的配置文件信息。

配置文件通常有两种:

  • .properties文件:是SpringBoot的默认配置文件的格式,其优先级相比.yml文件较高,两者配置相同的信息时以.properties的信息优先。
  • .yml文件:属于较新的文件类型。

.properties配置文件

.properties的文件格式采用键值对的形式:

key=value

等号左右都不能使用空格,使用#来添加注释信息。

在.properties文件中可能会出现中文乱码,就需要进行如下设置:

在Settings中搜索encoding,将页面上的字符集都设置为utf-8:

设置如下的配置信息:

#数据库配置信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=abc123
#用户自定义配置信息
mystring=string
mystring2=string2

读取配置文件信息 

使用@Value("${xx}"),xx代表配置信息中的key,例如读取配置文件中的mystring并将其输出到页面上:

@Controller
public class UserController {
    @Value("${mystring}")
    public String mystring1;
    @ResponseBody//返回的不是一个静态页面,而是数据
    @RequestMapping("/sayhi")//设置路由地址
    public String sayHi(){
        return "hi,world" + "mystring:"+mystring1;
    }
}

读取配置文件的数据库用户名信息并进行打印: 

@Controller
public class User {
    @Value("${spring.datasource.username}")
    public String user;
    @PostConstruct
    public void getUser(){
        System.out.println("userName:"+user);
    }
}

.properties配置信息时存在信息冗余的问题,例如在配置数据库信息时,每个key都要加上spring.datasource。

.yml配置文件 

相较于.properties文件,.yml文件有如下优点:

  • 写法简单,可读性高;
  • 支持更多的数据类型;
  • 跨语言使用:java/gaolang等等。

.yml的配置文件的语法与json字符串较为相似,例如:

#配置数据库信息
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
    username: root
    password: abc123
#用户自定义配置信息
coding: utf-8

冒号后必须要有一个空格否则非法。  

在配置信息的值加单引号或不加引号时表示特殊含义的字符会按照普通字符处理,如果加了双引号就会按照原语义进行执行。

读取配置文件信息 

在读取基本的属性时与.properties配置文件相似,也是使用@Value("${xx}")注解例如:

@Controller
public class User {
    @Value("${coding}")
    public String coding;
    @PostConstruct
    public void getCoding(){
        System.out.println("coding:"+coding);
    }
}

在yml中也可以对对象进行配置与读取。

在yml配置对象时也可采用行内写法,例如配置User对象:

#配置对象
user:
  name: lisa
  sex: female
  age: 23
user2: { name: jake,sex: male,age: 22 }

在读取对象时使用@ConfigurationProperties(prefix = "xx") ,xx代表对象名,并且在类之前还要加上@Component注解,在创建该类时,一定不能省略getter和setter方法。

@ConfigurationProperties(prefix = "user2")
@Component
public class User {

    private String name;
    private String sex;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}

在读取对象时,加上@AutoWired注解。 

@Component
public class UserController {
    @Autowired
    private User user;
    @PostConstruct
    public void getUser(){
        System.out.println("User:"+user);
    }
}

在yml中也可以对集合进行配置与读取。 

#配置集合
person:
  name:
    - zhangsan
    - lisi
    - liuyang
person2: { name: [zhagsan,lisi,wanwu]}

在进行读取时,与对象的读取类似,也需要添加 @ConfigurationProperties注解,然后在调用时使用@AutoWired注解,在创建实体类之前加上@Data注解,可省去定义getter、setter和toString方法。

@Data
@Component
@ConfigurationProperties("person")
public class ListConfig {
    private List<String> name;

}
@Controller
public class ListController {
    @Autowired
    private ListConfig list;
    @PostConstruct
    public void getList(){
        System.out.println(list.getName());
    }
}

运行结果: 

四、SpringBoot中的日志文件 

1、日志文件简介

所谓日志文件就是记录程序运行时的信息。

日志文件是程序的重要组成部分,利用日志文件可以发现和排除信息。

我们通常在启动SpringBoot项目时,SpringBoot的logo下面就是日志信息:

 

2、自定义日志打印

首先得到日志对象,使用LoggerFactory.getLogger(类名.class)来获取日志对象:

private static Logger logger = LoggerFactory.getLogger(LoggerTest.class);

使用日志对象提供的方法进行日志打印: 

public void printLog(){
        logger.trace("i am trace");
        logger.debug("i am debug");
        logger.info("i am info");
        logger.warn("i am warn");
        logger.error("i am error");
    }

在打印日志的时候并没有将我们要输出的所有日志都进行打印,没出输出trace和debug的信息,这就与日志的级别有关系了,只能输出比当前日志级别高的日志信息,项目默认的日志级别为info。

3、日志级别 

日志文件有如下的六种级别(日志级别逐渐递增):

  • trace:少许的日志。
  • debug:调试日志。
  • info:普通信息的日志。
  • warn:警告日志。
  • error:错误日志。
  • fatal:致命的日志,该类型的日志文件是系统进行输出,不能自定义打印。

项目中默认的日志级别是info,也可以在配置文件中对输出的日志级别进行修改:

设置全局的日志级别:

#设置全局的日志级别:
logging.level.root=warn

再次启动项目:

随着日志级别增加,打印的日志信息就会减少。

也可以设置局部的日志级别:

#设置局部的日志级别:
logging.level.com.example.demo.log=trace

由于局部日志级别设置为最低的trace, 上文自定义日志文件此时就可以打印全部的日志信息。

4、日志保存 

日志的信息也可以持久化存储到磁盘上:

在配置文件中设置日志的保存路径:

#设置日志文件的保存路径
logging.file.path=D:/spring/

当再次启动项目之后就可以在磁盘的指定路径下找到日志文件:

如下为日志文件的内容:

在配置文件中设置日志的保存的文件名:

logging.file.name=D:/spring/log

项目的日志文件信息也会保存到指定文件中。

日志文件中的信息时追加输入的,当日志文件超过10kb的时候,就会自动再生成一个文件例如log1、log2依次类推。

5、自定义日志文件的更简单实现 

首先需要添加lombok到当前项目:

先需要安装一个EditStarters插件:

 

然后再pom.xml文件右击generate将Lombok的依赖添加进来

 

完成上述操作后只需要在实现类之前添加@Slf4j注解就可以直接使用log对象,不用再进行获取,例如:

 public void printLog(){
        log.trace("i am trace");
        log.debug("i am debug");
        log.info("i am info");
        log.warn("i am warn");
        log.error("i am error");
    }

lombok能直接使用log对象原因在于他已经在target目录下的字节码文件中获取了log对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/1894.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(数据结构)八大排序算法

目录一、常见排序算法二、实现1. 直接插入排序2.&#x1f31f;希尔排序3. 选择排序4.&#x1f31f;堆排序5. 冒泡排序7. &#x1f31f;快速排序7.1 其他版本的快排7.2 优化7.3 ⭐非递归7. &#x1f31f;归并排序7.1 ⭐非递归8. 计数排序三、总结1. 分析排序 (Sorting) 是计算机…

网络安全的特性

0x00 前言 网络安全的特性包括&#xff0c;机密性&#xff0c;完整性&#xff0c;可用性&#xff0c;真实性和不可否认性。详细的内容可以参考如下的内容。 Xmind资源请下载~ 0x01 机密性 机密性&#xff08;Confidentiality&#xff09; 意味着阻止未经授权的实体&#x…

【springcloud 微服务】Spring Cloud Alibaba Sentinel使用详解

目录 一、前言 二、分布式系统遇到的问题 2.1 服务可用性问题 2.1.1 单点故障 2.1.2 流量飙升 2.1.3 容错机制 2.2 服务雪崩问题 三、 服务可用性解决方案 3.1 服务容错机制 3.1.1 超时机制 3.1.2 服务限流 3.1.3 隔离 3.2 服务熔断 3.2.1 什么是服务熔断 3…

springcloud学习总结

springcloud 构建微服务项目步骤 导入依赖编写配置文件开启这个功能 Enablexxx配置类 于2023年2月24日下午17点38分开始学习于2023年3月17日晚上20点26分学完总结代码地址&#xff1a;https://gitee.com/liang-weihao/StudySpringcloud学习笔记地址&#xff1a;https://www.…

JavaEE简单示例——基于注解的AOP实现

简单介绍&#xff1a; 之前我们介绍了关于XML的面向切面的编程&#xff0c;通过配置文件的方法&#xff0c;在不修改源代码的情况下完成了对已有方法的增强 除了基于XML配置文件的方式&#xff0c;我们还可以使用更简单的&#xff0c;基于注解的方式。 每一次&#xff0c;我们…

【DBC专题】-12-不同类型报文(应用/诊断/网关/测量标定)在DBC中配置,以及在Autosar各模块间的信号数据流向

点击返回「Autosar从入门到精通-实战篇」总目录 案例背景(共18页精讲)&#xff1a;该篇博文将告诉您&#xff1a; 1)Autosar中&#xff0c;不同类型报文(App应用&#xff0c;UDS/OBD诊断&#xff0c;NM网络管理报文&#xff0c;XCP测量标定)的信号数据流向&#xff1b; 2)CAN …

【IoT】嵌入式驱动开发:IIC子系统

IIC有三种接口实现方式 三种时序对比: 图1 IIC子系统组成 图2 图3 IIC操作流程 设备端 1.i2c_get_adapter 2.i2c_new_device(相当于register设备) 3.I2c_put_adapter 驱动端 1.填充i2c_driver 2.i2c_add_driver(相当于register驱动) 3.在probe中建立访问方式 client相…

蓝桥杯刷题冲刺 | 倒计时22天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.选数异或2.特殊年份1.选数异或 题目 链接&#xff1a; 选数异或 - 蓝桥云课 (lanqiao.cn) 给定…

C++修炼之筑基期第一层——认识类与对象

文章目录&#x1f337;专栏导读&#x1f337;什么是面向对象&#xff1f;&#x1f337;类的引入&#x1f337;什么是类&#x1f337;类的定义方式&#x1f337;类的访问限定符与封装&#x1f33a;访问限定符&#x1f33a;封装&#x1f337;类的作用域&#x1f337;类的实例化&a…

基于STM32的ADC采样及各式滤波实现(HAL库,含VOFA+教程)

前言&#xff1a;本文为手把手教学ADC采样及各式滤波算法的教程&#xff0c;本教程的MCU采用STM32F103ZET6。以HAL库的ADC采样函数为基础进行教学&#xff0c;通过各式常见滤波的实验结果进行分析对比&#xff0c;搭配VOFA工具直观的展示滤波效果。ADC与滤波算法都是嵌入式较为…

今天,我终于学懂了C++中的引用

文章目录一、前言二、概念介绍三、引用的五大特性1、引用在定义时必须初始化2、一个变量可以有多个引用3、一个引用可以继续有引用4、引用一旦引用一个实体&#xff0c;再不能引用其他实体5、可以对任何类型做引用【变量、指针....】四、引用的两种使用场景1、做参数a.案例一&a…

vue大型商城系统中遇到的问题(上)

一&#xff1a;创建仓库1.领导创建git仓库&#xff08;参考————这篇文章&#xff09;&#xff0c;新手下载git2.打开cmd终端&#xff0c;将git仓库拉到本地3.进入文件目录&#xff0c;查看分支&#xff08;新手向——为什么需要创建分支&#xff0c;查看---&#xff09;4.创…

SAP 发出商品业务配置

SAP发出商品业务配置&#xff0c;即&#xff1a; 出具销售发票时结转成本 一、业务背景&#xff1a; 发出商品业务简单的理解为跨月开票&#xff0c;即出库与开票不在同一个月份。 该业务在系统内的实现方式&#xff0c;为保证成本与收入的配比&#xff0c;在出库时不计算成…

JDBC概述

1.1 数据的持久化持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;特别是企业级应用&#xff0c;数据持久化意味着将内存中的数据保存到硬盘上加以”固化”&#xff0c;而持久化的实现过程大多通过各种关系数据库来完成。…

LeetCode-复制带随机指针的链表

题目描述&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的…

蓝桥杯备赛 [day01]|python|迷宫问题|乘积尾零|平方和|切面条|付账问题

目录 0 题目类型 1 迷宫问题 图解 2 乘积尾零 算法解释 用Python处理大数 用C编码 3 平方和 解题技巧 4 切面条 算法解释 5 贪心问题——付账问题 ​编辑 思路 求解步骤 0 题目类型 (1)杂题。不需要算法和数据结构&#xff0c;只需要逻辑、推理的题目&#x…

C/C++每日一练(20230319)

目录 1. 反转链表 II &#x1f31f;&#x1f31f; 2. 解码方法 &#x1f31f;&#x1f31f; 3. 擅长编码的小k &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 …

解决win10任何程序打开链接仍然为老旧IE的顽固问题[修改默认浏览器]

文章目录一、问题与修改原因1、着手修改吧2、弯路上探索3、发现祸根二、后话文章原出处&#xff1a; https://blog.csdn.net/haigear/article/details/129344503一、问题与修改原因 我们发现&#xff0c;很多程序默认的网页打开浏览器都是IE&#xff0c;这个很是郁闷&#xff…

jira提交bug规范

一、目的 1&#xff09;方便开发人员根据bug描述快速进行定位问题原因&#xff0c;减少沟通成本。 2&#xff09;规范bug编写&#xff0c;可以提现测试团队的专业性、严谨性。 3&#xff09;可以帮助产品、项目经理及其它人员快速了解bug。 二、说明 本文档主要描述了技术产…

ThreadPool线程池源码解析

ThreadPool线程池源码解析 文章目录前言一、基本使用二、执行流程三、源码分析ThreadPoolExecutor 中重要属性ThreadPoolExecutor 内部类Workerexecute&#xff08;&#xff09;方法addWorker(command, true)方法runWorker(worker )方法getTask()方法shutdown和shutdownNow四、…