SpringBoot创建和使用
目录
什么是SpringBoot
SpringBoot的优点
SpringBoot项目的创建
1、使用idea创建
2、项目目录介绍和运行
Spring Boot配置文件
1、配置文件
2、配置文件的格式
3、properties
3.1、properties基本语法
3.2、读取配置文件
3.3、缺点
4、yml
4.1、优点
4.2、yml基本语法
4.3、yml配置数据类型
4.4、yml配置对象
5、properties和yml
6、设置不同环境的配置文件
SpringBoot日志文件
1、日志的功能
2、SpringBoot使用日志
2.1、先得到日志对象
2.2、使用日志对象来打印日志(使用日志对象提供的内置方法打印)
3、日志级别
3.1、作用
3.2、日志级别
3.3、日志级别的设置
4、日志持久化
5、更简单的日志输出-lombok
5.1、添加lombok依赖
5.2、使用@slf4j注解输出日志
5.3、lombok原理
5.4、lombok的注解说明
什么是SpringBoot
Spring Boot是一种全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
SpringBoot的优点
1、快速集成框架,Spring Boot提供了启动添加依赖的功能,用于秒级集成各种框架;
2、内置运行容器,无需配置Tomcat等 Web容器,直接运行和部署程序;
3、快速部署项目,无需外部容器即可启动并运行项目;
4、可以完全抛弃繁琐的XML,使用注解和配置的方式进行开发;
5、支持更多的监控的指标,可以更好的了解项目的运行情况。
SpringBoot项目的创建
1、使用idea创建
如果使用的是idea社区版,则需要安装Spring Boot Helper插件






2、项目目录介绍和运行
Spring Boot目录介绍

一个简单的Spring Boot代码实现:
@Controller //控制器
@ResponseBody //返回的是数据,而非页面
public class TestController {@RequestMapping("/hi") //url路由注册public String sayHi(String name){//为空为null,默认值处理if (!StringUtils.hasLength(name)){name="baekhyun";}return "你好:"+name;}
}
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
运行时,先找到Spring Boot启动类(@SpringBootApplication),运行启动类中的main方法
然后在网页上访问localhost:8080/hi
http://localhost:8080/hi

Spring Boot配置文件
1、配置文件
1.1、系统使用的配置文件(系统配置文件),如端口号的设置、连接数据库的配置
1.2、用户自定义配置文件
2、配置文件的格式
2.1、properies
server.port=8888
2.2、yml
server:port: 8888

说明:
1、当一个项目中存在两种格式的配置文件,并且两个配置文件中设置了相同的配置项,但值不同时,那么properties的优先级更高
2、通常情况下一个项目中只会存在一种格式的配置文件
3、properties
3.1、properties基本语法
是以键值的形式配置的,key=value
#端口号设置
server.port=8888 #系统设置
myname=baekhyun #自定义
3.2、读取配置文件
使用@Value读
@Value("${myname}")private String myname;@RequestMapping("/getconfig")public String getConfig(){return myname;
#端口号设置
server.port=8888 #系统设置
myname=边伯贤 #自定义
3.3、缺点
配置文件中会有很多冗余的信息
#连接数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
4、yml
4.1、优点
yml是一个可读性高,写法简单、易于理解,它的语法和JSON语言类似;yml支持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等;yml支持更多的编程语言,它不止是Java中可以使用在Golang、PHP、Python、Ruby、JavaScript、Perl中。
4.2、yml基本语法
key: value(value前面有一个空格)
server:port: 6666#自定义配置项
myname2: baekhyun
配置数据库连接
#配置数据库连接
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8username: rootpassword: root
4.3、yml配置数据类型
转义字符
#字符串
myString: 你好,\n伯贤
myString1: '你好,\n伯贤'
myString2: "你好,\n伯贤"
@Value("${myString}")private String myString;@Value("${myString1}")private String myString1;@Value("${myString2}")private String myString2;@PostConstructpublic void postConstruct(){System.out.println("myString"+myString);System.out.println("myString1"+myString1);System.out.println("myString2"+myString2);}

4.4、yml配置对象
使用@ConfigurationProperties读取对象
#自定义对象
star:id: 04name: d.o.age: 29
@Component
@ConfigurationProperties("star")
@Data
public class Star {private int id;private String name;private int age;
}
@Autowiredprivate Star star;@PostConstructpublic void postConstruct(){System.out.println(star);}
5、properties和yml
5.1、properties是以key=value 的形式配置的键值类型的配置文件,而yml使用的是类似json格式的树形配置方式进行配置的,yml层级之间使用换行缩进的方式配置,key和value 之间使用“:”英文冒号加空格的方式设置,并且空格不可省略;
5.2、properties为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用yml可以很好的解决数据冗余的问题;
5.3、yml通用性更好,支持更多语言;
5.4、yml支持更多的数据类型。
6、设置不同环境的配置文件

SpringBoot日志文件
1、日志的功能
1.1、发现和定位问题;
1.2、记录用户登录日志,方便分析用户是正常登录还是恶意破解用户;
1.3、记录系统的操作日志,方便数据恢复和定位操作;
1.4、记录程序的运行时间,方便为以后优化程序提供数据支持
2、SpringBoot使用日志
2.1、先得到日志对象
private static final Logger logger= LoggerFactory.getLogger(UserController.class);
2.2、使用日志对象来打印日志(使用日志对象提供的内置方法打印)
@RequestMapping("/user")
@Controller
@ResponseBody //用来设置当前类中所有的方法返回的是数据而非页面
public class UserController {//1、得到日志对象private static final Logger logger= LoggerFactory.getLogger(UserController.class);@RequestMapping("/hi")public String sayHi(){//写日志logger.trace("我是trace");logger.debug("我是debug");logger.info("我是info");logger.warn("我是warn");logger.error("我是error");return "hi,Spring Boot";}
}

常见的日志框架说明

3、日志级别
3.1、作用
1、快速筛选重要的日志;
2、不同环境实现不同的日志级别的设置
3.2、日志级别

trace:微量,少许的意思,级别最低;
debug:需要调试时候的关键信息打印;
info:普通的打印信息(默认日志级别);
warn:警告,不影响使用,但需要注意的问题;
error:错误信息,级别较高的错误日志信息;
fatal:致命的,因为代码异常导致程序退出执行的事件。
日志级别规则:
当程序中设置了日志级别之后,那么程序只会打印和设置级别相同和大于当前日志级别的日志,小于当前级别的日志不会输出
3.3、日志级别的设置
#设置日志级别
logging:level:root: debug

根据不同的目录设置不同的日志级别:
#设置日志级别
logging:level:root: errorcom:example:demo:controller: traceservice: info
System.out.println相对于日志框架的缺点:
1、打印的信息不全(没有打印日志的时间、没有打印日志的来源);
2、不能实现日志打印的隐藏和显示;
3、System.out.println打印的日志不能被持久化
4、日志持久化
4.1、设置日志的保存目录
logging:file:path: d:\\loggings
4.2、设置日志保存文件名
logging:file:name: springlog.log
5、更简单的日志输出-lombok
由于LoggerFactory.getLogger(xxx.class)太繁琐,使用lombok来进行更简单的输出:
1、添加lombok框架支持;
2、使用@slf4j注解输出日志
5.1、添加lombok依赖
@Controller
@ResponseBody
@RequestMapping("/art")
@Slf4j
public class ArticleController {//private static final Logger logger= LoggerFactory.getLogger(ArticleController.class);@RequestMapping("/hi")public String sayHi(){log.trace("我是slf4j的trace");log.debug("我是slf4j的debug");log.info("我是slf4j的info");return "hi,art";}
}

旧项目添加新依赖框架



<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
5.2、使用@slf4j注解输出日志
@Controller
@ResponseBody
@RequestMapping("/art")
@Slf4j
public class ArticleController {//private static final Logger logger= LoggerFactory.getLogger(ArticleController.class);@RequestMapping("/hi")public String sayHi(){log.trace("我是slf4j的trace");log.debug("我是slf4j的debug");log.info("我是slf4j的info");return "hi,art";}
}
5.3、lombok原理
Lombok 的原理是通过AspectJ (一种对Java的面向切面(AOP)的编程方案)将注解转换为代码。Lombok根据注解的类型在源代码中添加或替换方法,以便在编译时将注解嵌入源代码中。
java程序的运行原理:

lombok的作用
5.4、lombok的注解说明
| 注解 | 说明 |
| @NoArgsConstructor/@AllArgsConstructor | 该类产生无参的构造方法和包含所有参数的构造方法 |
| @RequiredArgsConstructor | 将类中所有带有@NonNull注解 / org.jetbrains.annotations.NotNull注解的或者带有final修饰的成员变量生成对应的构造方法 |
| @Getter/@Setter | 用在成员变量上面或者类上面,相当于为成员变量生成对应的get和set方法,同时还可以为生成的方法指定访问修饰符,默认为public |
| @Data | 效果等同于 @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor |
| @Builder | 标注@Builder的类, 会在类内部生成一个内部类,用于生成值对象 |
| @Accessors | 要搭配@Getter与@Setter使用,用来修改默认的setter与getter方法的形式 |
| @NonNull | 属性不能为null |
| @ToString | 自动添加toString方法 |
| @EqualsAndHashCode | 自动添加equals和hashCode方法 |
| @RequiredArgsConstructor | 自动添加必须属性的构造方法,包括含@NotNull注解的字段;final修饰且未初始化的字 |
相关文章:
SpringBoot创建和使用
目录 什么是SpringBoot SpringBoot的优点 SpringBoot项目的创建 1、使用idea创建 2、项目目录介绍和运行 Spring Boot配置文件 1、配置文件 2、配置文件的格式 3、properties 3.1、properties基本语法 3.2、读取配置文件 3.3、缺点 4、yml 4.1、优点 4.2、yml基本…...
which、whereis、locate文件查找命令
Linux下查找文件的命令有which、whereis、locate和find,find命令因要遍历文件系统,导致速度较慢,而且还会影响系统性能,而且命令选项较多,就单独放一篇介绍,可参见find命令——根据路径和条件搜索指定文件_…...
Uipath Excel 自动化系列14-SaveExcelFile(保存Excel)
活动描述 SaveExcelFile 保存Excel:保存工作簿,在修改 Excel 文件的用户界面自动化活动之后使用此活动,以保存对文件的更改 SaveExcelFile As 另存Excel : 将workbook 另存为文件 SaveExcelFile As PDF :将Excel 另存为PDF文件。该三个活…...
MyBatis学习
MyBatis优点 轻量级,性能出色 SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据 开发效率稍逊于HIbernate,但是完全能够接受 补充:POJO 一:什么是POJO POJO的名称有多种,pure old…...
高速PCB设计指南系列(二)
第三篇 高速PCB设计 (一)、电子系统设计所面临的挑战 随着系统设计复杂性和集成度的大规模提高,电子系统设计师们正在从事100MHZ以上的电路设计,总线的工作频率也已经达到或者超过50MHZ,有的甚至超过100MHZ。目前…...
uniapp项目打包上线流程
平台:h5小程序app (安卓)小程序打包上线流程第一步:登录小程序公众平台第二步:hbuilderx打包小程序1.在mainfest.json文件中进行相关配置2.需要将项目中的网络请求改为https协议做为生产环境(配置项目的环境…...
垃圾回收:垃圾数据如何自动回收
有些数据被使用之后,可能就不再需要了,我们把这种数据称为垃圾数据。如果这些垃圾数据一直保存在内存中,那么内存会越用越多,所以我们需要对这些垃圾数据进行回收,以释放有限的内存空间 不同语言的垃圾回收策略 通常…...
苹果笔不用原装可以吗?Apple Pencil平替笔推荐
近些年来,不管是学习还是画画,都有不少人喜欢用ipad。而ipad的用户,也是比较重视它的实用价值,尤其是不少人都想要好好利用来进行学习记笔记。事实上,有很多替代品都能替代Apple Pencil,仅仅用于记笔记就没…...
uniCloud基础使用-杂文
获取openID云函数use strict; exports.main async (event, context) > {//event为客户端上传的参数console.log(event : , event)// jscode2session 微信小程序登录接口,获取openidconst {code} event;// 云函数中如需要请求其他http服务,则使用uni…...
vector的模拟实现
文章目录vector的模拟实现vector 结构定义1. vector的迭代器的实现2. vector四个默认成员函数2.1 构造函数2.1.1 无参2.1.2 n个val初始化2.1.3 迭代器初始化2.2 析构函数2.3 拷贝构造函数2.3.1 传统写法2.3.2 现代写法2.4 赋值重载运算符3. 管理数组相关接口3.1 reserve3.2 res…...
【无标题】compose系列教程-4.相对布局ConstraintLayout的使用
相对布局在Compose中被称为ConstraintLayout,它可以让您以相对于其他元素的方式放置元素。 以下是使用ConstraintLayout实现相对布局的示例代码: Composable fun ConstraintLayoutExample() { ConstraintLayout(modifier Modifier.fillMaxSize()…...
JavaEE简单示例——Bean管理
简单介绍: 在这一章节我们会比较详细的介绍我们在之前的测试类中以及Bean管理XML配置文件中所使用到的类和方法,以及XML中配置的属性所代表的详细含义。以及之前我们反复提到但是一直没有详细的讲解的一个东西:容器。我们可以大致的有一个概…...
react+antdpro+ts实现企业级项目四:注册页面实现及useEmotionCss的介绍
创建文件路径并注册register路由 在pages/User下创建Register文件夹并创建index.tsx文件 然后在config/routes创建register注册路由。注册完后,当在登陆页面点击注册按钮时就可以跳转到此注册页面而不会报404了。 export default [{path: /user,layout: false,rou…...
Shifu基础功能:数据采集
数据采集 我们可以通过HTTP/gRPC与deviceShifu进行通信,deviceShifu会将我们发送的请求转换成设备所支持协议的形式,并发送给设备。 当设备接收到指令之后,数据会传输到deviceShifu中,之后deviceShifu将数据作为我们请求的返回值…...
代码随想录算法训练营day54 | 动态规划之子序列 392.判断子序列 115.不同的子序列
day54392.判断子序列1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组115.不同的子序列1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺…...
MCAL知识点(三):Port与Dio配置
目录 1、概述 2、 Port的EB-tresos配置 2.1、创建模块 2.2 General配置 2.3、PortCnfigSet 2.4、Port的属性...
初识C++需要了解的一些东西(1)
目录🥇命名空间🏅存在原因🏵命名空间定义🎧命名空间的3种使用方式🏆C输入和输出🌝缺省参数🌜缺省参数概念⭐️缺省参数分类☀️函数重载🔥引用🌚引用概念🌓引…...
友元函数的使用大全
概述 我们知道,C的类具有封装和信息隐藏的特性。一般情况下,我们会封装public的成员函数供用户调用,而将成员变量设置为private或protected。但在一些比较复杂的业务情况下,可能需要去访问对象中大量的private或protected成员变量…...
QT学习笔记-QT多项目系统中如何指定各项目的编译顺序
QT学习笔记-QT多项目系统中如何指定各项目的编译顺序背景环境解决思路具体操作背景 为了更好的复用程序功能以及更优雅的管理程序,有经验的程序员通常要对程序进行分层和模块化设计。在QT/C这个工具中同样可以通过创建子项目的方式对程序进行模块化,在这…...
JWT令牌解析及刷新令牌(十一)
写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞👍👍、收藏⭐️⭐️&#…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
