前言:
实习入职一星期(面试过程可以看上一篇帖子,毕竟你都学到微服务了未来不是java后端开发也太亏了),公司的业务果然是微服务架构,好在之前学习过SSM以及主要负责一些接口的调整工作压力不大,结合着黑马微服务的课程(链接如下)以及参考公司项目的源代码结合着学习微服务,不过比较难受的一点是只能在地铁上看课程没有结合实践很容易忘记,所以打算自己闲时做些实践以及写些博客记录学习。
SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4/?spm_id_from=333.1387.favlist.content.click&vd_source=90948eca8c09feb152fe5f51af7b284dhttps://www.bilibili.com/video/BV1LQ4y127n4/?spm_id_from=333.1387.favlist.content.click&vd_source=90948eca8c09feb152fe5f51af7b284d 但比较难蚌的是黑马一上来就先把代码给你了,没有告诉我创建项目的过程,然后我就自己尝试着自己创建,但网上相关资料很少且指导不清晰,好在经过两天摸索最终大功告成,(其中遇到问题包括maven继承错误,找不到主类,两个服务虽然都能运行但只能访问其中一个,项目打包失败)也算是还原了黑马课程第一讲原始的代码,外加一点从公司学的小tip。(因为本人也是初学者,所以尽可能减少不必要插件的引用,使用的pom文件以及代码都有提供粘贴即可)
温馨提示1:如果直接粘贴POM文件或者直接下载源码一定要做3.3的那一步,直接下载源码也可直接看下一章的前置项目准备部分。
温馨提示2:正常一步步做不会出现clean或者package失败的情况,直接粘贴POM可能会,解决方法看6.1
本项目源码链接
以及本专栏会持续更新微服务项目,每一章的项目都会基于前一章项目进行功能的完善,欢迎小伙伴们关注!同时如果只是对单章感兴趣也不用从头看,只需下载前一章项目即可,每一章都会有前置项目准备部分,跟着操作就能实现上一章的最终效果,当然如果是一直跟着做可以直接跳过这一部分。专栏目录链接如下,其中Base篇为基础微服务搭建,Pro篇为复杂模块实现。
从零搭建微服务项目(全)-优快云博客https://blog.youkuaiyun.com/wlf2030/article/details/145799620
一、构建父Maven项目
1.使用maven骨架创建项目,选择quickstart,高级设置里的东西如果后面想直接复制粘贴的话最好设置和我一样,不过影响不大。
2.删除不必要目录和文件,只保留下面两个文件
3.修改pom.xml文件中打包方式为pom
二、创建SpringBoot项目
1.右键根目录,选择新建->模块
2.选择SpringBoot(社区版可能没有),不过创建普通的quickstart项目也没有关系,只要最后项目结构一致就行。
3.不选择任何依赖
4.同理创建order-service模块,删除不必要文件,最后结构如下
三、修改POM文件
1.删去两个子模块pom文件中所有依赖,只留下下面内容
2.父pom文件添加模块信息修改如下
3.重新加载Maven更改后,maven的结构变成下面的样子(一定要保证maven结构长下面这样,否则后面就会大概率随机出现我之前说的错误之一)
如果直接粘贴pom文件或者其他原因导致maven结构长下面这样(如果你不是直接粘贴的pom没有配置文件那一行,因为还没做到那一步)也有手动修改的方法(为了复现这种情况我又创建了个Base1不用在意)
点这个加号添加maven项目
选择项目目录下的order-servce活user-service都行
点击确认就成这样了
4.父pom.xml添加必要依赖和配置信息,最终内容如下(直接COPY前看下3.3是否做了)
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.bit</groupId>
<artifactId>Base0</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Base0</name>
<url>http://maven.apache.org</url>
<modules>
<module>user-service</module>
<module>order-service</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--Spring依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.9.RELEASE</version>
<relativePath/>
</parent>
<!--测试依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--多环境配置-->
<profiles>
<profile>
<id>dev</id>
<properties>
<user.service.port>1234</user.service.port>
<order.service.port>1235</order.service.port>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<user.service.port>2234</user.service.port>
<order.service.port>2235</order.service.port>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<user.service.port>3234</user.service.port>
<order.service.port>3235</order.service.port>
</properties>
</profile>
</profiles>
<build>
<resources>
<!--允许src/main/resources下配置文件读取pom中配置-->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
5.由于添加了配置文件,重新加载后能够看到多了配置文件一栏
6.两子服务pom.xml内容如下(直接COPY前看下3.3是否做了)
<?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/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.bit</groupId>
<artifactId>Base0</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<artifactId>order-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>order-service</name>
<description>order-service</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
<?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/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.bit</groupId>
<artifactId>Base0</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<artifactId>user-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>user-service</name>
<description>user-service</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
四、测试配置文件生效情况
1.选择dev,并重新加载maven
2.删除resources下的properties文件,创建yml文件
3.yml内容如下(先打两个@@,然后在中间打order就会跳出提示,如果没有看本章第一步是否做了)
4.添加服务,选择SpringBoot
5.应该能看到检测到两个服务
6.微服务,启动!(端口对应配置文件dev中端口)
7.切换配置文件,并重新加载
8.再次启动成功,(到这里并没有结束,因为正如开篇所说遇到过微服务都能启动但只能访问其中一个且端口确认没有被占用的情况)
五、测试微服务访问情况
1.创建两个controller
2.内容如下
package cn.bit.userservice.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/test/{id}")
public String test(@PathVariable Integer id) {
System.out.println(id);
return id.toString();
}
}
package cn.bit.orderservice.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/order")
public class OrderController {
@GetMapping("/test/{id}")
public String test(@PathVariable Integer id) {
System.out.println(id);
return id.toString();
}
}
3.微服务,启动!
4.访问对应端口,均成功(还没有结束,还得运行是否能成功打包)
六、打包并命令行运行微服务
1.先clean再package
如果clean报错,我直接粘贴pom创建的base1出现报错的情况,可惜没有截图,大意是找不到base1.1.0snapshot的pom,解决方法是把之前的</relativePath>改成下面的方式,通过相对路径让它找到对应的pom文件,两个service都要改
然后就成功了
2.build success!
3.到jar包目录(从结果来看还是每个服务各自打成一个jar包,应该是pom还是少了配置,不过至少说明maven运行正常)
4.命令行启动服务成功
最后:
严格上来讲,这还不算微服务项目,只是两个springboot项目拼在一个maven项目下,两微服务没间没有调用,服务注册发现啥还没有弄,所以是第0章,后续随着我学的深入会慢慢添加内容可以关注专栏等待后续。