写在前面:在学习了很多理论知识后,虽然对理论知识有了个概念,但是搭建项目的配置步骤做的少,还是不熟,方便日后复习,在此记录一下。
1. 选择项目基础信息
2.选择依赖
因为创建的是springcloudAlibaba项目,有固定的版本对应,需要自己调整,所以这里的版本默认就可以,依赖也不用选,后面根据需要添加就行。
3.点击创建后项目如下
4.删除无关项
构建微服务,这个项目作为父项目,将无关的结构删除,保留项目的pom.xml即可。
1. 查看版本关系
2.版本选择
找到分支部分,选则一个Spring Cloud Alibaba Version,则可以确定Spring Cloud Version和Spring Boot Version。
再往下滑动,可以看到组件版本关系,这样就可以确定适配的各组件版本了。当然这个在maven中不用自己显示配置, 都在上面集中管理了。下面这些,只是组件下载时,我们需要回来参照,,文章后面以nocos为例说明。
3. 配置父pom.xml
这里我选择版本对应如下:
- "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.0modelVersion>
- <groupId>com.xixijungroupId>
- <artifactId>spring-cloud-blogartifactId>
- <version>0.0.1-SNAPSHOTversion>
- <name>spring-cloud-blogname>
-
- <packaging>pompackaging>
-
- <properties>
- <java.version>1.8java.version>
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
- <spring.cloud.alibaba.version>2.2.6.RELEASEspring.cloud.alibaba.version>
- <spring.boot.version>2.3.2.RELEASEspring.boot.version>
- <spring.cloud.version>Hoxton.SR9spring.cloud.version>
- properties>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starterartifactId>
- dependency>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-testartifactId>
- <scope>testscope>
- <exclusions>
- <exclusion>
- <groupId>org.junit.vintagegroupId>
- <artifactId>junit-vintage-engineartifactId>
- exclusion>
- exclusions>
- dependency>
- dependencies>
-
- <dependencyManagement>
- <dependencies>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>${spring.boot.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
-
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-alibaba-dependenciesartifactId>
- <version>${spring.cloud.alibaba.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-dependenciesartifactId>
- <version>${spring.cloud.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
-
- dependencies>
- dependencyManagement>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.pluginsgroupId>
- <artifactId>maven-compiler-pluginartifactId>
- <version>3.8.1version>
- <configuration>
- <source>1.8source>
- <target>1.8target>
- <encoding>UTF-8encoding>
- configuration>
- plugin>
- plugins>
- build>
-
- project>
pom.xml说明;
properties中配置统一版本管理
在propertie中可以自定义变量,来进行版本管理
一般设置为:artifactId.versiom。
引用:
示例:
- <properties>
- <spring.boot.version>2.3.2.RELEASEspring.boot.version>
- properties>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>${spring.boot.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
dependencyManagement
集中化的依赖管理
在Maven中,dependencyManagement
元素是用来为所有子项目提供一个集中化的依赖管理。当你有多个模块或项目,并且它们共享相同的依赖时,dependencyManagement
非常有用。
具体来说,dependencyManagement
的作用有以下几点:
版本管理:你可以在一个中心的地方管理所有依赖的版本号,这样当你需要更新版本时,只需要在一个地方修改。
范围(Scope)管理:你可以设定依赖的范围(如 import, compile
, runtime
, test
等)。
排除不需要的传递依赖:通过
标签,你可以集中管理哪些传递依赖应该被排除。
简化依赖声明:在子模块中,你只需要指定依赖的 artifactId
和 groupId
,而不需要指定版本号或其他信息,因为它们会继承自父项目中的 dependencyManagement
。
type属性
type
属性用于指定依赖的类型。默认情况下,这个值是 jar
,意味着依赖是一个Java ARchive文件。其他可能的类型包括:
pom
:Project Object Model 文件。这种类型通常用于从其他 POM 文件中导入配置。war
:Web Application Archive 文件,用于Java web应用程序。ear
:Enterprise Archive 文件,用于Java EE应用程序。ejb
:Enterprise JavaBeans Archive 文件。rar
:Resource Adapter Archive 文件,用于Java EE连接资源。par
:Persistence Archive 文件,用于持久化模块。Scope属性
scope
用于控制依赖的可见性和传递性。常见的范围有 compile
, provided
, runtime
, test
, system
。
compile
:默认范围,依赖在所有的生命周期阶段都可用。provided
:假定 JDK 或者容器已提供该依赖,仅用于编译和测试,不会打包。runtime
:不需要用于编译,但是需要在运行时。test
:只在测试阶段使用。system
:类似于 provided
,但你需要显式地提供依赖的路径。以nacos为例,创建子项目。
1. 新建模块
2.模块设置
3.依赖选择
后面还需要手动更改pom,所以直接创建即可。
Idea中模块不高亮问题
原因:曾经创建过类似的名称的模块,然后删除了,所以被maven给排除了。
解决办法:
4. 设置模块pom
这里的parent设置为父项目的工件信息,然后导入nacos的依赖,因为父项目中集中管理了版本,所以不需要显示设置版本。
- "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.0modelVersion>
- <parent>
- <groupId>com.xixijungroupId>
- <artifactId>spring-cloud-blogartifactId>
- <version>0.0.1-SNAPSHOTversion>
- parent>
-
- <groupId>com.xixijungroupId>
- <artifactId>order-nacosartifactId>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
-
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
- dependency>
- dependencies>
-
- <properties>
- <maven.compiler.source>8maven.compiler.source>
- <maven.compiler.target>8maven.compiler.target>
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
- properties>
-
- project>
父项目中引入模块,刷新模块即可:
5. 填充代码
(1)项目结构
(2)OrderController.java
- package com.xixijun.order.controller;
-
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.client.RestTemplate;
-
- @RestController
- @RequestMapping("/order")
- public class OrderController {
-
- @Autowired
- private RestTemplate restTemplate;
-
- @RequestMapping("/add")
- public String add(){
- System.out.println("下单成功!");
- String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
- return "hello world = " + msg;
- }
- }
(3) OrderApplication.java
- package com.xixijun.order;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.boot.web.client.RestTemplateBuilder;
- import org.springframework.cloud.client.loadbalancer.LoadBalanced;
- import org.springframework.context.annotation.Bean;
- import org.springframework.web.client.RestTemplate;
-
- @SpringBootApplication
- public class OrderApplication {
- public static void main(String[] args) {
- SpringApplication.run(OrderApplication.class);
- }
-
- /**
- * 需要家LoadBalanced注解,加载负载均衡器,否则会报错
- * @param builder
- * @return
- */
- @Bean
- @LoadBalanced
- public RestTemplate restTemplate(RestTemplateBuilder builder){
- RestTemplate restTemplate = builder.build();
- return restTemplate;
-
- }
- }
(4) application.yml
- server:
- port: 8020
- #应用名称
- spring:
- application:
- name: order-service
- cloud:
- nacos:
- server-addr: localhost:8848
- discovery:
- username: nacos
- password: nacos
- namespace: public
创建步骤同order-nacos一致,更换名称即可。
1. 填充代码
(1)项目结构
(2)StockController.java
- package com.xixijun.stock.controller;
-
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.client.RestTemplate;
-
- @RestController
- @RequestMapping("/stock")
- public class StockController {
-
- @Value("${server.port}")
- String port;
-
- @RequestMapping("/reduct")
- public String reduct(){
- System.out.println("扣减库存!");
- return "扣减库存! port = " + port;
- }
- }
因为stock-nacos没有调用服务,所以没有配置restTemplate。
(3)application.yml
- server:
- port: 8021
-
- #应用名称
- spring:
- application:
- name: stock-service
- cloud:
- nacos:
- server-addr: localhost:8848
- discovery:
- username: nacos
- password: nacos
- namespace: public
nacos配置,可以选择多种方式安装,这里快速上手选择使用window单机版。
1. 选择版本
在本文第一章创建父项目的第二小节设置项目版本时,我们引入了项目的版本,其中指定了适配的组件版本,因为我选择的是2.2.6.RELESE版本,所以对应的nacos版本选择1.4.2。
2. 下载nacos
(1)下载地址
(3)解压后文件内容
(4)修改配置
进入bin目录,修改startup.cmd.将下面的cluster(集群模式),修改为standalone(单机模式)。保存后退出。
(5)输入cmd,回车
(6)输入startup.cmd
出现successfully则说明运行成功,如下所示:
(7)客户端界面访问
默认密码:nacos
简单介绍一下,当服务模块启动后,注册中心就会出现启动的服务,如果服务模块没有配置正确,就不会被加载进来。查看地址:服务管理\服务列表。
1. 启动 OrderApplication 和 StockApplication
统一管理面板
如下图所示,可以查看统一管理面板,第一次进入可能没有,需要点击加号\设置运行配置类型\选择Spring Boot选项即可。
2. 查看服务注册中心
如下所示,服务都正确加载,项目是可以的。
3. 访问地址项目功能
网址:http://localhost:8020/order/add
至此,一个快速应用springcloudAlibaba的项目搭建完毕,恭喜道友在学习之路上更进一步。这学习大道茫茫,然而你我都是这条路上的苦行僧,在此留下心得,祝你我都能修的圆满。咱们下一个路口(BUG)见!