zoukankan      html  css  js  c++  java
  • SpringBoot23 分模块开发

    1 开发环境说明

      JDK:1.8

      MAVEN:3.5

      IDEA:2017.2.5

      SpringBoot:2.0.3.RELEASE

    2 创建SpringBoot项目

      2.1 项目信息

      2.2 添加项目依赖

      2.3 修改pom文件

        添加lombok依赖、修改devtools、修改plugin

    <?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>cn.xiangxu</groupId>
        <artifactId>module-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>module-demo</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.3.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.0</version>
                <scope>provided</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <fork>true</fork>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    View Code

    3 逻辑功能实现

      实现简单的增删改查,利用map来模拟内存数据库

      3.1 包结构

      3.2 model层

    package cn.xiangxu.moduledemo.model;
    
    import lombok.Data;
    
    /**
     * @author 王杨帅
     * @create 2018-07-26 22:16
     * @desc 学生实体类
     **/
    @Data
    public class Student {
        private Integer id;
        private String name;
    }
    View Code

      3.3 repository层

    package cn.xiangxu.moduledemo.repository;
    
    import cn.xiangxu.moduledemo.model.Student;
    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 王杨帅
     * @create 2018-07-26 22:17
     * @desc 学生持久层
     **/
    @Repository
    public class StudentRepository {
    
        /**
         * 利用Map模拟内存数据库
         */
        private final ConcurrentMap<Integer, Student> repository =new ConcurrentHashMap<>();
    
        /**
         * 主键发生器
         */
        private final static AtomicInteger idGenerator = new AtomicInteger();
    
        /**
         * 新增
         * @param student
         * @return
         */
        public Student save(Student student) {
            // 产生ID
            Integer id = idGenerator.incrementAndGet();
            student.setId(id);
            student.setName(student.getName() + id);
            repository.put(id, student);
            return student;
        }
    
        /**
         * 获取列表
         * @return
         */
        public Collection<Student> findAll() {
            return repository.values();
        }
    
    
    
    }
    View Code

      3.4 web层

    package cn.xiangxu.moduledemo.controller;
    
    import cn.xiangxu.moduledemo.model.Student;
    import cn.xiangxu.moduledemo.repository.StudentRepository;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.Collection;
    
    /**
     * @author 王杨帅
     * @create 2018-07-26 22:23
     * @desc 学生控制层
     **/
    @RestController
    @RequestMapping(value = "/student")
    @Slf4j
    public class StudentController {
    
        @Autowired
        private StudentRepository studentRepository;
    
        @GetMapping
        public Collection<Student> findAll() {
            return studentRepository.findAll();
        }
    
        @PostMapping
        public Student save(@RequestBody Student student) {
            return studentRepository.save(student);
        }
    
        @GetMapping(value = "/connect")
        public String connect() {
            String result = "前后端连接成功";
            log.info(result);
            return result;
        }
    
    }
    View Code

      3.5 启动应用并进行测试

        》新增

        》查询列表

      3.6 打包

        进入到项目根目录执行:mvn -Dmaven.test.skip -U clean package

         技巧01:执行完后会在根目录下的target目录下生成class文件和打包文件

      3.7 执行jar包

        技巧01:进入到jar包所在文件夹执行:java -jar jar包名称 

      3.8 重复3.5操作

    4 分模块

      需求:在上面的例子中,将model、repository、controller都写在了一个模块中;现在需要将它们写在不同的模块中

      4.1 修改当前项目的pom.xml文件

        将打包方式从jar改成pom,让当前项目作为主模块

      4.2 新建一个web模块

        技巧01:右键单击主模块根文件夹 -> module -> maven

        技巧02:子模块创建成功后会放在父模块根目录下

        技巧03:新建完成后,在主模块中会出现子模块的相关信息,在子模块中也会将主模块作为父模块

       4.2.1 代码移动

        技巧01:设置子模块的文件夹, 左键单击子模块文件夹 -> file菜单 -> projectstructure

        技巧02:将父模块中的src的java文件中的所哟文件移动到web模块中src的java文件中,resources和test做类似的操作

        技巧03:直接利用鼠标选中拖动就行啦,弹出的提示框要选择移动所有选项;再次弹出的选择continue

        技巧04:移动完成后刷新maven

        技巧05:刷新maven后进入到主函数启动应用进行测试

       4.3 创建model模块和repository模块

        将model相关的移动到model模块,将repository相关的移动到repository模块

        技巧01:包名要保持一致,这样是为了不用改动代码

        坑01:移动完成后会有代码报错,因为repository依赖model,web又依赖repository

        解决01:在repository模块中引入model依赖,在web模块中引入repository依赖

        技巧02:依赖引入后刷新maven

        技巧03:找到main函数启动测试

    5 打包

      5.1 进入到主模块执行:mvn -Dmaven.test.skip -U clean package

        -Dmaven.test.skip -> 跳过测试

        -U -> 更新包

        clean -> ??

        坑01:提示找不到main函数

        解决01:在maven插件中添加main函数的路径【注意:maven插件的相关信息在主模块的pom.xml中,而main函数在web模块中】

        坑02:再次启动时提示一些包找不到

        原因02:maven相关配置和main函数不在一个模块时就会报这种错误

        解决02:将maven相关的配置信息移动到main函数所在的那个模块【本案例是将主模块中的maven配置信息移动到web模块中去】

        技巧01:移动完后再次执行 mvn -Dmaven.test.skip -U clean package 

      5.2 通过jar包启动应用

        技巧01:由于maven的相关配置在web模块下,所以产生的jar信息在web模块下的target文件中

        技巧02:进入到web模块的target文件夹,启动相关jar包即可

      5.3 重复3.5操作

    6 分模块后的源代码

    ·下面是我的公众号二维码,欢迎关注·

    尋渝記

    微信号:xyj_fury

        

          

      

      

  • 相关阅读:
    学习Python比较好的书籍推荐
    将Python分成7个阶段学习,你会发现学习Python真的很简单
    web前端开发学习 自学web前端需要掌握哪些知识点?
    零基础想转行从事Python?需要掌握如下技能
    每日干货丨C++语言主流开发工具推荐!
    适合零基础人群学习的Python入门教程
    Python爬虫学习教程 猫眼电影网站视频爬取!【附源码】
    Python爬虫学习教程 bilibili网站视频爬取!【附源码】
    Python爬虫技术要学到什么程度才可以找到工作?
    零基础如何高效的学习好Python爬虫技术?
  • 原文地址:https://www.cnblogs.com/NeverCtrl-C/p/9375107.html
Copyright © 2011-2022 走看看