spring cloud Nacos配置管理(一)https://developer.aliyun.com/article/1392089
完整代码:
package cn.onenewcode.user.web; import cn.onenewcode.user.pojo.User; import cn.onenewcode.user.service.UserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @Slf4j @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @Value("${pattern.dateformat}") private String dateformat; @GetMapping("now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat)); } // ...略 }
在页面访问,可以看到效果:
2021.5之前的版本从微服务拉取配置
因为之后的版本spring cloud取消了bootstrap.yaml配置,所以我们需要把内容配置在application.yml。我们只需要把内容改为以下就行
spring: application: name: userservice profiles: active: dev datasource: url: jdbc:mysql://192.168.218.134:3306/cloud?useSSL=false username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver config: import: - optional:nacos:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} cloud: nacos: config: server-addr: 192.168.218.134:8848 # import-check: # enabled: false # group: DEFAULT_GROUP file-extension: yaml # namespace: public discovery: cluster-name: HZ # 集群名称 server-addr: 192.168.218.134:8848
配置热更新
我们最终的目的,是修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新。
要实现配置热更新,可以使用两种方式:
方式一
在@Value注入的变量所在类上添加注解@RefreshScope:
方式二
使用@ConfigurationProperties注解代替@Value注解。
在user-service服务中,添加一个类,读取patterrn.dateformat属性:
package cn.onenewcode.user.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @Data @ConfigurationProperties(prefix = "pattern") public class PatternProperties { private String dateformat; }
在UserController中使用这个类代替@Value:
完整代码:
package cn.onenewcode.user.web; import cn.onenewcode.user.config.PatternProperties; import cn.onenewcode.user.pojo.User; import cn.onenewcode.user.service.UserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; 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; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @Slf4j @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @Autowired private PatternProperties patternProperties; @GetMapping("now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat())); } // 略 }