springboot整合-swagger2-定时器-quartz

1.springboot整合swagger2

1.1 swagger2 简介

        Swagger是为了解决企业中接口(api)中定义统一标准规范的文档生成工具。方便各大后端小基友的懒问题,但是写注解也是妥妥的麻烦,但是如果版本迭代快或者人员的流动性大,会导致很多问题。所以很多企业中都会有统一的规范文档,来定义接口标准。

1.2 swagger2的 优点

        swagger2的优点自然不言而喻,它最大的优点是能实时同步api与文档,减轻开发人员的工作量与保证接口文档与后端代码的一致性,另外可以不需第三方工具在线测试。通过 Swagger 页面,我们可以直接进行接口调用,降低了项目开发的调试成本

1.3 使用接口文档swagger2

1.2.1 导入依赖

 <!--swagger2依赖-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.9.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.7.8</version>
        </dependency>

1.2.2 创建一个配置类-swagger2

/**
 * @program: mybatis_plus
 * @author: ♥丁新华
 * @create: 2023-04-12 19:25
 **/

@Configuration
@EnableSwagger2//开启swagger注解驱动
public class SwaggerConfig {
    @Bean //把方法返回的数据对象 交于spring容器管理
    public Docket docket(){
        Docket docket = new Docket(DocumentationType.SWAGGER_2).groupName("QY163")
                .apiInfo(getInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.dxh.controller")) //只为com.dxh.controller包下的类生成接口文档
                .build();
        return docket;
    }

    private ApiInfo getInfo(){
        Contact DEFAULT_CONTACT = new Contact("邢傲林", "http://www.baidu.com", "110@qq.com");
        ApiInfo apiInfo=new ApiInfo("班级学生表CRUD", "班级学生表CRUD", "1.1.0", "http://www.jd.com",
                DEFAULT_CONTACT, "AAA科技", "http://www.aaa.com", new ArrayList<VendorExtension> ());
        return apiInfo;
    }
}

1.2.3  访问swagger在线文档

(1) http://ip:port/swagger-ui.html路径

(2) http://ip:port/doc.html 路径

(建议使用第二种方法)

 1.4 使用接口文档swagger2

  1.4.1 swagger中常用的注解

@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiModelProperty:用对象接收参数时,描述对象的一个字段
@ApiImplicitParam:一个请求参数
@ApiImplicitParams:多个请求参数
 

2.springboot 整合定时器-quartz

什么是quartz

  QuartzJava定时任务领域一个非常优秀的框架,由OpenSymphony(一个开源组织)开发,这个框架进行了优良地解耦设计,整个模块可以分为三大部分:

  • Job:顾名思义,指待定时执行的具体工作内容;
  • Trigger:触发器,指定运行参数,包括运行次数、运行开始时间和技术时间、运行时长等;
  • Scheduler:调度器,将JobTrigger组装起来,使定时任务被真正执行;

quartz 特点

        具有强大的调度功能,与Spring容易集成,形成灵活的调度功能。
调度环境的持久化机制:可以保存并恢复调度现场,即使系统因为故障关闭,任务调度现场的数据并不会丢失。
        灵活的应用方式:可以灵活的定义触发器调度时间表,并可对触发器与任务进行关联映射(通过Name和Group形式为一个的JobKey),分布式与集群能力

在线Cron表达式生成器Cron表达式在线生成器,方便的在线生成各类Cron表达式,并可以将Cron表达式的可视化双向解析和生成.https://www.pppet.net/

2.1 引入quartz依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

2.2 配置定时器任务

@Component
public class QuarzConfig {

    @Resource

    private StudentMapper studentMapper;

    //定时器
    @Scheduled(cron = "0/5 * * * * ?")
    public void test(){
        Student student = studentMapper.selectById (2);
        System.out.println (student);
        System.out.println ("********");
        System.out.println ("*******");
        System.out.println ("*****");
        System.out.println ("***");
    }
}

2.3 开启定时器注解驱动

@SpringBootApplication
@MapperScan(basePackages ="com.dxh.mapper")
//@ComponentScan  人为指定扫描的包
@EnableScheduling //开启定时器
public class Spring03Application {

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

}

2.4 测试

 

  3. springboot整合mp整合swagger2完成crud

3.1 导入依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
        <!--mybatis和springboot整合的依赖 启动依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.21</version>
        </dependency>

        <!--swagger2依赖-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.9.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.7.8</version>
        </dependency>

        <!--定时器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

    </dependencies>

3.2 创建实体类

/**
* 学生表
* @TableName student
*/

@ApiModel(value = "学生表") //表 明 该 类 为 实 体 类
@TableName(value = "student") //关联表 以防 表明和实体类名不一致
public class Student {

    /**
    * 学生ID
    */
    @ApiModelProperty("学生ID")// 实 体 类 的 属 性 名
    @TableId(type = IdType.AUTO) //表 明 主 键 自 增
    private Integer sid;
    /**
    * 学生姓名
    */
    @ApiModelProperty("学生姓名")
    private String sname;
    /**
    * 年龄
    */
    @ApiModelProperty("年龄")
    private Integer age;
    /**
    * 班级名
    */
    @ApiModelProperty("班级名")
    private Integer cid;

    @TableField(exist = false) //表示这个列在表中不存在
    private Class01 c1;

    public Student() {
    }

    public Student(String sname, Integer age, Integer cid) {
        this.sname = sname;
        this.age = age;
        this.cid = cid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    private Class01 getC1() {
        return c1;
    }

    private void setC1(Class01 c1) {
        this.c1 = c1;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", age=" + age +
                ", cid=" + cid +
                ", c1=" + c1 +
                '}';
    }
}
/**
* 班级表
* @TableName class01
*/
@ApiModel(value = "班级表")//表明该类为 实体类
@TableName(value = "class01")
public class Class01 {

    /**
    * 班级ID
    */
    @ApiModelProperty("班级ID") //实体类的属性名
    private Integer cid;
    /**
    * 班级名
    */
    @ApiModelProperty("班级名")
    private String cname;

    /**
    * 班级ID
    */
    private void setCid(Integer cid){
    this.cid = cid;
    }

    /**
    * 班级名
    */
    private void setCname(String cname){
    this.cname = cname;
    }


    /**
    * 班级ID
    */
    private Integer getCid(){
    return this.cid;
    }

    /**
    * 班级名
    */
    private String getCname(){
    return this.cname;
    }

    @Override
    public String toString() {
        return "Class01{" +
                "cid=" + cid +
                ", cname='" + cname + '\'' +
                '}';
    }
}

3.2 创建对应mapper映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dxh.mapper.StudentMapper">

    <resultMap id="BaseResultMap" type="com.dxh.pojo.entity.Student">
            <id property="sid" column="sid" jdbcType="INTEGER"/>
            <result property="sname" column="sname" jdbcType="VARCHAR"/>
            <result property="age" column="age" jdbcType="INTEGER"/>
            <result property="cid" column="cid" jdbcType="INTEGER"/>
        <association property="c1" javaType="com.dxh.pojo.entity.Class01" autoMapping="true">
            <id property="cid" column="cid"/>
        </association>
    </resultMap>

    <sql id="Base_Column_List">
        sid,sname,age,
        s.cid,c.cname
    </sql>
    <select id="findByPage" resultMap="BaseResultMap">
        select <include refid="Base_Column_List"/> from student s join class01 c on s.cid = c.cid
        <if test="ew != null and ew.sqlSegment != ''">
            <where>
                and ${ew.sqlSegment}
            </where>
        </if>
    </select>
</mapper>

3.3 创建 service 服务层

/**
 * @program: mybatis_plus
 * @author: ♥丁新华
 * @create: 2023-04-12 19:28
 **/
public interface StudentService extends IService<Student> {

    /**
     * 分 页
     * @param current
     * @param pageSize
     * @param studentVo
     * @return
     */
    public Result findByPage(Integer current, Integer pageSize, StudentVo studentVo);

    /**
     * 增加数据
     * @return
     */

    public Result InsertStu(Student s);

    /**
     * 删除数据
     */

    public Result deleteBySid(Integer sid);


    /**
     * 修改数据
     */

    public Result updateStu(Student s);

    /**
     * 查询数据
     */

    public Result queryAll();

    /**
     * 根据ID查询数据
     */

    public Result queryById(Integer sid);
}

3.4  创建 impl 实现 层

/**
 * @program: mybatis_plus
 * @author: ♥丁新华
 * @create: 2023-04-12 19:40
 **/

@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student>
    implements StudentService{
    @Resource
    private StudentMapper studentMapper;

    /**
     * 分 页 查 询
     * @param current
     * @param pageSize
     * @param studentVo
     * @return
     */
    @Override
    public Result findByPage(Integer current, Integer pageSize, StudentVo studentVo) {
        //Mybatis-plus使用iPage分页
        IPage<Student> iPage = new Page<> (current,pageSize);
        // 条件构造器
        QueryWrapper<Student> wrapper = new QueryWrapper<> ();
        //判 断
        if (StringUtils.hasText (studentVo.getSname ())){
            wrapper.like ("sname",studentVo.getSname ());

        }if (Objects.nonNull (studentVo.getMinAge ())){
            wrapper.gt ("age",studentVo.getMinAge ());

        }if (Objects.nonNull (studentVo.getMaxAge ())){
            wrapper.lt ("age",studentVo.getMaxAge ());
        }

        IPage<Student> byPage = studentMapper.findByPage (iPage, wrapper);

        return new Result (200,"成功",byPage);

    }

    /**
     * 增 加 数 据
     * @param s
     * @return
     */

    @Override
    public Result InsertStu(Student s) {

        //Student student = new Student ("ss",15,2);

        int insert = studentMapper.insert (new Student (s.getSname (),s.getAge (),s.getCid ()));

        return new Result (200,"添加学生信息成功",insert);
    }

    /**
     * 根 据 ID 删 除
     * @param sid
     * @return
     */
    @Override
    public Result deleteBySid(Integer sid) {
        int i = studentMapper.deleteById (sid);
        System.out.println (i);
        return new Result (200,"删除学生信息成功",i);
    }

    /**
     * 修 改 数 据
     * @param s
     * @return
     */
    @Override
    public Result updateStu(Student s) {

        int i = studentMapper.updateById (s);

        return new Result (200,"修改学生信息成功",i);
    }

    /**
     * 查 询 全 部
     * @return
     */
    @Override
    public Result queryAll() {
        QueryWrapper<Student> wrapper = new QueryWrapper<> ();
        List<Student> students = studentMapper.selectList (wrapper);
        for (Student student : students) {
            System.out.println (student);
        }

        return new Result (200,"查询学生信息成功",students);
    }

    /**
     * 根 据 ID 查 询
     * @param sid
     * @return
     */

    @Override
    public Result queryById(Integer sid) {
        Student student = studentMapper.selectById (sid);

        return new Result (200,"查询学生ID成功",student);
    }


}

3.5  创建 控制层

/**
 * @program: spring03
 * @author: ♥丁新华
 * @create: 2023-04-12 20:01
 **/
@Api(tags = "学生接口")
@RestController
@RequestMapping
public class StudentController {
    @Autowired
    private StudentService studentService;

    @PostMapping("list/{current}/{pageSize}")
    //接口方法加以说明
    @ApiOperation (value = "根据条件查询学生信息")

    public Result findByPage(
            @ApiParam(value = "当前页面",name = "current",required = true,defaultValue = "1")
            //映射url绑定的占位符
            @PathVariable Integer current,
            @ApiParam(value = "每页显示条数",name = "pageSize",required = true,defaultValue = "3")
            @PathVariable Integer pageSize,
            //用来接收前端传递给后端的json字符串中的数据
            @RequestBody StudentVo studentVo

    ){
        return studentService.findByPage (current, pageSize, studentVo);
    }


    /**
     * 增加数据
     */
    @ApiOperation (value = "添加学生信息")
    @PostMapping("InsertStu")
    public Result InsertStu(@RequestBody Student s){
        return studentService.InsertStu (s);
    }

    /**
     * 删除数据
     */
    @ApiOperation (value = "删除学生信息")
    @DeleteMapping("deleteBySid/{sid}")
    public Result deleteBySid(@PathVariable Integer sid){
        return studentService.deleteBySid (sid);
    }

    /**
     * 修改数据
     */
    @ApiOperation (value = "修改学生信息")
    @PutMapping("updateStu")
    public Result updateStu(@RequestBody Student s){
        return studentService.updateStu (s);
    }

    /**
     * 查询所有数据
     */
    @ApiOperation (value = "查询所有学生信息")
    @GetMapping("queryAll")
    public Result queryAll(){
        return studentService.queryAll ();
    }


    /**
     * 根据ID查询数据
     */
    @ApiOperation (value = "根据ID查询所有学生信息")
    @GetMapping("queryById/{sid}")
    public Result queryById(@PathVariable Integer sid){

        return studentService.queryById (sid);
    }


}

3.6 测 试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,需要在 `pom.xml` 文件中添加以下依赖: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> ``` 接着,在 Spring Boot 的启动类上添加 `@EnableSwagger2WebFlux` 注解: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import springfox.documentation.swagger2.annotations.EnableSwagger2WebFlux; @SpringBootApplication @EnableSwagger2WebFlux public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 最后,在你的控制器类上添加 `@Api` 和 `@ApiOperation` 注解进行 API 文档的描述: ```java import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/hello") @Api(tags = "HelloController", description = "示例控制器") public class HelloController { @GetMapping("/") @ApiOperation(value = "hello", notes = "示例接口") public String hello() { return "Hello, Swagger!"; } } ``` 然后,启动应用程序并访问 `http://localhost:<port>/swagger-ui/index.html` 即可查看生成的 API 文档。 ### 回答2: Spring Boot整合Springfox Swagger 3.0 Springfox Swagger是一个用于为Spring Boot应用程序生成文档的框架。在Spring Boot中使用Springfox Swagger 3.0,可以方便地为API生成可视化的接口文档,并提供简化的API调试和测试功能。下面是整合Springfox Swagger 3.0的步骤: 首先,需要在Spring Boot项目的pom.xml文件中添加Springfox Swagger 3.0的依赖: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> ``` 然后,在Spring Boot应用程序的启动类上添加`@EnableOpenApi`注解,以启用Springfox Swagger 3.0的功能: ```java @SpringBootApplication @EnableOpenApi public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 接下来,需要在项目中添加一个配置类,其中配置Swagger的相关信息: ```java @Configuration public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.OAS_30) .select() .apis(RequestHandlerSelectors.basePackage("com.example.controller")) .paths(PathSelectors.any()) .build(); } } ``` 上述配置中,通过`apis`方法指定需要生成文档的Controller所在的包,通过`paths`方法指定需要生成文档的接口路径。可以根据需要进行自定义配置。 最后,在浏览器中访问http://localhost:8080/swagger-ui/index.html,可以看到生成的接口文档页面。在该页面上,可以查看API的详细信息,进行测试和调试。 整合Springfox Swagger 3.0是一个方便快捷的方式来创建和管理API文档。它提供了友好的UI界面和强大的功能,可以大大简化API文档的维护工作,并提高团队合作效率。 ### 回答3: Spring Boot整合Springfox Swagger 3.0的步骤如下: 1. 添加相关依赖:在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> ``` 2. 创建Swagger配置类:创建一个配置类,并使用`@Configuration`注解进行标记。在该类中,可以配置Swagger的相关信息,如标题、描述、版本等。 ```java @Configuration @EnableSwagger2 //启用Swagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("API文档标题") .description("API文档描述") .version("1.0.0") .build(); } } ``` 3. 配置Swagger的URL路径:在`application.properties`或`application.yml`文件中,添加以下配置项,指定Swagger的URL路径: ```yaml springfox.documentation.swagger-ui.path=/swagger-ui.html ``` 4. 启动项目:启动Spring Boot项目,访问http://localhost:8080/swagger-ui.html,即可查看生成的API文档。 以上是Spring Boot整合Springfox Swagger 3.0的基本步骤,通过配置Swagger相关信息,可以实现自动生成API文档,并提供可视化的界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值