SpringCloud
SpringCloudAlibaba工程构建
父工程中的导入依赖进行统一版本管理,版本对应参考网址:
- springCloud对应SpringBoot版本:https://spring.io/projects/spring-cloud#overview
- springCloud对应SpringCloudAlibaba:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
父工程导入依赖:
<dependencyManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2022.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2022.0.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.1.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
子工程依赖为:
<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>
注意:子工程中的SpringBoot配置文件必须为application.xxxx,否则无法正确加载配置文件
启动nacos服务
注意:
在2.2.0.1和2.2.1版本时,必须执行此变更,否则无法启动;其他版本为建议设置。
修改conf目录下的application.properties文件。
设置其中的nacos.core.auth.plugin.nacos.token.secret.key值,详情可查看鉴权-自定义密钥.
注意,文档中的默认值SecretKey012345678901234567890123456789012345678901234567890123456789和VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=为公开默认值,可用于临时测试,实际使用时请务必更换为自定义的其他有效值。
可以修改start.cmd中的启动模式为单例模式或者是集群模式(standalone/cluster);
服务启动后,访问默认网址http://localhost:8848/nacos/index.html进行服务管理
服务调用
使用Ribbon的负载均衡来调用服务
在配置类中添加RestTemplate来获取服务
注意:在springCloud2022.0.0.1版本中使用@LoadBalanced注解,需要先在pom中添加spring-cloud-starter-loadbalancer的依赖才会产生作用
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
在要使用的类中自动装配restTemplate,使用value获取配置文件中的微服务访问的地址
@Autowired
private RestTemplate restTemplate;
@Value("${url-config-name}")
private String url;
@GetMapping
public String getName(){
return restTemplate.getForEntity(url+"param",String.class)
}
nacos配置中心
导入依赖
注意:因为版本原因,需要导入bootstrap依赖才能成功启动
<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-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
在nacos中添加一个配置文件,设置命名空间(默认为public),组别
配置文件通过命名空间和组别实现多类型和需求配置文件的管理
在配置文件中填写要读取的配置文件的信息,如:
server:
port: 10000
spring:
application:
name: nacos-config
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
# 文件扩展名
file-extension: yaml
# 命名空间
namespace: b4e69e6f-aa29-408f-858c-c9bac446eb83
# 共享配置文件,可以有多个
## 默认为DEFAULT_GROUP
shared-configs:
- data-id: nacos-config-dev.yaml
# 是否自动刷新,默认为否
refresh: true
group: ORDER_GROUP
- data-id: nacos-config-dev.yaml
refresh: true
profiles:
active: dev
新建一个controller来测试,直接使用@Value注解来读取配置文件信息
使用@RefreshScope注解来实现自动刷新
@RestController
@RefreshScope
public class TestController {
@Value("${services.url}")
private String str;
@Value("${services.url1}")
private String str2;
@GetMapping("/")
public String getStr() {
return str + "----" + str2;
}
}
数据持久化
nacos支持使用mysql实现数据持久化
默认情况下,文件保存在nacos-server/data/derby-data/中
要使用自定义数据库来保存数据,需要在/conf/application.properties配置文件中修改数据库配置项
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
spring.datasource.platform=mysql
spring.sql.init.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=username
db.password.0=password
然后使用mysql-schema.sql脚本自动新建数据库