欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > SpringBoot

SpringBoot

2024/10/25 18:24:08 来源:https://blog.csdn.net/sixudhjj/article/details/141966552  浏览:    关键词:SpringBoot

回顾Spring

Spring Boot概述

Spring Boot 是由 Pivotal 团队提供的在 spring 框架基础之上开发的框架,

其设计目的是用来简化应用的初始搭建以及开发过程。

Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具.

Spring Boot 以约定大于配置的核心思想,从而使开发人员不再需要定义样板化的配置。它集成了大量常用的第三方库配置(例如 Redis,Jpa RabbitMQ,Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用,通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域成为领导者。

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".

We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.

Spring Boot 你只需要“run”就可以非常轻易的构建独立的、企业级别的spring 应用。

我们为 spring 平台和第三方依赖库提供了一种固定化的使用方式,使你能非常轻松的开始开发你的应用程序。大部分 SpringBoot 应用只需要很少的配置。

Spring Boot特点

创建独立的 spring 应用程序

直接内嵌 tomcat、jetty 和 undertow

提供了固定化的“starter”配置,以简化构建配置

尽可能的自动配置 spring 和第三方库

提供产品级的功能,如:安全指标、运行状况监测和外部化配置等

绝对不会生成代码,并且不需要 XML 配置

Spring Boot的核心功能

起步依赖

起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

自动配置

Spring Boot 的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定 Spring 配置应该用哪个,不该用哪个。该过程是 Spring 自动完成的。

Spring Boot开发环境构建

创建一个普通的maven项目

在pom.xml文件下添加以下依赖

<!--依赖的父级工程-->

<parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.6.6</version>

        <relativePath/>

</parent>

<!--指定 jdk 版本-->

<properties>

        <java.version>1.8</java.version>

</properties>

<!--添加基本的 springweb 依赖-->

<dependencies>

        <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

</dependencies>

<!--打包插件-->

<build>

        <plugins>

                <plugin>

                        <groupId>org.springframework.boot</groupId>

                        <artifactId>spring-boot-maven-plugin</artifactId>

                        <version>2.6.6</version>

                </plugin>

        </plugins>

</build>

创建基本包目录,在包下创建一个启动类,如下所示:

@SpringBootApplication
public class NewsApplication {public static void main(String[] args) {SpringApplication.run(NewsApplication.class);
}
}

Springboot 集成 web 组件后,内置了 tomcat 服务器,一个 springboot 应用相当于一个独立的服务,可以使用启动类中的 main 方法启动 springboot 程序.

在线生成启动logo:

https://www.bootschool.net/ascii-art

下载存放在 resources 目录下即可.

Spring Boot配置文件

Spring Boot 使用一个全局的配置文件( 配置文件名是固定的 , 必须为application),用来存储项目中需要用到的各种配置参数.

配置文件格式有两种,一种为 properties 格式,一种 yaml 格式.

application.properties 属性文件格式,内容为键值对

server.port=8080

properties 格式比较简单,没有什么难度,在此我们以第二种 yaml 格式为例.

application.yml

yml 是 YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心.

yml 配置示例

server:

port: 8080

yaml 基本语法:

语法结构:key:空格 value;

以此来表示一对键值对(空格不能省略);

以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的;

字面量直接写在后面就可以,字符串默认不用加上双引号或者单引号;

以#作为注释符号.

案例:

user:

        name: zhangsan

        age: 20

使用@Value 注解标签将配置文件中的内容映射到类中的属性.

@Value("${user.name}")

Spring Boot数据访问管理

数据源配置

首先,为了连接数据库需要引入JDBC支持,在pom.xml中引入如下配置:

<dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-jdbc</artifactId>

</dependency>

记得添加mysql驱动依赖

在 application.yml 中配置数据源信息

spring:

   datasource:

       url: jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai

       username: root

       password: root

       driver-class-name: com.mysql.cj.jdbc.Driver

Spring Boot整合阿里数据源

导入阿里数据源jar

在yml文件中注册阿里数据库连接池

type: com.alibaba.druid.pool.DruidDataSource

initialSize: 5 初始化时建立物理连接的个数

maxActive: 20 最大连接池数量

Spring Boot注解

springboot 实现自动装配的核心仍然是使用注解标签,

@SpringBootApplication 是 springboot核心注解,其中包含@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan.

@Configuration

加入@Configuration 注解,表明这就是一个配置类。有一个 myBean()的方法并用@Bean 进行注释,返回一个 MyBean()的实例,表明这个方法是需要被Spring 进行管理的 bean。@Bean 如果不指定名称的话,默认使用 myBean名称,也就是小写的名称。

@Bean

相当于 XML 中的<bean></bean>,放在方法的上面,而不是类,意思是产生一个 bean,并交给 spring 管理。

SpringBoot 集成 mybatis

Spring Boot集成mybatis

<dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>2.1.4</version>

</dependency>

在 application.yml 中配置数据源信息

mybatis:

type-aliases-package: com.ff.cms.bean

mapper-locations: classpath:mapper/*Mapper.xml

configuration:

map-underscore-to-camel-case: true

cache-enabled: true

启动类上添加@MapperScan("接口所在的包地址")@MapperScan("接口所在的包地址")

Spring Boot集成日志功能

日志是软件应用必备的组件,是程序 debug,或是数据收集管理的重要依据,方便我们监测生产环境的变量值变化以及代码运行轨迹。

主要是为了方便我们监测生产环境的变量值变化以及代码运行轨迹等。这些记录会被输出到我们指定的位置形成文件,帮助我们分析错误以及用户请求轨迹。

日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源,尤其是在生产环境中运行的程序更加重要。

常用日志组件

slf4j(Simple Logging Facade for Java)

commons-logging

Log4JLog4J2

Logback

JUL(Java Utils Logging)

springboot 中对这些组件都提供了支持,slf4j 和 commons-logging 是日志的门面接口,它们都不是具体的日志框架,你可以指定其他主流的日志实现框架。一般首选强烈推荐使用 slf4j + logback.

日志的级别划分:从低到高:debug<info<warn<error

配置日志级别和日志文件位置

logging:

   level:

      com.ffyc.news: debug

   file:

      name: E:/log/log.log

其余信息在 logback 配置文件中在类中使用

创建 Logger 对象

private static Logger logger = LoggerFactory.getLogger(当前类名.class);

在需要的位置调用具体的日志级别方法输出

logger.debug("user account:{},user password:{}", user.getAccount(),user.getPassword());

logger.info("user account:{},user password:{}", user.getAccount(),user.getPassword());

logger.warn("user account:{},user password:{}", user.getAccount(),user.getPassword());

logger.error("user account:{},user password:{}", user.getAccount(),user.getPassword());

SpringBoot使用AOP统一打印日志

导入依赖jar

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId>

</dependency>

 定义切面通知类

@Component@Aspectpublic class LogAspect {private Logger logger = LoggerFactory.getLogger(LogAspect.class);@Before("execution(public * com.ffyc.news.web..*.*(..))")public void savelog(JoinPoint joinPoint) {ServletRequestAttributes attributes =(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();//Object[] objs =joinPoint.getArgs();获取方法参数// 记录下请求内容logger.info("HTTP_METHOD :{} ", request.getMethod());logger.info("IP : {}", request.getRemoteAddr());//客户端 ip}}

Spring Boot统一异常处理

日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一般都是利用 try ,catch 的方式处理异常或者 throw,throws 的方式抛出异常不管。这种方法对于程序员来说处理也比较麻烦,所以我们希望既能方便程序员编写代码,不用过多的自己去处理各种异常编写重复的代码又能提升用户的体验,这时候全局异常处理就显得很重要也很便捷了,是一种不错的选择。

全局异常捕获与处理

Springboot 对于异常的处理也做了不错的支持 ,它提供了一个@RestControllerAdvice 注解以及 @ExceptionHandler 注解,前者是用来开启全局的异常捕获,后者则是说明捕获哪些异常,对那些异常进行处理。

@RestControllerAdvice
public class GlobalExceptionHandler {/*** 异常处理*/@ExceptionHandler(Exception.class)public CommonResult globalException(Exception e) {CommonResult commonResult = new CommonResult(500, e.getMessage());return commonResult;}
} 

Spring Boot集成Swagger

  支持 API 自动生成同步的在线文档:使用 Swagger 后可以直接通过代码生成文档,不再需要自己手动编写接口文档了,对程序员来说非常方便,可以节约写文档的时间去学习新技术。

  提供 Web 页面在线测试 API:光有文档还不够,Swagger 生成的文档还支持在线测试。参数和格式都定好了,直接在界面上输入参数对应的值即可在线测试接口。

  本次使用 knife4j 实现接口文档生成.

  knife4j 前身是 swagger-bootstrap-ui, 取名 knife4j 是希望它能像一把匕首一样小巧,轻量,并且功能强悍!

搭建使用

导入jar

<dependency>

<groupId>com.github.xiaoymin</groupId>

<artifactId>knife4j-openapi2-spring-boot-starter</artifactId>

<version>4.4.0</version>

</dependency> 

Swagger使用的注解及其说明

@Api:用在类上,说明该类的作用,tags 类的功能进行描述.

@Api(tags="用户登录控制器")

@ApiOperation:用在方法上,用于对方法功能说明。

@ApiOperation(value="方法概述")

 

@ApiImplicitParam:用来注解来给方法入参增加说明。

 

在实体类上添加注解

@ApiModel:描述一个 Model 的信息(参数为实体类时使用)

@ApiModelProperty:描述一个 model 的属性

 

@ApiResponses:用于表示一组响应

@ApiResponse:用在@ApiResponses 中,一般用于表达响应信息

文档访问地址:http://ip:端口/doc.html

Spring Boot定时任务

项目中经常需要在一些固定的时间节点上,让程序自动去执行某些操作,这时就需要用到定时器.

实现方式 1: 使用 java 自带的 TimerTask,Timer

public static void main(String[] args) {
// 定义一个任务TimerTask timerTask = new TimerTask() {@Overridepublic void run() {System.out.println("打印当前时间:" + new Date());}};
// 计时器Timer timer = new Timer();
// 开始执行任务 (延迟 1000 毫秒执行,每 3000 毫秒执行一次)timer.schedule(timerTask, 1000, 3000);
}

方式 2:使用 spring框架中提供的定时任务

开启动时任务

在SpringBoot的启动类上声明@EnableScheduling

添加定时任务

只需使用@Scheduled 注解标注即可,Spring Boot 启动后会自动加载并执行定时任务,无需手动操作.

@Component
public class TestTask {@Scheduled(cron = "*/6 * * * * ?")private void process() {System.out.println("现在时间:" + new Date());}
}

Cron表达式

Spring Task 的实现需要使用 cron 表达式来声明执行的频率和规则,cron 表达式是由 6 位或者 7 位组成的(最后一位可以省略),每位之间以空格分隔,每位从左到右代表的含义如下:

其中 * 和 ? 号都表示匹配所有的时间

参考资料: https://cron.qqe2.com

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com