来源:慕课
spring boot2.0 新特性:
1.编程语言:Java8,Kotlin。
2. 底层框架:Spring Framwork 5.0x
3.全新特性:Web Flux
环境准备:
装配jdk:https://java.oracle.com/
装配maven:http://maven.apache.org/
装配IDEA: http://www.jetbrains.com/idea/
注意:
Maven 3.3+ require JDK 1.7 or above to execute
maven配置环境变量:
新建变量名:MAVEN_HOME 值:D:\develop\maven-3.6
在path 中添加:%MAVEN_HOME%\bin
cmd窗口验证:mvn -version
修改conf/settings
1.指定下载包存放位置:<localRepository>E:/.m2/repos</localRepository>
2.使用aliyun镜像,在mirrors标签下增加:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
IDEA,使用社区版:这里使用Community,(后来经过使用,发现还是旗舰(uitimate)版好用,推荐下载旗舰版)
旗舰版破解:https://blog.csdn.net/qq_42914528/article/details/85617901
安装IDEA完成后,在安装目录bin下,修改idea.properties
修改的原因是:将缓存的和日志的路径固定,默认是在C盘。
修改第八行:#idea.config.path=${user.home}/.IdeaIC/config
改为: idea.config.path=E:/idea/.IdeaIC/config
修改第13行,改为:idea.system.path=E:/idea/.IdeaIC/system
然后启动IDEA,
点击右下角Configure,点击settings 修改maven和jdk。
最上面输入maven,点击Maven,修改Maven home directory:为本地安装的maven路径,例如:D:\software\maven3.6.0
点击Maven下的 Importing 勾选上Sources,勾选原因:把源码下载下来。
---开始创建项目
进入网站:start.spring.io 填写好相应的信息后下载。如下图所示。
reactive web基于web flux进行开发的,同时也是基于Netty 方式。而传统的spring MVC基于servlet容器,如:jetty和tomcat
下载之后解压,然后将解压后的first-demo文件导入到IDEA中。
idea页面选择,Import Project
一直点击next ,直到finished
-----------------------------------------------------------------------
普通mvc测试代码:
domain:
package com.run.demo.domain;
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
dao层:
package com.imooc.firstdemo.repository;
@Repository
public class UserRepository {
/**
* map
*/
private final ConcurrentMap<Integer, User> repository = new ConcurrentHashMap<Integer, User>();
private final static AtomicInteger idGenerator = new AtomicInteger();
/**
* 保存用户对象
*
* @param user{@link user} 对象
* @return
*/
public boolean save(User user) {
Integer id = idGenerator.incrementAndGet();
user.setId(id);
return repository.put(id, user) == null;
}
public Collection<User> findAll(){
return repository.values();
}
}
控制层:
package com.imooc.firstdemo.controller;
@RestController
public class UserController {
public final UserRepository userRepository;
@Autowired
public UserController(UserRepository userRepository) {
this.userRepository = userRepository;
}
@GetMapping("/person/save")
public User save(String name){
User user = new User();
user.setName(name);
if( userRepository.save(user)){
System.out.printf("用户对象: %s 保存成功! \n",user);
}
return user;
}
}
运行main方法。注意main方法在包下:com.imooc.firstdemo
------------------------------------------------------------------
使用webFlux方式:
package com.imooc.firstdemo.config;
@Configuration
public class RouteFunctionConfiguration {
/**
* servlet
* 请求接口:ServletRequest 或者HttpServletRequst
* 相应接口:ServletResponse 或者HttpServletResponse
* spring 5.0 重新定义了服务请求和相应接口
* 请求接口:ServerRequest
* 相应接口:ServerResponse
* 即可支持Servlet规范,也可支持自定义,比如:Netty(Web Server)
* Mono 是0-1个对象集合
* Flux 是0-N个对象集合
* REactive 中的Flux 或者Mono 它是异步处理
* 集合对象基本是同步处理(阻塞)
* Flux 和Mono 都是Publisher 发布器。
*/
@Bean
@Autowired
public RouterFunction<ServerResponse> personFindAll(UserRepository userRepository){
return RouterFunctions.route(RequestPredicates.GET("/person/find/all"),
request ->{
Collection<User> all = userRepository.findAll();
Flux<User> userFlux = Flux.fromIterable(all);
return ServerResponse.ok().body(userFlux,User.class);
});
}
}
下载postman发送模拟请求发送。下载地址:https://www.getpostman.com
-------------------------------------------------------------------------------------------------------------------
如果使用eclipse,先集成maven,在eclipse中下载spirng boot的插件。新建项目:file->new --spring --sping project start
(具体的请百度)
上面介绍了使用图形化界面构建maven项目的方式。下面使用maven 命令行的方式构建
具体介绍:http://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html
interactiveMode=false 是非交互式(不用手动输入)
打开cmd窗口,到E盘work目录下:E:/work
E:\work> mvn archetype:generate -DinteractiveMode=false -DgroupId=com.imooc -DartifactId=first-demo -Dversion=1.0.0-SNAPSHOT
回车
然后用idea把它打开
然后copy依赖到pom.xml 中
----------------------------下面介绍多模块开发---------------
项目下新建model,分为三个模块。model,persistence,和web三个。
移动代码,在保持包名一致的情况下移动。,controller层在web,UserRepository类移动到persistence下,domain到model下。
将全局的pom文件中的build移动到web模块下的pom文件中,同时制定mainClass。如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.run.demo.DemoApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
项目jar方式打包:(模块的pom中如果不指定<packaging>则默认打成jar包
)
cmd窗口到项目的目录下:执行:mvn -Dmaven.test.skip -U clean package
打包:
E:\work\first-demo> mvn -Dmaven.test.skip -U clean package
查看jar包
E:\work\first-demo\web\target> dir
运行jar包
E:\work\first-demo\web\target> jar -jar web-0.0.1-SNAPSHOT.jar
------------------
项目war方式打包:
将web模块中增加
<packaging>war</packaging>
在web模块中src/main下面新建webapp文件夹,webapp下面建WEB-INF文件夹,WEB-INF下面建web.xml
E:\work\first-demo>mvn -Dmaven.test.skip -U clean package
E:\work\first-demo\web\target> jar -jar web-0.0.1-SNAPSHOT.war
------最后介绍springboot运行模式
1.idea方式:
2.jar/war 方式:
3。Maven 方式:
第一步:进入项目目录下
E:\work\first-demo> mvn -Dmaven.test.skip -U clean install
第二步:进入web目录
E:\work\first-demo\web> mvn spring-boot:run