制作通用模块jar包
通用模块不是运行的,而且要被其他模块引入的,所以该模块不能采用springboot打包方式制作jar包,否则其他模块无法引入通用模块。
1、修改通用模块,设置模块为非Springboot项目
<?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
https://maven.apache.org/xsd/maven4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- <parent>-->
<!-- <artifactId>shopping</artifactId>-->
<!-- <groupId>com.itbaizhan</groupId>-->
<!-- <version>1.0-SNAPSHOT</version>-->
<!-- </parent>-->
<groupId>com.itbaizhan</groupId>
<artifactId>shopping_common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>shopping_common</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
<project.build.sourceEncoding>UTF8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF8</project.reporting.outputEncoding>
</properties>
<dependencies>
<!-- <dependency>-->
<!--
<groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter</artifactId>-->
<!-- </dependency>-->
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-bootstarter-web</artifactId>
<version>2.7.0</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<!-- MybatisPlus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-bootstarter</artifactId>
<version>3.5.0</version>
</dependency>
<!-- <dependency>-->
<!--
<groupId>org.springframework.boot</groupId
>-->
<!-- <artifactId>spring-bootstarter-test</artifactId>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-bootstarter-data-elasticsearch</artifactId>
<version>2.7.0</version>
</dependency>
<!-- JWT -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>javajwt</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 公共模块不要以springboot方式打包 -->
<!-- <plugin>-->
<!--
<groupId>org.springframework.boot</groupId
>-->
<!-- <artifactId>springboot-maven-plugin</artifactId>-->
<!-- <configuration>-->
<!-- <excludes>-->
<!-- <exclude>-->
<!-- <groupId>org.projectlombok</groupId>-->
<!-- <artifactId>lombok</artifactId>-->
<!-- </exclude>-->
<!-- </excludes>-->
<!-- </configuration>-->
<!-- </plugin>-->
</plugins>
</build>
</project>
2、修改shopping父工程的pom文件,通用模块不是父工程的子模块
<!-- 子模块 -->
<modules>
<!-- 通用模块,包含实体类、服务接口、工具类等-->
<!-- <module>shopping_common</module>-->
<!-- 商品服务 -->
<module>shopping_goods_service</module>
</modules>
3、使用Maven工具发布通用模块
运行成功后,生成以下文件
在父工程添加制作Docker镜像的Maven插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-mavenplugin</artifactId>
</plugin>
<!-- 打包时跳过测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefireplugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<!-- docker-maven-plugin-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-mavenplugin</artifactId>
<version>1.2.2</version>
<configuration>
<!-- Docker路径 -->
<dockerHost>http://192.168.0.80:2375</dockerHost>
<!-- Dockerfile定义 -->
<baseImage>openjdk:11</baseImage>
<!-- 作者 -->
<maintainer>ittxc</maintainer>
<resources>
<resource>
<!-- 复制jar包到docker容器指定目录 -->
<targetPath>/</targetPath>
<!-- 从哪个包拷贝文件,target包 -->
<directory>${project.build.directory}</directory>
<!-- 拷贝哪个文件 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<workdir>/</workdir>
<!-- 运行jar包的命令时,设置运行环境为prod生产环境,会自动读取applicationprod.yml配置文件 -->
<entryPoint>["java", "-jar","${project.build.finalName}.jar","--spring.profiles.active=prod"]
</entryPoint>
<forceTags>true</forceTags>
<!-- 镜像名 -->
<imageName>${project.artifactId}</imageName>
<!-- 镜像版本 -->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
</configuration>
</plugin>
</plugins>
</build>
部署项目容器
我们学习过程中,使用的只有一台个人主机,而每一个模块在 部署时都会启动一个容器,将20多台容器部署到同一台虚拟机 中是不现实的,个人电脑也无法支持这么多容器部署 在一起。在工作中我们会有很多服务器部署分布式项目。
1、给广告服务的提供者编写配置文件 application-prod.yml ,该文件进行生产环境配置。
# 端口号
server:
port: 9004
# 日志格式
logging:
pattern:
console: '%d{HH:mm:ss.SSS} %clr(%-5level) --- [%-15thread] %cyan(%-50logger{50}):%msg%n'
# 配置Mybatis-plus
mybatis-plus:
global-config:
db-config:
# 表名前缀
table-prefix: bz_
# 主键生成策略为自增
id-type: auto
configuration:
# 关闭列名自动驼峰命名映射规则
map-underscore-to-camel-case: false
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启sql日志
spring:
# 数据源
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.0.176:3306/baizhanshopping?serverTimezone=UTC
username: root
password: root
# redis
redis:
host: 192.168.0.176
port: 6379
timeout: 30000
jedis:
pool:
max-idle: 8
max-wait: -1
max-active: 8
min-idle: 0
dubbo:
application:
name: shopping_category_service # 项目名
registry:
address: zookeeper://192.168.0.176 #注册中心地址
port: 2181 # 注册中心端口号
timeout: 10000 # 注册到zk上超市时间,ms
protocol:
name: dubbo # dubbo使用的协议
port: -1 # 自动分配端口
scan:
base-packages: com.itbaizhan.shopping_category_service.service # 包扫描
2、给广告服务的消费者编写配置文件 application-prod.yml ,该文件进行生产环境配置。
# 端口号
server:
port: 8002
# 日志格式
logging:
pattern:
console: '%d{HH:mm:ss.SSS} %clr(%-5level) --- [%-15thread] %cyan(%-50logger{50}):%msg%n'
dubbo:
application:
name: shopping_category_customer_api #项目名
registry:
address: zookeeper://192.168.0.176 #注册中心地址
port: 2181 # 注册中心端口号
timeout: 10000 # 注册到zk上超市时间,ms
protocol:
name: dubbo # dubbo使用的协议
port: -1 # 自动分配端口
3、将广告服务的提供者和消费者打包,并生成Docker镜像
4、启动广告服务的提供者和消费者容器
docker run -d -p 9004:9004 shopping_category_service
docker run -d -p 8002:8002 shopping_category_customer_api
5、测试查询所有广告功能:ip地址:8002/user/category/all