制作通用模块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