制作通用模块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.0https://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: autoconfiguration:# 关闭列名自动驼峰命名映射规则map-underscore-to-camel-case: falselog-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启sql日志
spring:# 数据源datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.0.176:3306/baizhanshopping?serverTimezone=UTCusername: rootpassword: root# redisredis:host: 192.168.0.176port: 6379timeout: 30000jedis:pool:max-idle: 8max-wait: -1max-active: 8min-idle: 0
dubbo:application:name: shopping_category_service # 项目名registry:address: zookeeper://192.168.0.176 #注册中心地址port: 2181 # 注册中心端口号timeout: 10000 # 注册到zk上超市时间,msprotocol: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上超市时间,msprotocol: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