SpringBoot创建和使用

news2024/11/15 12:58:15

目录

什么是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插件

8c6ce9968e3d4f1a971f0202d8f12e21.png

75146a2e71534006afef88018c52ab37.png

9a0476afd87b41b8b1dd99d3387313f0.png

011e781cd4cf4c24acbb0cc0d7fdb834.png

9f07cb2d58a64b51bd5cf0ddaee0be82.png

66215831f3b443928ee1cbd22389a202.png83b05f7c50994668b43b4b950c94e091.png 

2、项目目录介绍和运行 

Spring Boot目录介绍

fdb3e7d8b480474b9300d48f35db72de.png

一个简单的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/hihttp://localhost:8080/hi

20a94a8a1a9745a2a27ef6206549f2b6.png

Spring Boot配置文件

 1、配置文件

1.1、系统使用的配置文件(系统配置文件),如端口号的设置、连接数据库的配置

1.2、用户自定义配置文件

2、配置文件的格式

2.1、properies

server.port=8888

2.2、yml

server:
  port: 8888

e4076fef0357461188f0f61e0bc98b3f.png

说明:

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=utf8
    username: root
    password: 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;

    @PostConstruct
    public void postConstruct(){
        System.out.println("myString"+myString);
        System.out.println("myString1"+myString1);
        System.out.println("myString2"+myString2);
    }

124e1b1407c84290b98c3492a23d4407.png

4.4、yml配置对象

使用@ConfigurationProperties读取对象

#自定义对象
star:
  id: 04
  name: d.o.
  age: 29
@Component
@ConfigurationProperties("star")
@Data
public class Star {
    private int id;
    private String name;
    private int age;
}
    @Autowired
    private Star star;

    @PostConstruct
    public 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、设置不同环境的配置文件

59e8aa27455e4104b108a7f7b466b42b.png

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";
    }
}

41eebbe35e714b2da86d5642d333ba37.png

常见的日志框架说明

55dde48968d94b5f86eb55fbca9f19e1.png

3、日志级别

3.1、作用

1、快速筛选重要的日志;

2、不同环境实现不同的日志级别的设置

3.2、日志级别

f1f67968a7f147b6928f4d868d75b8d4.png

trace:微量,少许的意思,级别最低;

debug:需要调试时候的关键信息打印;

info:普通的打印信息(默认日志级别);

warn:警告,不影响使用,但需要注意的问题;

error:错误信息,级别较高的错误日志信息;

fatal:致命的,因为代码异常导致程序退出执行的事件。

日志级别规则:

当程序中设置了日志级别之后,那么程序只会打印和设置级别相同和大于当前日志级别的日志,小于当前级别的日志不会输出

3.3、日志级别的设置

#设置日志级别
logging:
  level:
    root: debug

3682ec2a32f2410b9d190dfdd2173ec2.png

 根据不同的目录设置不同的日志级别:

#设置日志级别
logging:
  level:
    root: error
    com:
      example:
        demo:
          controller: trace
          service: 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";
    }
}

21a0c080fd4743b8a1071c25c8a3dffe.png

旧项目添加新依赖框架

4aded9ec0cae4d1d8ba75c595026d58d.png

c9fdac9b816a40e3827875799c514e5d.png

be8d5551c57c428ead73b300a01febda.png 

149740b2ed4e404b80ae8323a4160d8b.png

		<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程序的运行原理:

dcd51134be2d479f906c7c60856ac0b8.png

lombok的作用

9e067b4982ed46a89996e50a74d19ff9.png 

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修饰且未初始化的字

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟机下Linux系统磁盘扩容

在VM虚拟机中&#xff0c;我们经常会选择默认磁盘大小20G&#xff0c;用着用着才发现20G不够用&#xff0c;服务启动不了&#xff0c;就很尴尬&#xff0c;让我们今天一起来学习下&#xff0c;如何在虚拟机给磁盘扩容。一&#xff1a;关闭虚拟机&#xff0c;添加硬盘背景&#…

mysql Docker容器的安装(centos版)以及修改docker默认端口、解决1251问题

文章目录一、Docker的安装以及在Docker下进行mysql的安装1、安装Docker2、上传安装包并进行安装并启动docker3、 配置Docker的镜像加速器&#xff0c;这里使用阿里云的镜像4、刷新守护进程&#xff0c;并重启docker&#xff0c;检验镜像是否配置成功5、搜索并下载mysql镜像6、导…

超分扩散模型 SR3 可以做图像去雨、去雾等恢复任务吗?

文章目录前言代码及原文链接主要的点如何进行图像恢复前言 关于扩散模型以及条件扩散模型的介绍&#xff0c;大家可以前往我的上一篇博客&#xff1a;扩散模型diffusion model用于图像恢复任务详细原理 (去雨&#xff0c;去雾等皆可)&#xff0c;附实现代码。 SR3是利用扩散模…

优化Facebook广告ROI的数据驱动方法:从投放到运营

“投放广告并不是最终的目的&#xff0c;关键在于如何最大程度地利用数据驱动的方法来提高广告投放的回报率&#xff08;ROI&#xff09;”Facebook广告是现代数字营销中最为常见和重要的广告形式之一。但是&#xff0c;要让Facebook广告真正发挥作用&#xff0c;需要通过数据驱…

Allegro如何自动添加测试点操作指导

Allegro如何自动添加测试点操作指导 在做PCB设计的时候,在一些应用场合下需要给PCB上的网络添加测试点,如下图 测试点除了可以手动逐个添加之外,Allegro还支持自动添加测试点,具体操作如下 点击Manufacture点击Testprep

PlantUML画出如女神漂亮的流程图

一&#xff1a;环境准备 1&#xff0c;本地安装好vscode 2&#xff0c;vscode安装PlantUML插件 3&#xff0c;本地安装java环境&#xff0c;我本地用的是jdk-11.0.178&#xff0c;配置好环境变量 4&#xff0c;在vscode上新建一个文件以wsd结尾&#xff0c;输入以下两行&#x…

Go语言容器之数组和切片

Go语言的容器分为值类型和引用数据类型 一、数组 1.数组的声明和初始化 (1) 数组声明的语法 var 数组变量名 [数组大小]数组类型 举例&#xff1a; package main import "fmt"func main(){//数组的声明var arr[10]int//打印数组长度fmt.Println("arr的长度为…

《Java高并发核心编程. 卷1, NIO、Netty、Redis、ZooKeeper》 读书笔记

第2章 高并发IO的底层原理 2.1 IO读写的基本原理 为了避免用户进程直接操作内核&#xff0c;保证内核安全&#xff0c;操作系统将内存&#xff08;虚拟内存&#xff09;划分为两部分&#xff1a;一部分是内核空间&#xff08;Kernel-Space&#xff09;&#xff0c;另一部分…

Ubantu docker学习笔记(二)拉取构建,属于你的容器

文章目录一、拉取启动容器二、本地镜像初解三、构建镜像3.1使用docker commit构建镜像切换阿里镜像3.2使用dockerfile构建镜像四、总个结吧这里的话&#xff0c;就详细说说小唐对于容器的配置&#xff0c;对了&#xff01;小唐参考的书籍是Linux容器云实战&#xff01;&#xf…

做更好的自己!NAS部署wiki.js现代化知识管理工具,让知识上云!

知识管理是一个永恒的课题&#xff0c;各种方法、工具层出不穷。老Q这么多年也体验过了非常多的工具&#xff0c;这几年来&#xff0c;老Q使用的工具逐步从付费迁移到开源&#xff0c;从公有云迁移到私有云。前者是为了折&#xff08;SHENG&#xff09;腾 &#xff08;QIAN&…

红黑树的介绍和实现

文章目录1. 红黑树1.1 红黑树的概念1.2 红黑树的性质1.3 红黑树节点的定义1.4 红黑树的插入1.5 红黑树的验证1.6 红黑树与AVL树的比较1. 红黑树 1.1 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以…

linux 内存泄露检测工具-Valgrind的使用

Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。安装,我是先valgrind一下发现这个的版本apt install valgrind # version 1:3.15.0-1ubuntu9.1新建一个项目与添加一个main.c编辑main.c的代码:#include <stdio.h> /*标准输入输出定义*/ #incl…

springcloud3 GateWay

一 GateWay 1.1 GateWay的作用 gateway相当于所有服务的门户&#xff0c;将客户端请求与服务端应用相分离&#xff0c;客户端请求通过gateway后由定义的路由和断言进行转发&#xff0c;路由代表需要转发请求的地址&#xff0c;断言相当于请求这些地址时所满足的条件&#xff…

Mybatis中的一级缓存和二级缓存

Mybatis作为一款强大的ORM框架&#xff0c;其中也用到了缓存来加速查询&#xff0c;今天我们一起来探讨下。 Mybatis可以使用懒加载来提高查询的效率&#xff0c;并且可以通过缓存来提高查询的效率。其中包括有一级缓存和二级缓存。 一级缓存是sqlSession级别的缓存&#xff0c…

怎么给电脑分盘与合并磁盘?教你三招

电脑只有一个C盘&#xff0c;想要再分出一个或多个分区&#xff0c;怎么办&#xff1f;电脑C盘的容量太小&#xff0c;太容易满了&#xff0c;想重新分盘&#xff0c;或者把其他盘跟它合并&#xff0c;但因为文件太多备份实在是太麻烦&#xff0c;怎么办&#xff1f;怎么给电脑…

tomcat 启动时卡住问题排查

正常项目无法访问&#xff08;Linux 服务器&#xff09;&#xff0c;启动tomcat时卡在下图位置&#xff0c;项目无法启动。 1、先检查tomcat日志、项目日志没有报错信息&#xff0c;且没再产生新的日志信息。 2、jdk、tomcat 、 jvm 配置&#xff0c;服务器环境、内存、存储没…

论文阅读:Adversarial Cross-Modal Retrieval对抗式跨模式检索

Adversarial Cross-Modal Retrieval 对抗式跨模式检索 跨模态检索研究的核心是学习一个共同的子空间&#xff0c;不同模态的数据可以直接相互比较。本文提出了一种新的对抗性跨模态检索&#xff08;ACMR&#xff09;方法&#xff0c;它在对抗性学习的基础上寻求有效的共同子空间…

JVM学习笔记九:对象实例化与直接内存

0. 前言 声明&#xff1a; 感谢尚硅谷宋红康老师的讲授。 感谢广大网友共享的笔记内容。 B站&#xff1a;https://www.bilibili.com/video/BV1PJ411n7xZ 本文的内容基本来源于宋老师的课件&#xff0c;其中有一些其他同学共享的内容&#xff0c;也有一些自己的理解内容。 1. …

一文解码:如何在人工智能热潮下实现产业“智”变

近期由ChatGPT有关人工智能的话题引发了全民热议&#xff0c;在这股子浪潮下&#xff0c;讨论最多的话题就是ChatGPT的出现会为我们带来怎样的技术变革&#xff1f;是否会改变我们目前的生产方式&#xff1f;对于未来人工智能技术的发展&#xff0c;我们该如何客观看待&#xf…

Unity Lighting -- 使用Light Probes

什么是动态物体&#xff08;dynamic objects&#xff09; 到目前为止的例子中&#xff0c;我们场景中的所有东西都是静止的。但在实际的游戏或实时应用中&#xff0c;场景中有移动的物体很正常&#xff0c;比如走动的人或动物&#xff0c;汽车&#xff0c;飞机等&#xff0c;它…