SpringBoot

2023-09-22 13:20:21

SpringBoot

1.概念和介绍

Spring用于简化Java程序的开发,而SpringBoot为了简化Spring程序开发。SpringBoot是Spring脚手架。可以快速完成Java程序的创建、提高开发效率等。

SpringBoot的优点:

  1. 快速集成框架,提供启动依赖的功能,可以集成各种框架。
  2. 内置了运行容器、无需配置Tomcat等Web容器,直接运行和部署程序。
  3. 可以不使用xml,使用注解和配置的方式进行开发。
  4. 支持更多的监控指标,可以更好的了解项目的运行情况。

创建SpringBoot项目(支持在网页上创建):IDEA社区版(2021.2.3+)在创建SpringBoot之前要安装Spring Boot Helper 插件,否则没有Spring lnitializr选项。
在这里插入图片描述

SpringBoot项目结构:

在这里插入图片描述

注意:SpringBoot项目约定大于配置,不需要配置bean扫描路径,但是需要遵守其规则,例如在demo同级目录下配置Bean类,但是SpringBoot项目不会去扫码该路径,只有和DemoApplication同级目录才会去扫描。

2.配置

配置主要是将程序运行时需要的一些数据信息,放入在配置文件中。

  1. 数据库的连接信息(用户名或密码)
  2. 项目的启动端口
  3. 配置日志级别

配置文件的种类:properties和yml。

properties和yml的区别:它们可以共存,当两个不同类型的配置文件同时存在时且配置了相同的配置项时,properties的优先级更高,以propertees为准。

注意:一般不会在一个项目中使用不同的配置文件格式。

配置文件内容分类:Spring Boot内置的配置项目和用户自定义配置项。

2.1properties配置文件

#配置启动绑定的端口号
server.port=8081
#配置数据库连接链接
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/database?characterEncoding=utf8
#配置连接数据库的用户
spring.datasource.username=root
#配置连接数据的密码
spring.datasource.password=123456
#自定义配置项
key1=hello

优点:

  1. 写法简单,不易出错。

缺点:

  1. 写法冗余,不够简便和灵活

2.1yml配置文件IDEAA

语法格式(一级目录):key: value

多级目录:相对于上一级偏移两个空格。

server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/database?characterEncoding=utf8
    username: root
    password: 123456
key1: hello

优点:

  1. 写法简单、可读性高。
  2. yml支持更多的数据类型,可以简易表达清单、对象、列表等数据形式。
  3. 支持更高的编程语言。如Java、Golang、PHP、Python等等。

当设置value值时,如果值使用双引号进行包裹,如果里面的内容包含转义字符,转义字符能够正常发挥作用。

yml配置其他类型的数据:

  1. 配置对象(属性通过setter方法进行赋值,没有setter方法会报错)

    yml写法1:
    student:
      id: 10
      age: 20
      name: tom
    yml写法2:
    student: {id: 10, age: 20, name: tom}
    
    //从配置文件中读取对象并赋值到一个bean上
    @Data
    @Component
    @ConfigurationProperties(prefix = "student")
    public class Student {
        private int age;
        private Integer id;
        private String name;
    }
    
    
  2. 配置list集合:

    写法1:
    lists:
      list1:
        - A
        - B
        - C
        - D
    写法2:
    lists: {list1: [A,B,C,D]}
    @Data
    @Component
    @ConfigurationProperties(prefix = "lists")
    public class MyList1 {
        private List list1;
    }
    
    

关于配置文件中文乱码问题:通过设置当前项目和新项目的编码格式。settings->encoding。旧版本IDEA修改了编码格式,以前的乱码不会被恢复,新版本可以。

2.3读取配置文件信息

读取配置文件的信息使用@Value(“${key}”)注解,自定义和内置的配置项都能够读取到。

@RestController
public class TestController {
    @Value("${key1}")
    private String key;

    @RequestMapping("/hi")
    public String sayHi(){
        return "HI"+key;
    }
}

spring boot更多的系统配置项:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html

2.5设置不同运行环境的配置文件

多运行环境配置:

  1. application-dev.yml(开发环境使用的配置文件)
  2. application-test.yml(测试环境使用的配置文件)
  3. application-produce.yml(生产环境使用的配置文件)

dev和test/produce标识可以进行改变,但是其他地方不能改变。

通过application.yml中配置使用哪一个配置文件:

spring:
 profiles:
   active: test

3.日志

日志在程序中不可或缺,非常重要,主要目的是方便程序员定位问题和解决问题。

日志级别:在不同的运行环境,记录不同程度的问题和信息。比如在开发阶段,需要输出的日志比较多,方便我们进行调试程序和查看问题;在生产环境需要输出的日志较少,排除不必要的日志信息,节约系统资源,提高应用程序的性能;

3.1输出自定义日志信息

//获取日志对象(使用spring boot内置的日志框架Slf4j)
private static Logger log = LoggerFactory.getLogger(TestController.class);
//使用日志对象提供的方法进行日志打印,默认级别是info
log.trace("trace...");//微量级别最低
log.debug("dubug...");//调试级别
log.info("info...");//普通打印信息,默认级别
log.warn("warn...");//警告级别
log.error("error...");//错误级别

不同的日志框架,实际的实现都不尽相同,日志门面(logging facade)是一种用于封装和统一处理不同底层日志库的接口和工具。

3.2设置日志级别筛选日志内容

3.3将日志持久化

将日志写入到文件。写入日志是以追加的方式,日志文件过大会自动分割。

输出方式1:

#配置日志的名称/设置日志的保存路径
logging:
  file:
    name: demo.log

输出方式2:

logging:
  file:
    path: D:\gitee\java\springboot-demo

日志级别设置:控制输出日志的内容

#设置根日志/自定义的日志级别
logging:
  level:
    root: info
    com:
      example:
        demo: trace

可以使用lombok框架,给类添加@Slf4j,简化开发。

4.Lombok

在编译时期,动态将注解转化为对应的代码。

lombok常用注解:

注解作用
@Getter自动添加getter方法
@Setter自动添加setter方法
@ToString自动添加toString方法
@EqualsAndHashCode自动生成equals和hashCode方法
@NoArgsConstructor自动添加无参构造
@AllArgsConstructor自动添加所有属性的构造方法
@NonNull属性不能为NULL
@RequierdArgsConstructor自动添加必要的属性和构造方法final修饰+@NonNull的属性是必需的。
@Data@Getter + @Setter + @ToString +@EqualsAndHashCode+@RequiredArgsConstructor+@NoArgsConstructor
@Slf4j添加⼀个名为 log 的⽇志对象。

3.热部署

  1. 添加热部署框架支持

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    
  2. Settings开启自动编译(配置当前项目和新项目自动编译)在这里插入图片描述3. 开启运行中热部署(新版本配置)在这里插入图片描述

更多推荐

Java面试八股文宝典:初识数据结构-数组的应用扩展之HashMap

前言除了基本的数组,还有其他高级的数据结构,用于更复杂的数据存储和检索需求。其中,HashMap是Java集合框架中的一部分,用于存储键值对(key-valuepairs)。HashMap允许我们通过键来快速查找和检索值,类似于字典或关联数组的概念。HashMap在实际编程中广泛应用于各种场景,包括缓存、数据库索引、数

Kafka实时数据即席查询应用与实践

Kafka中的实时数据是以Topic的概念进行分类存储,而Topic的数据是有一定时效性的,比如保存24小时、36小时、48小时等。而在定位一些实时数据的Case时,如果没有对实时数据进行历史归档,在排查问题时,没有日志追述,会很难定位是哪个环节的问题。一、背景Kafka中的实时数据是以Topic的概念进行分类存储,而

WBS中的控制账户解释

定义控制账户(ControlAccount,简称(CA)是项目管理中用来控制成本和进度的一种方法。控制账户通常是WBS(工作分解结构)的中间层级,用来对下一级的任务进行控制和管理。特点和作用特点控制账户是对WBS中工作包或工作包集合的进一步分解。控制账户是对某一范围内工作、成本和进度的控制点。控制账户可以是项目的基本组

如何解决 503 Service Temporarily Unavailable?

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🐅🐾猫头虎建议程序员必备技术栈一览表📖:🛠️全栈技术FullStack:📚MERN/MEAN/MEVNStack|🌐Jamstack|🌍GraphQL|🔁RESTfulAPI|⚡WebSockets|🔄CI/CD|🌐Git&Versio

一篇让你使用vue-cli搭建SPA项目

目录一.Vue-CLi二.SAP项目三.为什么使用vue-cli搭建SPA项目四.SPA项目的搭建4.1.检查4.2.安装4.3.构建4.4.启动4.5.导入​编辑五.路由及嵌套使用5.1.路由5.2.嵌套好啦今天到这了,希望能帮到你!!!一.Vue-CLiVueCLI是一个基于Vue.js快速开发单页应用的脚手架工具

2023-09-21力扣每日一题

链接:2603.收集树中金币题意一个无向无根树,每个点上有Coins[T]个金币,每次你可以选择吸收离自己距离小于等于2的节点的所有金币,也可以移动到相邻格子上,求全部吸完最小的移动次数(任选起点,但吸完要返回起点)解:由于计算的是移动次数,所以你可以认为一直在吸,走到哪儿吸到哪儿计算最后移动次数很简单,由于要回到起点

【开发工具】idea 的全局搜索快捷键(Ctrl+shift+F)失效

文章目录前言1.取消输入法的快捷键(推荐使用)2.更改idea的快捷键3.热键占用总结前言当你发现在idea中看到用于全局搜索的快捷键就是Ctrl+shift+F,可是怎么按都不管用的时候,你就不要再执着于自己的操作继续狂点电脑按键了,因为可能根本就不是你的问题,而是微软的问题哟!!当我们在使用快捷键失效的时候,排除掉

24个Docker常见问题处理技巧

1.Docker迁移存储目录默认情况系统会将Docker容器存放在var/lib/docker目录下[问题起因]今天通过监控系统,发现公司其中一台服务器的磁盘快慢,随即上去看了下,发现/var/lib/docker这个目录特别大。由上述原因,我们都知道,在/var/lib/docker中存储的都是相关于容器的存储,所以

黑马头条 后端项目部署_持续集成 Jenkins配置

项目部署_持续集成1今日内容介绍1.1什么是持续集成持续集成(Continuousintegration,简称CI)指的是,频繁地(一天多次)将代码集成到主干持续集成的组成要素一个自动构建过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预。一个代码存储库,即需要版本控制软件来保障代码

【操作系统】聊聊进程间通信方式

作为操作系统软件治理的核心进程,那么进程间通信的方式就非常重要,常见的比如管道、消息队列、共享内存、信号量、信号、Socket等。本篇主要简单介绍下我们知道每个进程都有自己独立的用户空间,而内核空间是共享的。管道ps-ef|grepmysql其中的|就是一个管道符,只能进行单向传输数据。mkfifomyPipe创建一个

数字孪生技术如何提升工厂生产效率?

数字孪生技术是一项引领工业界数字化转型的创新力量。随着工业4.0时代的到来,制造业正经历着巨大的变革,数字孪生技术在这个变革中发挥了关键作用。它不仅仅是一种技术,更是一种理念,将现实世界与数字世界相结合,为工厂带来了前所未有的机遇和挑战。工厂数字化转型的目标是提高生产效率、降低成本、提升质量,并实现更灵活的生产。数字孪

热文推荐