目录
为什么要使用聚合工程
聚合的概念
把项目的各个模块(子工程)聚合在一起构建。一般用于分模块开发,最后整体打包发布
Maven Project独立运行
Maven Module无法独立运行
工程聚合和继承的区别
工程聚合
聚合是为了方便快速构件项目。
对于聚合模块来说,它知道有哪些被聚合的模块,但那些模块不知道这个聚合模块的存在
继承
继承是为了消除重复配置。
对于继承关系的父POM来说,它不知道有哪些子模块继承于它,但是子模块必须知道自己的父POM是什么;
聚合模块和微服务的区别
聚合模块
聚合工程就是把一个工程分为各个部件
这些包括根项目pom可以用来控制依赖的版本号
实体类taobao-bean,持久层接口taobao-dao,业务层service:taobao-service,web层taobao-web.工具类taobao-utils等
可以分为这么多的模块平行开发,这些部件都不可以单独运行,它们之间相互依赖,最后合在一起成为一个完整可运行的web项目
微服务
而这个web项目就可以成为是一个微服务
微服务可以是一个聚合工程,也可以不是,只是选择要不要这么开发而已
当其他的微服务需要使用另一个微服务的实体类时
这个时候我们可以直接导入它的实体类坐标即可,不用再次创建
就好像吃饭,朋友已经买了勺子,我喝汤的时候既可以用一下喝一口汤,达到重复使用的目的;
如何构建聚合工程
https://www.jianshu.com/p/9a7488b5bd0e
聚合工程整合Spring Boot
1. 在pom.xml中添加以下依赖
1.1 引入依赖parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>版本根据自己的需要填写</version>
<!-- <version>2.2.2.RELEASE</version>-->
<relativePath />
</parent>
1.2 设置资源属性
<!--设置资源属性-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 版本根据自己的情况而定 java.version>1.8</java.version>-->
</properties>
1.3 引入依赖dependency
<dependencies>
<!--核心Spring Boot starter,包括自动配置支持,日志和YAML-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!-- <exclusions> 剔除logging jar包 -->
<!-- <exclusion>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-logging</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
</dependency>
<!--对全栈web开发的支持, 包括Tomcat和spring-webmvc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring默认使用yml中的配置,但有时候要用传统的xml或properties配置, spring-boot-configuration-processor 可以实现修改-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2. 在子模块api中添加application.yml
2.1 具体位置
2.2 所填内容
############################################################
#
# web访问端口号 约定:8088
#
############################################################
server:
port: 8080
tomcat:
uri-encoding: UTF-8
max-http-header-size: 80KB
############################################################
#
# 配置数据源信息
#
############################################################
spring:
datasource: # 数据源的相关配置
type: com.zaxxer.hikari.HikariDataSource # 数据源类型:HikariCP
driver-class-name: com.mysql.cj.jdbc.Driver # mysql驱动
url: jdbc:mysql://localhost:3306/foodie-shop?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC
username: root
password: root
hikari:
connection-timeout: 30000 # 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 默认:30秒
minimum-idle: 5 # 最小连接数
maximum-pool-size: 20 # 最大连接数
auto-commit: true # 自动提交
idle-timeout: 600000 # 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10分钟
pool-name: DateSourceHikariCP # 连接池名字
max-lifetime: 1800000 # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 1800000ms
connection-test-query: SELECT 1
############################################################
#
# mybatis 配置
#
############################################################
mybatis:
type-aliases-package: com.imooc.pojo # 所有POJO类所在包路径
mapper-locations: classpath:mapper/*.xml # mapper映射文件
3. 添加启动类
3.1 所在位置
3.2 所填内容
package com.imooc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import tk.mybatis.spring.annotation.MapperScan;
//@SpringBootApplication
@MapperScan(basePackages = "com.imooc.mapper")
@SpringBootApplication()
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4. Hello Word测试
4.1 添加Controller
4.1.1 添加位置
4.1.2 所填内容
package com.imooc.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public Object hello(){
return "Hell Spring";
}
@GetMapping("/hi")
public Object hi(){
return "Hi Spring";
}
}