1、Spring Boot 的角色
基于Spring Framework,同时是Spring Cloud基础,承上启下
Spring Framework是一种JavaEE的框架
SpringBoot是一种快速构建Spring的应用
SpringCloud是构建SpringBoot的分布式环境,云应用
2、Spring Boot2.0新特性
编程语言:java 8+,kotlin
底层框架:Spring Framework 5.0
全新特性:web Flux(对Spring MVC 的补充),兼容SpringMVC,声明式函数式编程
为什么Web Flux
函数编程:Java 8 Lambda
响应编程:Reactive Streams
一步编程:Servlet3.1 或 Asyc NIO
3、环境准备
jdk、maven、idea
谷歌浏览器 postman:https://www.getpostman.com/
构建应用:http://start.spring.io/
Reactive Web
4、内存存储类
/**
* 用户仓储
* {@link User} {@link org.springframework.stereotype.Repository}
*/
public class UserRepository {
/**
* 采用内存型存储方式 -> map
* 高并发用concurrentMap
*/
private ConcurrentMap<Integer,User> repository = new ConcurrentHashMap<>();
/**
* 自增长id
*/
private final static AtomicInteger idGenerator = new AtomicInteger();
/**
* 保存用户对象
* @param user {@link User} 对象
* @return 如果保存成功,返回<code>true</code>
* 否则,返回<code>false</code>
*/
public boolean save(User user){
//ID从1开始
Integer id = idGenerator.incrementAndGet();
user.setId(id);
//保存成功返回 null
return repository.put(id,user) == null;
}
}
使用
@PostMapping("/person/save")
public User save(@RequestParam String name){
User user = new User();
user.setName(name);
if(userRepository.save(user)){
System.out.printf("用户对象:%s 保存成功\n",user);
}
return user;
}
5、启动的说明
spring-boot-starter-webflux:默认启动容器变成了Netty,spring-boot-starter-web默认容器是tomcat
6、异步处理请求 web Flux
@Configuration
public class RouterFunctionConfiguration {
/**
* Servlet
* 请求接口:SerletRequest 或者 HttpServletRequest
* 响应接口:ServletResponse 或者 HTTPServletResponse
* Spring 5.0 重新定义了服务器的请求和响应接口
* 请求接口:SerletRequest
* 响应接口:ServletResponse
* 既可以支持 Servlet 规范,也可以支持自定义,比如 Netty(web Server)
* 以本例:
* 定义 Get 请求,并且返回所有的用户对象 URL :/person/findAll
* flux 是 0 到 n 个对象集合
* Mono 是 0 到 1 个对象集合
* Reactive中 flux或Mono是异步处理(非阻塞)
* 之前的集合基本是同步处理(阻塞)
* Flux 或者 Mono 都是发布器
*/
@Bean
@Autowired
public RouterFunction<ServerResponse> personFindAll(UserRepository userRepository){
return RouterFunctions.route(RequestPredicates.GET("/person/find/all"),
request -> {
//返回所有对象
Collection<User> users = userRepository.findAll();
Flux<User> userFlux = Flux.fromIterable(users);
return ServerResponse.ok().body(userFlux, User.class);
});
}
}
7、maven构建项目
archetype:generate
参数 DinteractiveMode (true or false)交互模式,非交互式
例子:mvn archetype:genrate -DinteractiveMode=false -DgroupId=com.imooc -DartifactId=firstApp-by-maven -Dversion=1.0.0-SNAPSHOT
8、多模块Spring Boot项目
调整主(父)工程类型(<packaging>)
<!-- 修改成pom -->
<packaging>pom</packaging>
创建子模块工程(<module>):new Module
模块层:model
持久层:persistence
表示层:web
包移动注意包名相同
web层依赖persistence
persistence层依赖model
<dependencies>
<dependency>
<groupId>com.imooc</groupId>
<version>0.0.1-SNAPSHOT</version>
<artifactId>model</artifactId>
</dependency>
</dependencies>
9、项目打包
JAR包
mvn -Dmaven.test.skip -u clean package
mvn clean install -DskipTests
注意: <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 告诉父项目主类路径 -->
<mainClass>com.imooc.demo.FristDemoApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
WAR包
指定Main-Class
10、运行模式
a、IDEA
b、JAR/WRA
c、MAVEN 插件:mvn spring-boot:run 在有mainClass的配置项目
父项目路径下先执行:mvn -Dmaven.test.skip -u clean install,安装父项目到仓库中
11、总结
慕课网Spring Boot 2.0深度实践-初遇Spring Boot 笔记
最新推荐文章于 2024-07-21 22:35:09 发布