Spring WebFlux是啥
Spring WebFlux是Spring FrameWork 5.0新增的Web框架,特点如下:
- 非阻塞式;
- 不依赖Servlet;
- 多种部署方式,例如:jetty,tomcat,netty等
源码
完整源码:https://coding.net/u/pruidong/p/SpringBoot2WebFluxDemo/git
这个例子,使用了Spring Boot + Spring WebFlux + Thymeleaf + H2 ,通过Maven构建整个项目,在pom.xml中引用了还未正式发布的Spring Boot 2.0,所以部分依赖需要从Spring的Maven仓库中获取,速度可能较慢(2017/10/25,后期会直接更新pom.xml,但不会更新文章).
使用方式如下:
首先是pom.xml ,Maven构建文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>xyz.suancaiyu</groupId> <artifactId>SpringBoot2WebFluxDemo</artifactId> <version>1.0-SNAPSHOT</version> <!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.BUILD-SNAPSHOT</version> </parent> <!-- Add typical dependencies for a web application --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> </dependencies> <!-- Add Spring repositories --> <!-- (you don't need this if you are using a .RELEASE version) --> <repositories> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories> <!-- Package as an executable jar --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Dao操作类:
package xyz.suancaiyu.dao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; import xyz.suancaiyu.pojo.Book; import java.sql.ResultSet; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.UUID; /** * 数据库操作. * * @author puruidong * @version 2017/10/21 1.0 */ @Repository public class BookDao { @Autowired private JdbcTemplate jdbcTemplate; /** * 保存数据. * * @param todo 要增加的项目名称. */ public void save(String todo) { jdbcTemplate.update("INSERT INTO Book(id,todo,createdate) VALUES(?,?,?)", new Object[]{UUID.randomUUID(), todo, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))}); } /** * 项目列表 * * @return 数据列表. */ public List<Book> list() { return jdbcTemplate.query(" select id,todo,createdate from Book ", (RowMapper) (ResultSet resultSet, int i) -> { Book book = new Book(resultSet.getString("id"), resultSet.getString("todo"), resultSet.getString("createdate")); return book; }); } /** * 删除数据. * * @param id * @return */ public int delete(String id) { return jdbcTemplate.update(" delete from Book where id=? ", id); } }
其余文件,可以参考:项目地址