在开发一个稍具规模的项目时,我们常常希望能够将程序的各个部分分成不同的模块,加以管理。本完简单介绍了如何建立一个多模块的 Spring Boot 项目。

假设我们需要开发一个包含 2 个子模块的项目:app 子模块是上层应用,service 子模块提供服务。

代码:https://github.com/chenf42/spring-boot-examples/tree/master/multi-module-project

1. 模块配置

使用 Spring Initializr 新建一个 Spring Boot 项目。记得选中 Spring Web 依赖。

修改 pom.xml 文件,将打包模式改为 pom 方式,即添加或修改 <packaging> tag 为:

<packaging>pom</packaging>

并添加 <modules> tag 来指示我们的子模块:

<modules><module>app</module><module>service</module>
</modules>

这个项目主模块是不直接运行的,我们可以删掉 <build> tag 和 src 文件夹。

在项目管理视图上右击 multi-module-project 项目名称,添加 app 模块:

使用同样的方式添加另一个名为 service 的子模块。

我们得要把项目模块设置为各子模块的父模块,将 app/pom.xmlservice/pom.xml 中的 <parent> tag 修改为如下内容:

<parent><groupId>com.meta-object</groupId><artifactId>multi-module-project</artifactId><version>0.0.1-SNAPSHOT</version>
</parent>

因为 service 子模块只用来给 app 提供服务,而不会被直接运行,我们可以把 service/pom.xml 中的 <build> tag 删掉,并删掉不需要的 service/src/main/java/com/metaobject/multimoduleproject/service/ServiceApplication.java 文件。

同时,我们需要修改 app/pom.xml,添加对 service 模块的依赖:

<dependency><groupId>com.meta-object.multi-module-project</groupId><artifactId>service</artifactId><version>0.0.1-SNAPSHOT</version>
</dependency>

2. 功能实现

添加 service/src/main/java/com/metaobject/multimoduleproject/service/User.java 文件:

package com.metaobject.multimoduleproject.service;public class User {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}

添加 service/src/main/java/com/metaobject/multimoduleproject/service/UserService.java 文件:

package com.metaobject.multimoduleproject.service;import org.springframework.stereotype.Service;@Service
public class UserService {public User getDefaultAdmin() {User user = new User();user.setName("admin");return user;}
}

这里我们提供了一个最简单的“服务”:查询默认管理员信息。

添加 app/src/main/java/com/metaobject/multimoduleproject/app/UserController.java 文件:

package com.metaobject.multimoduleproject.app;import com.metaobject.multimoduleproject.service.User;
import com.metaobject.multimoduleproject.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {private UserService userService;@Autowiredpublic UserController(UserService userService) {this.userService = userService;}@GetMapping("/admin")public User showDefaultAdmin() {return userService.getDefaultAdmin();}
}

注意这里 Intellij IDEA 会给出警告:Could not autowire. No beans of 'UserService' type found.

若我们运行 app 模块,会得到如下输出:

***************************
APPLICATION FAILED TO START
***************************Description:Parameter 0 of constructor in com.metaobject.multimoduleproject.app.UserController required a bean of type 'com.metaobject.multimoduleproject.service.UserService' that could not be found.Action:Consider defining a bean of type 'com.metaobject.multimoduleproject.service.UserService' in your configuration.

这是因为 app 模块没扫描到 UserService 这个服务。解决方法是在 app/src/main/java/com/metaobject/multimoduleproject/app/AppApplication.java 中导入此服务:

package com.metaobject.multimoduleproject.app;import com.metaobject.multimoduleproject.service.UserService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;@SpringBootApplication
@Import(UserService.class)  // 导入 UserService
public class AppApplication {public static void main(String[] args) {SpringApplication.run(AppApplication.class, args);}}

3. 试一试!

此时重新运行 app 模块并访问 http://localhost:8080/admin 可以看到如下结果:

(完)

source tree 递归子模块_多模块 Spring Boot 项目相关推荐

  1. source tree 递归子模块_每日刷题3--漫谈二叉树的递归遍历

    leetcode 特点1 虽然是从root开始,但是 严重依赖从下到上的反馈的数据 ,例如求tree的高度 题目1 最近公共祖先(LCA) 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百 ...

  2. eclipse创建springboot项目_创建一个 Spring Boot 项目,你会几种方法?

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 42W+,如下图: 2017 年由于种种原因,就没有 ...

  3. springboot导入项目依赖报错_如何解决spring boot 项目导入依赖后代码报错问题

    如何解决spring boot 项目导入依赖后代码报错问题 2020-08-15  14:17:18 代码截图如图所示(由于本人问题已经解决,没来得及截图,所以在网上找了一张图片) ​ 针对图中所示的 ...

  4. springboot java获取版本号_深入实践Spring Boot 实战篇,大佬整理出的PDF文档

    如何使用Spring Boot 本文章将会详细介绍如何使用Spring Boot.它覆盖了构建系统,自动配置和运行/部署选项等主题.我们也覆盖了一些Spring Boot最佳实践.尽管Spring B ...

  5. requestmapping配置页面后_第004课:Spring Boot 项目属性配置

    在项目中,很多时候需要用到一些配置的信息,这些信息可能在测试环境和生产环境下会有不同的配置,后面根据实际业务情况有可能还会做修改,针对这种情况,我们不能将这些配置在代码中写死,最好就是写到配置文件中. ...

  6. springboot controller访问不到_构建微服务:快速搭建Spring Boot项目

    Spring Boot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...

  7. scheduled每天下午1点执行一次_在Spring Boot项目中使用@Scheduled注解实现定时任务...

    在java开发中定时任务的实现有多种方式,jdk有自己的定时任务实现方式,很多框架也有定时任务的实现方式.这里,我介绍一种很简单的实现方式,在Spring Boot项目中使用两个注解即可实现. 在sp ...

  8. 从服务器基础环境配置到搭建Docker+Gitlab+Gitlab Runner,完整介绍Spring Boot项目的持续集成与持续交付具体实现!

    1. 序言 在大学的课程学习,非常注重团队协作的培养,在企业开发中,团队协作开发项目的场景更是甚多.另外,在当下的热门技术栈中,微服务开发模式.前后端分离开发模式逐渐盛行,Spring Boot.VU ...

  9. Vue + Spring Boot 项目实战(十五):动态加载后台菜单

    重要链接: 「系列文章目录」 「项目源码(GitHub)」 本篇目录 前言 一.后端实现 1.表设计 2.pojo 3.菜单查询接口(树结构查询) 二.前端实现 1.后台页面设计 2.数据处理 3.添 ...

最新文章

  1. c#自动登录网页,浏览页面
  2. Java PriorityQueue优先队列详解(源码+图文步骤解析)
  3. CentOS启用sudo方法
  4. Django(补充CBV,FBV)
  5. 权限管理系统_在Gitee狂揽11K Star!这个SpringCloud的权限管理系统你必须知道
  6. SCSM 2012 SP1创建SCOM连接器
  7. JS-面向对象-改变This的指向---使用call方法改变this的指向 / 使用apply方法改变this的指向 / 使用bind方法改变this的指向
  8. C语言课后习题(69)
  9. 如何快速生成JavaScript文档
  10. Tkinter登陆界面设计
  11. 360杯-实训平台安全入门 · 课程测试
  12. 基于CUDA的GPU并行计算技术实现网课课表编排
  13. java中的odb_obd适配器的初始化
  14. SpringBoot项目的云服务器部署
  15. 【C语言】求一个数有多少位
  16. java 后端开发技能_Java 后端开发,应该重点学习哪些知识/技能?
  17. wamp添加mysql版本_PHPWAMP自定义添加PHP版本教程,支持无限添加PHP和Mysql版本
  18. 码农得用专用的Code字体,推荐几款专业级别的程序员专用字体
  19. SecureCRT VBS脚本/自动按回车键
  20. 输出直角三角形的代码

热门文章

  1. MyEclipse8.x下安装freemarker ide插件
  2. python中的any函数_python函数-any()
  3. Qt学习笔记之QTranslator
  4. Linux驱动编程 step-by-step (一)驱动程序的作用
  5. android系统下替换so库等操作
  6. react学习笔记(8)生命周期回顾与再认识
  7. Mediostream框架filter使用说明
  8. spark内核回顾思考 RDD
  9. 我所有的博客都在这里了,拿出来晒晒~~
  10. [转]XNA 3.1 转换到 XNA4.0 的备忘录