先说一个知识点,springboot配置文件加载顺序
bootstrap.properties
--> bootstrap.yml
-->
application.properties
--> application.yml
其中bootstrap.properties一定会加载,我们打包后分渠道启动的时候,可以给不同渠道配置文件后面加上“-渠道名”
启动jar包的时候添加“–spring.profiles.active=渠道名”方式启动
例如 我们配置测试环境(test)和开发环境(dev)的bootstrap.properties
可以写成bootstrap-dev.properties,bootstrap-test.properties
jar包启动的命令:
# 启动开发环境
java -jar 你的jar包.jar --spring.profiles.active=dev
# 启动测试环境
java -jar 你的jar包.jar --spring.profiles.active=dev
如果在idea中直接启动,可配置启动参数
安装
官网
这里我使用docker 安装
注意
:我们启动容器的时候加上 -d 让容器在后台运行
安装之后,通过ip+端口的方式访问
http://你的ip地址:8848/
spring cloud注册服务提供者
-
添加依赖,这里我使用的是2.2.0.RELEASE
<!--nacos 服务注册与发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.0.RELEASE</version> </dependency>
-
配置 Nacos server 的地址和应用名
spring: # nacos 中的服务名 application: name: banner # nacos注册中心地址 cloud: nacos: discovery: server-addr: 47.105.148.35:8848 # 这里我多增加了一个属性后面测试用例中使用 app: name: banner
-
@SpringBootApplication注解上方添加注解
// 开启服务注册发现功能 @EnableDiscoveryClient
-
提供给一个controller方法,供他人调用
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/banner")
public class BananerContorller {
@Value("${app.name}")
private String appName;
@GetMapping("/getAppName")
public String getAppName(){
return "my appName is : "+appName;
}
}
启动工程后可以通过http://localhost:8080/banner/getAppName调用方法
启动工程后可以在nacos控制台中看到
spring cloud使用服务消费者
- 添加feign注解,我这里使用2.2.2.RELEASE版本
<!--服务消费者使用的feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
-
@SpringBootApplication注解上方添加注解@EnableFeignClients
-
编写一个service接口调用banner工程的方法,
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; // banner工程的工程名 @FeignClient(name="banner") public interface IBannerService { // banner工程中的调用路径 @GetMapping(value="/banner/getAppName") public String getAppName(); }
-
编写一个controller 调用service接口
import com.sb.mbp.service.IBannerService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class FeignController { @Autowired private IBannerService iBannerService; @GetMapping("/getBannerAppName") public String getBannerAppName(){ return iBannerService.getAppName(); } }
启动之后,通过ip
+端口
+/getBannerAppName
的方式请求一下。能收到banner工程/banner/getAppName接口的返回值
使用配置中心读取动态参数
这里我们以banner工程为例进行添加
在nocos中添加配置:
这里我使用yaml格式的文件
工程中使用:
- 添加依赖
<!--接入配置中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.0.RELEASE</version> </dependency>
- 在bootstrap.properties中添加配置中心
# canos中配置文件的id
spring.application.name=banner-config
spring.cloud.nacos.config.server-addr=canos机器的ip:8848
# 配置文件类型
spring.cloud.nacos.config.file-extension=yaml
- 添加注解@RefreshScope
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// 动态参数注解
@RefreshScope
@RestController
@RequestMapping(value = "/banner")
public class BananerContorller {
@Value("${app.name}")
private String appName;
@GetMapping("/getAppName")
public String getAppName(){
return "my appName is : "+appName;
}
}
启动工程后我们请求接口,能获取到配置文件中的app.name。不用重启工程, 直接修改canos中的值,再次请求接口也能获取到变化后的值
多环境配置
我们可以在canos中配置同一工程的不同环境的配置,通过Data Id后面添加 -渠道
的方式
像这样之前的配置是:banner-config.yaml
,可以添加测试环境配置banner-config-test.yaml
,生产环境banner-config-prod.yaml
在bootstrap.properties中多添加一个配置指定使用的后缀
例如下面的配置对应canos配置文件的id是:banner-config-test.yaml
spring.profiles.active=test
spring.application.name=banner-config
spring.cloud.nacos.config.server-addr=canosip:8848
spring.cloud.nacos.config.file-extension=yaml