一、springCloudAlibaba基础篇(nacos注册中心、配置中心)
1、Nacos环境准备
2、IDEA搭建项目
2.1 父类项目
2.2 创建子项目
2.3 查看是否注册成功
2.4 启动方式调整
3、配置中心
3.1 新增依赖和配置文件调整
3.2 编写Controller
3.3 nacos编写配置文件
1、Nacos环境准备
步骤1:进入 NACOS官网,官方推荐使用2.0.3版本,下载后解压
步骤2:连接数据库,创建任意名称数据库,并导入nacos目录中的nacos-mysql.sql文件
步骤3:修改nacos目录中application.propertie配置文件,将数据库链接指向自己的环境,下图是配置文件中要修改位置
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url=jdbc:mysql://127.0.0.1:13306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456
步骤4:进入nacos的bin文件夹,执行cmd命令startup.cmd -m standalone,其中-m standalone指定为单机模式,否则以cluster集群模式启动,启动会报错的。启动命令目录里不要有中文字符,有可能启动失败,写这篇文章时刚好遇到了
步骤5:根据给定的地址,输入网址,用户密码都是nacos。登录进去的页面下面在讲解。
2、IDEA搭建项目
2.1 父类项目
因为微服务是将一个项目,根据功能拆分成一个个单独的小应用,为了防止不同应用间出现错误,我们会创建一个父工程,统一管理一些操作,如依赖版本。下图是一个完整的pom.xml,可以自己先创建一个maven工程,然后直接替换掉内容。尽可能保证版本一致,之前用Hoxton.SR10其他版本出现,导致子项目的远程调用报错问题。↓当前项目结构↓
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xp</groupId>
<artifactId>springcloud_demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 版本定义 -->
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-cloud.version>Hoxton.SR10</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
<spring-boot.version>2.2.5.RELEASE</spring-boot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
2.2 创建子项目
只需三步,添加依赖,编写配置文件,启动类添加注解
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud_demo</artifactId>
<groupId>com.xp</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>provider01</artifactId>
<groupId>com.xp</groupId>
<version>0.0.1-SNAPSHOT</version>
<name>provider01</name>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
server:
port: 8101
spring:
application:
# 这里不要写下划线,否则后面用openFegin远程调用时,不支持下划线
name: provider-01
cloud:
nacos:
discovery:
server-addr: http://localhost:8848
@SpringBootApplication
@EnableDiscoveryClient // 将自己注册到nacos注册中心
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
/** 随便写的Controller,测试是否调用正常 */
@RestController
@RequestMapping("/info")
public class InfoController {
@Value("${server.port}")
private String port;
@RequestMapping("/")
public String getPort(){
return port;
}
}
2.3 查看是否注册成功
我这里面因为起了两个项目,而且是同名的,所以显示实例数2。
后期会根据服务名称远程调用,同一名称的会被认为是同一类型服务,所以名称一样是正常的。调用时会根据名称找到真实IP,使用负载均衡算法来调用
2.4 启动方式调整
可以在启动类出添加 -Dserver.port=xxxx来调整端口号,方便单项目多端口注册到nacos里
3、配置中心
3.1 新增依赖和配置文件调整
细心的小伙伴应该发现了,我的配置文件用的是bootstrap.yml而非application.yml,写文章时我尝试用application.yml就没获取到nacos配置的值,此处和配置文件加载顺序有关,以后再写,大家出现同样问题改一下就好
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
server:
port: 8101
spring:
application:
# 这里不要写下划线,否则用openFegin远程调用不支持下划线
name: provider-01
cloud:
nacos:
discovery:
server-addr: http://localhost:8848
config:
server-addr: http://localhost:8848 #地址
file-extension: yaml # 指定格式yaml
group: DEFAULT_GROUP # 缺省即可
prefix: ${spring.application.name} # 缺省即可
test:
value: 123456 #自定义普通参数
3.2 编写Controller
此时访问localhost:8101/msg,页面会输出"8101:123456"的字样
@RestController
@RequestMapping("/info")
@RefreshScope //动态刷新注解
public class InfoController {
@Value("${server.port}")
private String port;
@Value("${test.value}")
private String val;
@RequestMapping("")
public String getPort(){
return port;
}
@RequestMapping("/msg")
public String getMsg(){
return port + ":" + val;
}
}
3.3 nacos编写配置文件
DATA-ID : 格式要求 {prefix}-{spring.profiles.active}.${file-extension}
${prefix} : 当前项目名称,也就是配置文件中spring.application.name的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置
${spring.profiles.active}:使用的环境,没有的话可以不配置,我下图中就没有配置
${file-extension}:配置文件的类型,默认properties,可以通过如下方式替换spring.cloud.nacos.config.file-extension= yaml
Group:分组,默认值DEFAULT_GROUP,也可以通过配置项 spring.cloud.nacos.config.group修改
此时访问localhost:8101/msg,页面会输出"8101:彼岸花"的字样。实现了动态修改配置文件