时间:2018年04月08日星期日
说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com
教学源码:无
学习源码:https://github.com/zccodere/s...
课程内容
Spring Boot介绍
环境准备
第一个Spring Boot项目
多模块项目
打包和运行
1-2 框架定位 1-3 特性介绍2.0 新特性
编程语言:Java 8及以上
底层框架:Spring Framework 5.0.0及以上
全新特性:Web Flux
为什么选择Web Flux
函数编程:Java8 Lambda
响应编程:Reactive Streams
异步编程:Servlet 3.1或Asyn NIO
第二章:简单项目 2-1 环境准备开发环境
安装JDK(https://java.oracle.com)
安装Maven(https://maven.apache.org)
安装IDEA(https://www.jetbrains.com/idea)
2-2 构建项目简单应用
编写REST程序
运行Spring Boot应用
使用Http请求工具Postman
场景说明
定义用户模型,包括属性:用户ID和名称
客户端发送POST请求,创建用户(Web MVC)
客户端发送GET请求,获取所有用户(Web Flux)
代码编写
1.创建名为boot-simple的maven工程pom如下
4.0.0 com.myimooc boot-simple 0.0.1-SNAPSHOT jar boot-simple Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent 2.0.1.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-webflux org.springframework.boot spring-boot-maven-plugin
2.完成后的项目结构如下
3.编写BootSimpleApplication类
package com.myimooc.boot.simple; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** *
* 标题: 启动类
* 描述: 简单应用
* * @author zc * @date 2018/04/08 */ @SpringBootApplication public class BootSimpleApplication { public static void main(String[] args) { SpringApplication.run(BootSimpleApplication.class, args); } }
4.编写User类
package com.myimooc.boot.simple.domain; import java.io.Serializable; /** *
* 标题: 用户模型
* 描述: POJO类
* * @author zc * @date 2018/04/08 */ public class User implements Serializable{ private static final long serialVersionUID = 7564986345486454458L; /** * 主键ID */ private Integer id; /** * 用户名称 */ private String name; @Override public String toString() { return "User{" + "id=" + id + ", name="" + name + """ + "}"; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
5.编写UserRepository类
package com.myimooc.boot.simple.repository; import com.myimooc.boot.simple.domain.User; import org.springframework.stereotype.Repository; import java.util.Collection; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicInteger; /** *
* 标题: 用户资源库
* 描述: 领域驱动模型开发
* * @author zc * @date 2018/04/08 * {@link User} {@link Repository} */ @Repository public class UserRepository { /** * 采用内存型存储方式 */ private final ConcurrentMaprepository = new ConcurrentHashMap<>(16); private final static AtomicInteger ID_GENERATOR = new AtomicInteger(); /** * 保存用户对象 * @param user {@link User} * @return 如果成功返回 true
,否则,返回false
*/ public boolean save(User user){ // ID 从 1 开始 Integer id = ID_GENERATOR.incrementAndGet(); user.setId(id); // put 方法返回 null 时表示保存成功 return repository.put(id,user) == null; } /** * 返回所有用户列表 * @return 所有用户列表 */ public CollectionfindAll(){ return repository.values(); } }
6.编写UserController类
package com.myimooc.boot.simple.controller; import com.myimooc.boot.simple.domain.User; import com.myimooc.boot.simple.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** *
* 标题: 用户 REST 接口
* 描述: RESTFul 格式
* * @author zc * @date 2018/04/08 */ @RestController public class UserController { private final UserRepository userRepository; @Autowired public UserController(UserRepository userRepository){ this.userRepository = userRepository; } @PostMapping("/person/save") public User save(@RequestParam String name){ User user = new User(); user.setName(name); if (userRepository.save(user)){ System.out.printf("用户对象: %s 保存成功 ",user); } return user; } }
7.编写RouterFunctionConfiguration类
package com.myimooc.boot.simple.config; import com.myimooc.boot.simple.domain.User; import com.myimooc.boot.simple.repository.UserRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.reactive.function.server.*; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.Collection; /** *第三章:简单使用 3-1 模块拆分
* 标题: 路由器函数配置
* 描述: 配置映射
* * @author zc * @date 2018/04/08 */ @Configuration public class RouterFunctionConfiguration { /** * Servlet 规范 * 请求接口:ServletRequest 或者 HttpServletRequest * 响应接口:ServletResponse 或者 HttpServletResponse * * Spring 5.0 重新定义了服务请求的响应接口 * 请求接口:ServerRequest * 响应接口:ServerResponse * 即可支持 Servlet 规范,也可以支持自定义,比如 Netty (Web Server) * 以本例 * 定义 GET 请求,并且放回所有的用户对象 URI:/person/find/all * Flux 是 0 - N 个对象集合 * Mono 是 0 - 1 个对象集合 * Reactive 中的 Flux 或者 Mono 是异步处理(非阻塞) * 集合对象基本上是同步处理(阻塞) * Flux 或者 Mono 都是 Publisher */ @Bean public RouterFunctionpersonFindAll(UserRepository userRepository){ Collection users = userRepository.findAll(); return RouterFunctions.route(RequestPredicates.GET("/person/find/all"), request -> { Flux userFlux = Flux.fromIterable(users); return ServerResponse.ok().body(userFlux,User.class); }); } }
多模块重构
调整父模块工程类型(packageing)
创建子模块工程(module)
子模块依赖管理(dependencyManagement)
完成后的结构如下
第四章:课程总结 4-1 课程总结主要内容
Spring Boot 介绍
Spring Boot 项目
Spring Boot 模块
Spring Boot 打包
Spring Boot 运行
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/68992.html
摘要:原文链接编程方法论响应式与代码设计实战序,来自于微信公众号次灵均阁正文内容在一月的架构和设计趋势报告中,响应式编程和函数式仍旧编列在第一季度的早期采纳者中。 原文链接:《Java编程方法论:响应式RxJava与代码设计实战》序,来自于微信公众号:次灵均阁 正文内容 在《2019 一月的InfoQ 架构和设计趋势报告》1中,响应式编程(Reactive Programming)和函数式...
摘要:在服务治理方面,相较于而言,并不成熟。遗憾的是,往往被部分开发者片面地视作服务治理的框架,而非微服务基础设施。因此,建议开发人员将或者迁移为服务。因此,下一步需要将其配置服务远程。当服务提供方启动后,下一步实现一个服务消费方。 原文链接:Dubbo Spring Cloud 重塑微服务治理,来自于微信公众号:次灵均阁 摘要 在 Java 微服务生态中,Spring Cloud1 成为...
摘要:慕课网发送邮件学习总结时间年月日星期六说明本文部分内容均来自慕课网。 慕课网《Spring Boot 发送邮件》学习总结 时间:2018年09月08日星期六 说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com 教学源码:https://github.com/ityouknow/... 学习源码:https://github.com/zccoder...
摘要:时间年月日星期日说明本文部分内容均来自慕课网。整体目录结构如下项目文件用于数据持久化配置项目配置配置视图解析器配置静态资源映射配置配置配置自定义指令配置解析器配置,类似于项目启动类新建,注册配置类,并将其和当前关联。 时间:2017年3月19日星期日说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:无个人学习源码:https://githu...
时间:2017年12月01日星期五说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com 教学源码:无 学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 课程介绍 热部署的使用场景 本地调式 线上发布 热部署的使用优点 无论本地还是线上,都适用 无需重启服务器:提高开发、调式效率、提升发布、运维效率、降低运维成本 前置...
阅读 599·2023-04-25 18:37
阅读 2751·2021-10-12 10:12
阅读 8205·2021-09-22 15:07
阅读 542·2019-08-30 15:55
阅读 3156·2019-08-30 15:44
阅读 2176·2019-08-30 15:44
阅读 1607·2019-08-30 13:03
阅读 1539·2019-08-30 12:55