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 分模块后的源代码
·下面是我的公众号二维码,欢迎关注·
尋渝記

微信号:xyj_fury
SpringBoot23 分模块开发的更多相关文章
- Maven02——回顾、整合ssh框架、分模块开发、私服
1 回顾 1.1 Maven的好处 节省空间 对jar包做了统一管理 依赖管理 一键构建 可跨平台 应用在大型项目可提高开发效率 1.2 Maven安装部署配置 1.3 Maven的仓库 本地仓库 远 ...
- SSH框架分模块开发
------------------siwuxie095 SSH 框架分模块开发 1.在 Spring 核心配置文件中配置多个内容,容易造成 配置混乱,不利于维护 「分模块开发主要针对 Spring ...
- Spring_day04--HibernateTemplate介绍_整合其他方式_Spring分模块开发
HibernateTemplate介绍 1 HibernateTemplate对hibernate框架进行封装, 直接调用HibernateTemplate里面的方法实现功能 2 HibernateT ...
- Struts2_day01--Struts2的核心配置文件_常量配置_分模块开发_Action编写方式
Struts2的核心配置文件 1 名称和位置固定的 2 在配置文件中主要三个标签 package.action.result,标签里面的属性 标签package 1 类似于代码包,区别不同的actio ...
- Struts2分模块开发
-------------------siwuxie095 Struts2 分模块开发 在实际开发中,如果一个项目是团队开发的,也就是很多人开发的, 每个人都需要去修改 struts.xml,因为 s ...
- java使用maven项目(二)分模块开发
1 整合ssh框架 1.1 依赖传递 只添加了一个struts2-core依赖,发现项目中出现了很多jar, 这种情况 叫 依赖传递 1.2 依赖版本冲突的解决 1. 第 ...
- spring+springmvc+hibernate架构、maven分模块开发样例小项目案例
maven分模块开发样例小项目案例 spring+springmvc+hibernate架构 以用户管理做測试,分dao,sevices,web层,分模块开发測试!因时间关系.仅仅測查询成功.其它的准 ...
- ssm集成(maven)& 分模块开发--详细教程
1 maven版本的ssm 1.1 最简单的版本步骤: (1) 创建maven web项目 (2) 在pom.xml中导入依赖的jar包 (3) 再写配置文件: web.xml <!DOCTYP ...
- 七 Spring的分模块开发的配置,保存客户案例
Spring的分模块开发的配置 加载配置文件的时候,加载多个 在一个配置文件中引入多个配置文件(常用) 保存客户案例 applicationContext.xml: <?xml version= ...
随机推荐
- (二十八)static关键字
/* * static 静态的 * static修饰的成员变量的特点 * 1.static修饰的成员变量是该类的所有对象共享 * 2.static修饰的成员变量是随着类的加载就 ...
- [EMWIN]FRAMEWIN 与 WINDOW 的使用注意
1.对于window控件,选中这类型控件的时候直接选中对应句柄即可: WM_InvalidateWindow(hWin); WM_SelectWindow(hWin); WM_CreateTimer( ...
- 【MFC】VC界面绘制双缓存
VC界面绘制双缓存 转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/11/20/2255811.html 1.闪屏的问题在GDI的绘图 ...
- web应用程序安全攻防---sql注入和xss跨站脚本攻击
kali视频学习请看 http://www.cnblogs.com/lidong20179210/p/8909569.html 博文主要内容包括两种常见的web攻击 sql注入 XSS跨站脚本攻击 代 ...
- 【spring源码学习】spring的IOC容器之自定义xml配置标签扩展namspaceHandler向IOC容器中注册bean
[spring以及第三方jar的案例]在spring中的aop相关配置的标签,线程池相关配置的标签,都是基于该种方式实现的.包括dubbo的配置标签都是基于该方式实现的.[一]原理 ===>sp ...
- 手把手使用 Webpack 4 建立 VUE 项目
手把手使用 Webpack 4 建立 VUE 项目 安装 node.js 略 安装 cnpm 略 安装 webpack cnpm install webpack -g 安装 vue-cli cnpm ...
- Jython引用Java类
Ubuntu下如下指令安装Jython:$ sudo apt-get install jython下面的指令用于查看Jython版本:$ jython --version下面的代码是一个简单的Java ...
- windows中文编码报错 com.google.gson.JsonIOException: java.nio.charset.MalformedInputException: Input length = 1
昨天碰到一个问题:同一个请求页面,页面经过匹配后调用http的post协议接口,部署在linux环境的没问题,本地Eclipse启动的tomcat也没问题,直接启动本地tomcat却报错了: 18:4 ...
- ror配置unicorn部署
unicorn是目前在ror上比较流行的应用服务器,配合nginx用来直接部署rails程序,下面这种方式应该是共享socket,不断fork子进程,有点类似php-fpm的模式 安装unicorn ...
- mysql实战优化之三:表优化
对于大多数的数据库引擎来说,硬盘操作可能是最重大的瓶颈.所以,把你的数据变得紧凑会对这种情况非常有帮助,因为这减少了对硬盘的访问. 如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理 ...