吐槽一下:新年第一篇博客,水水的(忘了带鼠标笔记本电源线和鼠标回家,写篇博客不容易)。
1、搭建springboot 父项目
然后一路“next”,项目创建 成功后,执行 DemoApplication.java的main方法是可以启动的,但由于是maven父项目,需要更改一些内容:
1)删除不需要的文件,如下图所示的部分需要删除
2)修改pom.xml,改成如下:
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
</parent>
<groupId>cn.hj.demo</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<packaging>pom</packaging>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
其中,最重要的是增加
<packaging>pom</packaging>
2、子项目的搭建
如下图,新增Module
2.1 子项目的搭建
如上,增加了四个module,model,mybatis,service,web,
首先删除各模块不需要的部分,如下图,
其中,web模块为启动模块,不删除boot的启动文件,配置都放置在web模块中,所以也不删除boot的resources文件夹和test文件夹;mybatis用xml文件不用注解,方便演示热加载,所以也不删除resources文件夹。
点开各个模块的pom文件,发现父项目并不是demo,而是spring-boot-starter-parent,因而需要修改pom文件,同时也需要修改父项目的pom文件
父项目的pom.xml
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
</parent>
<groupId>cn.hj.demo</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<packaging>pom</packaging>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<modules>
<module>model</module>
<module>mybatis</module>
<module>service</module>
<module>web</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
<dependency>
<groupId>cn.hj.demo</groupId>
<artifactId>web</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.hj.demo</groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.hj.demo</groupId>
<artifactId>mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.hj.demo</groupId>
<artifactId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
</project>
子模块(以mybatis)的pom.xml为例
<?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>
<parent>
<groupId>cn.hj.demo</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>cn.hj.demo</groupId>
<artifactId>mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mybatis</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>cn.hj.demo</groupId>
<artifactId>model</artifactId>
</dependency>
</dependencies>
</project>
2.2 找不到bean问题的解决
如:UserController.java
package cn.hj.web.User;
import cn.hj.commom.dto.Result;
import cn.hj.model.User;
import cn.hj.service.User.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
UserService userService;
@RequestMapping(value = {"/test/{id}"},method = RequestMethod.GET)
public Result test(@PathVariable("id") Object id){
return new Result(1,"测试成功!");
}
@RequestMapping(value = {"/save"},method = RequestMethod.POST)
public Result save( User user){
userService.save(user);
return new Result(1,"保存成功!");
}
@RequestMapping(value = {"/get"},method = RequestMethod.GET)
public Result get(String id){
return new Result(1,"获取成功!",userService.get(id));
}
@RequestMapping(value = {"/getList"},method = RequestMethod.GET)
public Result getList(User user){
return new Result(1,"获取成功!",userService.getList(user));
}
}
启动SpringBoot的时候,报如下错误:
SpringBoot多模块容易出现,具体网上有很多解决的博客,如:https://blog.csdn.net/yang_456/article/details/82151124
由于此处是多模块,并且web调用service,service调用mybatis,哪怕添加扫描包,service调用mybatis也会出现上述文件并且我没找到解决方法。
但此时用上述博客的第二种方法是可以解决的,即将启动方法方法父目录。大家应该注意到,我的所有java类都方法cn.hj.xxx包下面,所以直接把WebApplication.java放在cn.hj(也就是原来所在目录的父目录)目录下,问题就解决了。
3、热加载的实现
具体见另一篇博客:https://blog.csdn.net/hj12312/article/details/87019229