Spring Boot笔记(二)——定时任务、swagger2、模板引擎Thymeleaf

  • 1、springboot整合Quarz定时任务
  • 1.1、为什么使用定时任务?
  • 1.2、如何使用定时任务
  • 2、springboot整合swagger2
  • 2.1、为什么使用swagger2
  • 2.2、怎么使用swagger2
  • 3、thymeleaf 模板引擎
  • 3.1、为什么使用thymeleaf模板引擎

1、springboot整合Quarz定时任务

1.1、为什么使用定时任务?

比如: 使用支付,如果在指定的时间没有支付则取消订单。 阿里云OSS文件上传,上传图片【比如图书的图片,图书信息删除了,修改图书的图片时,原来的图片。大量的多余图片,都在oss中存放。】。 定时删除无效图片【服务器最闲的时候03左右】。

在线Cron表达式生成器 链接: https://cron.qqe2.com/

1.2、如何使用定时任务

先在pom.xml配置文件中引入依赖

<!--springboot整合Quartz 定时任务的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

创建一个定时任务类

@Component
public class OrderQuarz {
    @Scheduled(cron = "0/2 * * * * ? ")//定时码
    public void orderCheck(){
        System.out.println("两秒后自动输出.....");
    }
}

在主启动类上开启定时任务的注解

@SpringBootApplication
@EnableScheduling //开启Quarz注解的驱动
public class SpringbootQuarzApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootQuarzApplication.class, args);
    }
}

2、springboot整合swagger2

2.1、为什么使用swagger2

  1. 因为前后端分离,后端人员需要为前端提高一个接口文档。如果后端开发人员自己写接口文档,那么非常复杂。而swagger2就是一个实时在线的文档。

2.2、怎么使用swagger2

引入依赖

<!--引入swagger2依赖-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.9.1.RELEASE</version>
        </dependency>
        <!--好看的ui-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>

创建一个swagger2的配置类

@Configuration
public class SwaggerConfig {

    //获取swagger2的实例对象Docket
    @Bean
    public Docket getDocket() {
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .groupName("QY129").apiInfo(apiInfo()).select() //设置哪些包下的类生产api接口文档
                .apis(RequestHandlerSelectors.basePackage("com.aaa.controller")) //设置哪些请求路径生产接口文档
                .paths(PathSelectors.any())
                .build();
        return docket;
    }

开启swagger2的注解

@SpringBootApplication
@MapperScan(basePackages = {"com.aaa.dao"})//为dao包下的所有接口生产实现类
@EnableSwagger2//开启swagger2的注解    <-------
//@EnableScheduling//开启Quarz注解的驱动
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

api文档链接: http://你的IP地址:端口号/swagger-ui.html

springboot test 添加header springboot header参数_spring

界面优化版的api文档链接: http://你的IP地址:端口号/doc.html

springboot test 添加header springboot header参数_swagger2_02

Swagger中常见的注解:

swagger2使用说明:
         @Api:用在类上,说明该类的作用
         @ApiOperation:用在方法上,说明方法的作用
         @ApiImplicitParams:用在方法上包含一组参数说明
         @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
         paramType:参数放在哪个地方
         	header-->请求参数的获取:@RequestHeader
            query-->请求参数的获取:@RequestParam
            path(用于restful接口)-->请求参数的获取:@PathVariable
            body(不常用)
            form(不常用)
            name:参数名
            dataType:参数类型
            required:参数是否必须传
            value:参数的意思
            defaultValue:参数的默认值
       @ApiModel:描述一个Model的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,
      请求参数无法使用@ApiImplicitParam注解进行描述的时候)
       @ApiModelProperty:描述一个model的属性
  1. 实体类(@ApiModelProperty注解:描述一个model的属性)
  2. controller层(@ApiOperation注释:用在方法上,说明方法的作用)api文档界面效果 这时我们加上api注解后,发现更新了很多说明、注释。

3、thymeleaf 模板引擎

3.1、为什么使用thymeleaf模板引擎

默认springboot内置的tomcat不支持jsp模板引擎。而且jsp模板引擎效率太低。 jsp–>servlet—>class—>解析。

引入依赖

<!--thymeleaf模板引擎-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

网页使用thymeleaf标签

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:fmt="">
<head>
    <meta charset="UTF-8">
    <title>员工信息页面</title>
</head>
<body>
<h1>员工信息表</h1>
<span th:text="${name}"></span>
<table width="600" border="1">
    <tr>
        <td>员工ID</td>
        <td>员工姓名</td>
        <td>性别</td>
        <td>所属部门</td>
        <td>日期</td>
    </tr>
    <tr th:each="emps : ${emps}">
        <td th:text="${emps.emp_id}"></td>
        <td th:text="${emps.emp_name}"></td>
        <td th:text="${emps.gender=='M'?'男':'女'}"></td>
        <td th:text="${emps.d_Id==1?'开发部':'测试部'}"></td>
        //日期格式格式化
        <td th:text="${#dates.format(emps.createdate,'yyyy-MM-dd HH:mm:ss')}"></td>
    </tr>
</table>
</body>
</html>