慕课网Spring Boot 2.0深度实践-初遇Spring Boot 笔记

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、总结

猜你喜欢

转载自blog.csdn.net/qq_20367813/article/details/79144492