当前位置: 首页 > news >正文

spring boot(学习笔记第十九课)

spring boot(学习笔记第十九课)

  • Spring boot的batch框架,以及Swagger3(OpenAPI)整合

学习内容:

  • Spring boot的batch框架
  • Spring boot的Swagger3(OpenAPI)整合

1. Spring boot batch框架

  1. Spring Batch是什么
    • Spring Batch 是一个轻量级的、完善的批处理框架,旨在帮助企业建立健壮、高效的批处理应用。
      • Spring Batch的执行流程主要包括以下几个步骤:
        • 配置JobLaunch
        • 配置Job
        • 配置Step
        • 配置ItemReader来读取数据
        • 配置ItemProcessor来处理数据
        • 配置ItemWriter来写数据
        • 配置JobRepository来管理作业状态
        • 创建并运行作业
  2. 练习使用Spring Batch
    在这里插入图片描述
    • Spring Batch Guide(可以参照最新的官方guide)
    • 加入必要的依赖(这里使用jdbc连接mysql数据库)
        <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-batch</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency>
      
    • Spring Batch会创建出自己管理的表,所以要执行sql进行创建。
      • sql都已经准备在导入的依赖中准备好了。
        spring.batch.jdbc.schema=classpath:/org/springframework/batch/core/schema-mysql.sql
        
        在这里插入图片描述
        将上面的sql拷贝出来,在msql数据库中执行。
        在这里插入图片描述
    • 配置application.properties进行数据库设置。
      本来spring.batch.jdbc.initialize-schema=always能够进行自动创建Spring Batch需要的table,但是没有成功,手动创建了。
      spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot
      spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
      spring.datasource.username=finlay
      spring.datasource.password=123456
      spring.batch.jdbc.initialize-schema=always
      spring.batch.jdbc.table-prefix=BATCH_
      spring.batch.jdbc.schema=classpath:/org/springframework/batch/core/schema-mysql.sql
      spring.batch.job.enabled=false
      
    • 准备数据文件data.csv
      注意,接下来要在后面的代码中,load csv文件的时候,(new ClassPathResource("data.csv"))ClassPath中取得,所以事先放在/resources这个ClassPath的直下。
      在这里插入图片描述
    • 准备Userentity类。
      @Data
      public class User {private Integer id;private String name;private String address;private String gender;
      }
      
    • 准备CsvBatchJobConfig类,配置Spring BatchJob
      @Configuration
      public class CsvBatchJobConfig {@BeanFlatFileItemReader<User> itemReader() {FlatFileItemReader<User> reader =new FlatFileItemReader<User>();reader.setLinesToSkip(1);reader.setResource(new ClassPathResource("data.csv"));reader.setLineMapper(new DefaultLineMapper<>() {{setLineTokenizer(new DelimitedLineTokenizer() {{setNames("id", "name", "address", "gender");setDelimiter("\t");}});setFieldSetMapper(new BeanWrapperFieldSetMapper<>() {{setTargetType(User.class);}});}});return reader;}@Beanpublic JdbcBatchItemWriter<User> jdbcBatchItemWriter(DataSource dataSource) {return new JdbcBatchItemWriterBuilder<User>().sql("insert into user(id,name,address,gender)" +"values(:id,:name,:address,:gender)").dataSource(dataSource).beanMapped().build();}@Beanpublic Step csvStep(JobRepository jobRepository,DataSourceTransactionManager transactionManager,FlatFileItemReader<User> flatFileItemReader,JdbcBatchItemWriter<User> jdbcBatchItemWriter) {SimpleStepBuilder<User, User> stepBuilder =new StepBuilder("csvStep", jobRepository).<User, User>chunk(10, transactionManager).reader(flatFileItemReader).writer(jdbcBatchItemWriter);return stepBuilder.build();}@Beanpublic Job csvJob(JobRepository jobRepository,Step csvStep) {return new JobBuilder("csvJob", jobRepository).start(csvStep).build();}
      }
      
    • Spring Boot的主类中@EnableBatchProcessing(databaseType = "mysql")
      @SpringBootApplication
      @EnableBatchProcessing(databaseType = "mysql")
      public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@BeanQueue queue(){return new ActiveMQQueue("amq");}
      }
      
    • 定义BatchController,进行调用JobLauncher
      @Controller
      public class BatchController {@Autowiredpublic JobLauncher jobLauncher;@AutowiredJob csvJob;@GetMapping("csv_import")@ResponseBodypublic String csvImport() {String result;try {jobLauncher.run(csvJob,new JobParametersBuilder().toJobParameters());result = "csv job ok";} catch (Exception e) {e.printStackTrace();result = "csv job ng";}return result;}
      }
      
    • 定义User目标表在mysql
      CREATE TABLE `USER` (`id` int(11) NOT NULL,`name` varchar(255) NOT NULL,`address` varchar(255) NOT NULL,`gender` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
      
      在这里插入图片描述
    • 启动Spring Boot应用程序,访问BatchController
      在这里插入图片描述
    • 检查mysql数据库的User表。
      在这里插入图片描述
      可以看到数据都已经导入进去了。

2. Spring boot的Swagger3整合

前后端分离,一般采用Swagger3 ,将RESTful API文档和代码结合在一起。这样在维护代码的时候,自然生成最新的RESTful API文档。
这里最新的Spring Boot不支持Swagger2,可以使用Swagger3 OpenAPI

  1. 在项目中导入Swagger3
    • 导入需要的依赖。
              <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.6.0</version></dependency>
      
    • 配置springdoc-openapi Swagger3
      @Configuration
      public class Swagger3Config {@BeanOpenAPI openAPI() {return new OpenAPI().info(new Info().title("项目接口API文档").description("项目接口API文档").version("v0.1").license(new License().name("Apache2.0").url("http://springdoc.org"))).externalDocs(new ExternalDocumentation().description("SpringShop Wiki Documentation").url("https://springshop.wiki.github.org/docs"));}
      }
      
    • application.properties中限定生成springdocpackage
      springdoc.packagesToScan=com.example.demo.controller.swagger
      
    • 定义自己项目的controller
      @RestController
      public class Swagger3Controller {@Operation(summary = "查询用户", description = "根据Id查询用户")@Parameter(in = ParameterIn.PATH, name = "id", description= "用户Id", required = true)@GetMapping("/user/{id}")public String getUserById(@PathVariable Integer id) {return "/user/" + id;}@ApiResponses({@ApiResponse(responseCode= "200", description= "删除成功"),@ApiResponse(responseCode= "500", description= "删除失败")})@Operation(summary= "删除用户", description= "通过Id删除用户")@DeleteMapping("/user/{id}")public Integer deleteUserById(@PathVariable Integer id) {return id;}@Operation(summary = "添加用户", description = "添加一个用户,传入用户名和地址")@Parameters({@Parameter(in = ParameterIn.QUERY,name = "username",description = "用户名",required = true),@Parameter(in = ParameterIn.QUERY,name = "address",description= "地址",required = true)})@PostMapping("/user")public String addUser(@RequestParam String username,@RequestParam String address) {return username + address;}@Operation(summary = "修改用户", description = "修改用户,传入用户信息")@PutMapping("/user")public String updateUser(@RequestBody User user) {return user.toString();}@Hidden@GetMapping("/ignore")public String ignoreMethod() {return "ignored method";}
      }
    访问swagger ui的链接 http://localhost:8080/swagger-ui/index.html在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • F12抓包03:设置网速(弱网测试)
  • 开放式耳机的优缺点?有什么推荐吗?四款开放式蓝牙耳机推荐
  • JavaScript网页设计案例
  • 微信小程序代码 app.json文件详细介绍
  • 前端算法面试题1--栈、队列、链表、字典与哈希表
  • Apache Pig
  • 快速便捷地解决 reCAPTCHA 的方法
  • 【Python深度学习】增量学习
  • ICMP协议(介绍,类型),ping命令原理+注意点,traceroute原理(原始套接字)
  • 精密五金零配件加工的核心技术解析
  • SQL 中 LIKE 和 REGEXP 的相同点与不同点解析
  • Verilog基础,原码,反码与补码的概念
  • 乐鑫ESP-HMI方案人机交互,设备彩屏显示新体验,启明云端乐鑫代理商
  • [Linux]:权限
  • PostgreSQL分区表原理、案例的灵活应用
  • 《剑指offer》分解让复杂问题更简单
  • 2017-08-04 前端日报
  • CSS居中完全指南——构建CSS居中决策树
  • css属性的继承、初识值、计算值、当前值、应用值
  • Gradle 5.0 正式版发布
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JavaScript HTML DOM
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Windows Containers 大冒险: 容器网络
  • 对象管理器(defineProperty)学习笔记
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 悄悄地说一个bug
  • 设计模式 开闭原则
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 栈实现走出迷宫(C++)
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Java性能优化之JVM GC(垃圾回收机制)
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • Spring Batch JSON 支持
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ## 1.3.Git命令
  • #stm32整理(一)flash读写
  • #Ubuntu(修改root信息)
  • #每天一道面试题# 什么是MySQL的回表查询
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #预处理和函数的对比以及条件编译
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (待修改)PyG安装步骤
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)甲方乙方——赵民谈找工作
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .net 获取url的方法
  • .net 怎么循环得到数组里的值_关于js数组