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>

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;
}

  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();
    }

}

  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;
    }

}

  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 分模块后的源代码

    

      

  

  

原文地址:https://www.cnblogs.com/NeverCtrl-C/p/9375107.html

时间: 2024-10-13 15:58:36

SpringBoot23 分模块开发的相关文章

spring+springmvc+hibernate架构、maven分模块开发例子小项目案例

maven分模块开发例子小项目案例 spring+springmvc+hibernate架构 以用户管理做测试,分dao,sevices,web层,分模块开发测试!因时间关系,只测查询成功,其他的准备在ext上做个完整的案例来的,可惜最近时间很紧, 高级部分也没做测试,比如建私服,其他常用插件测试之类的,等用时间了我做个完整ext前端和maven 完整的例子出来,在分享吧! 不过目前这些撑握了,在项目中做开发是没有问题的,其他高级部分是架构师所做的. 之前我有的资源都加上了积分,有些博友向我要,

SSH框架分模块开发

------------------siwuxie095 SSH 框架分模块开发 1.在 Spring 核心配置文件中配置多个内容,容易造成 配置混乱,不利于维护 「分模块开发主要针对 Spring 核心配置文件」 2.把 Spring 核心配置文件中的一部分配置放到单独的 配置文件中,再在 Spring 核心配置文件中引入单独的配 置文件即可 3.一般情况下,建议把 Action 对象的配置放到单独的 配置文件中 「因为其它的配置基本不变,只有 Action 对象的配置在 不断重复」 如: u

spring+springmvc+hibernate架构、maven分模块开发样例小项目案例

maven分模块开发样例小项目案例 spring+springmvc+hibernate架构 以用户管理做測试,分dao,sevices,web层,分模块开发測试!因时间关系.仅仅測查询成功.其它的准备在ext上做个完整的案例来的,可惜近期时间非常紧. 高级部分也没做測试,比方建私服,其它经常使用插件測试之类的,等用时间了我做个完整ext前端和maven 完整的样例出来,在分享吧. 只是眼下这些撑握了.在项目中做开发是没有问题的,其它高级部分是架构师所做的. 之前我有的资源都加上了积分,有些博友

maven项目分模块开发

当我们maven创建模块后可能出现的问题  1. 模块创建后不自动部署打包 2.在你没有发现不能自动部署打包之前,发现项目不能访问模块资源 解决方案: 1.右击项目--Properties   找不到Deployment Assembly,没有这个项目就不会自动部署到tomcat 中 2.右击项目--Properties 找到Project Facets 只选择Java 和 Utility Module,标识此项目用做模块 3.设置完了之后你重新点击项目properties就能看见Deploym

分模块开发创建Action子模块——(九)

1.右击父工程新建maven模块 2.填写名字 3.选择打包方式为war 4.写web层代码与配置文件(添加web.xml),错误是缺少service层包 少了一个struts配置 5.导入service的jar包 6.修改web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&

4 ~ express ~ 分模块开发

划分模块 一,根据功能进行模块划分 1,前台模块 2,后台管理模块 3,API模块 二,使用 app.use() 进行模块划分 1,app.use('/',require('./router/main')) 1,app.use('/admin',require('./router/admin')) 1,app.use('/api',require('./router/api')) 原文地址:https://www.cnblogs.com/500m/p/10987160.html

分模块开发的父子工程的pom的依赖关系

一.父子工程之间属于天然的集成关系,当你创建子项目的时候就会自动的生成继承于父类的<parent></parent>标签, 所以我们一般再父类中进行依赖版本的控制,当在子类中需要引用依赖时,我们就只需要写出具体依赖的坐标,而无需再指定其版本号 二.同级模块之间,依赖的传递需要,具体的引入你需要依赖的那个模块的坐标,如: 我有一个api的子模块,要想在one的子模块中引入这个api.就要将其坐标导入one的pom.xml文件中的dependencies标签下 <dependen

分模块开发模块聚合——(十)

1.在web层运行 测试: 2.在父工程运行 测试: 3.查看父工程pom.xml 4.查看父工程工作空间目录结构(相当于包含3个工程)

maven 之分模块构建web项目 及 聚合与继承特性

说明:一下总结文档 工具为:Eclipse , 框架:spring + springMVC + Mybatis + maven 为什么要分模块开发? 很简单提高代码的清晰和重用. 先给大家看一下分模块项目目录架构(如图) 介绍:如上图有一个父项目(user-parent)聚合很多子项目 (user-dao, user-service, user-web).每个项目,不管是父子,都含有一个pom.xml文件.而且要注意的是,每个模块都标出了打包类型. 注意:父项目是pom,也只能是pom.子项目有