最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring的@Value如何從Nacos配置中心獲取值并自動刷新

 更新時間:2022年07月08日 11:25:45   作者:chuixue24  
這篇文章主要介紹了Spring的@Value如何從Nacos配置中心獲取值并自動刷新,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@Value從Nacos配置中心獲取值并自動刷新

在使用Nacos作為配置中心時,除了@NacosValue可以做到自動刷新外,nacos-spring-context:0.3.4版本是支持@Value獲取Nacos配置中心的值,并動態(tài)刷新的,該功能是Spri依靠ngValueAnnotationBeanPostProcessor類來實現(xiàn):

@Override
?? ?protected Tuple<String, NacosValueTarget> doWithAnnotation(String beanName,
?? ??? ??? ?Object bean, Value annotation, int modifiers, Method method, Field field) {
?? ??? ?if (annotation != null) {
?? ??? ??? ?if (Modifier.isStatic(modifiers)) {
?? ??? ??? ??? ?return Tuple.empty();
?? ??? ??? ?}
?
?? ??? ??? ?if (bean.getClass().isAnnotationPresent(NacosRefresh.class)) {
?? ??? ??? ??? ?String placeholder = resolvePlaceholder(annotation.value());
?
?? ??? ??? ??? ?if (placeholder == null) {
?? ??? ??? ??? ??? ?return Tuple.empty();
?? ??? ??? ??? ?}
?
?? ??? ??? ??? ?NacosValueTarget nacosValueTarget = new NacosValueTarget(bean, beanName,
?? ??? ??? ??? ??? ??? ?method, field);
?? ??? ??? ??? ?nacosValueTarget.setAnnotationType(getAnnotationType().getSimpleName());
?? ??? ??? ??? ?logger.debug("@Value register auto refresh");
?? ??? ??? ??? ?return Tuple.of(placeholder, nacosValueTarget);
?? ??? ??? ?}
?? ??? ?}
?? ??? ?return Tuple.empty();
?? ?}

分析其源碼可以看到,如果bean上有注解@NacosRefresh,則會自動刷新。

在實際使用時,發(fā)現(xiàn)bean上的注解是@Configuration則不會自動刷新,而使用@Component則可以做到自動刷新。

代碼如下:

@NacosRefresh
//@Component
@Configuration
public class BeanTest {
? ??
? ? @Value("${autofresh.test}")
? ? private String testValue;
? ??
? ? @NacosValue(value="${autofresh.test2}",autoRefreshed = true)
? ? private String testValue2;
?
? ? /**
? ? ?* @return the testValue2
? ? ?*/
? ? public String getTestValue2() {
? ? ? ? return testValue2;
? ? }
?
? ? /**
? ? ?* @param testValue2 the testValue2 to set
? ? ?*/
? ? public void setTestValue2(String testValue2) {
? ? ? ? this.testValue2 = testValue2;
? ? }
?
? ? /**
? ? ?* @return the testValue
? ? ?*/
? ? public String getTestValue() {
? ? ? ? return testValue;
? ? }
?
? ? /**
? ? ?* @param testValue the testValue to set
? ? ?*/
? ? public void setTestValue(String testValue) {
? ? ? ? this.testValue = testValue;
? ? }
}

測試類:

@Test
? ? ?public void testValueRefreshinNacos() throws InterruptedException {
? ? ? ? System.out.println(beanTest.getTestValue());
? ? ? ? System.out.println(beanTest.getTestValue2());?
? ? ? ? System.out.println("------修改前");
? ? ? ??
? ? ? ? Thread.sleep(1000*60);
? ? ? ??
? ? ? ? System.out.println(beanTest.getTestValue());
? ? ? ? System.out.println(beanTest.getTestValue2());?
?
? ? ? ? System.out.println("------修改后");
? ? ?}

  

這就和@Component與@Configuration的區(qū)別有關(guān)了,@Component注解的bean是原生bean,@Configuration是被cglib動態(tài)增加的bean。

Nacos屬性值自動刷新

1.@NacosValue獲取最新值

引入jar包:  

? ? ? ? ? <dependency>
? ? ? ? ? ? ? ? ?<groupId>com.alibaba.boot</groupId>
? ? ? ? ? ? ? ? ?<artifactId>nacos-config-spring-boot-starter</artifactId>
? ? ? ? ? ? ? ? ? <version>0.2.7</version>
? ? ? ? ? ? </dependency>

編寫配置類:

? ? ? ?@Configuration
? ? ? ?@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))
? ? ? ?@NacosPropertySource(dataId = "example", group="test",autoRefreshed = true)
? ? ? ? public class NacosConfiguration { }

編寫測試類:

? ? ? ?@Controller
? ? ? ?public class ConfigController {
? ? ? ? ?@NacosValue(value = "${test.data}", autoRefreshed = true)
? ? ? ? ? ?private boolean data; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? @RequestMapping(value = "/test", method = GET)
? ? ? ? ? @ResponseBody
? ? ? ? ? public boolean get() { return data; }
? ? ? }

2.@Value獲取最新值

引入jar包:  

<dependency>
? ? <groupId>com.alibaba.cloud</groupId>
? ? <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
? ? <version>2.2.1.RELEASE</version>
</dependency>

引入配置:

spring:
? application:
? ? name: example
? cloud:
? ? nacos:
? ? ? config:
? ? ? ? extension-configs[0]:
? ? ? ? ? dataId: test.yml
? ? ? ? ? group: test
? ? ? ? ? refresh: true
? ? ? ? server-addr: ?127.0.0.1:8848
? ? ? ? namespace: c845e96f-4423-4618-8c26-5e4d510f566a
? ? ? ? enabled: true
? ? ? ? refresh-enabled: true

編寫測試類:

@RestController
@RefreshScope
public class TestController {
? ? @NacosValue(value = "${test.data}", autoRefreshed = true)
? ? private String data;
? ? @Value(value = "${test.data}")
? ? private String datas;
? ? @GetMapping("test")
? ? public String test() {
? ? ? ? return "data :" + data + ",datas="+datas;
? ? }
}

備注:

方式一@NacosValue獲取最新值nacos配置信息需要寫在配置類上

方式二@NacosValue獲取不到值(如果需要使用該注解需要引入方式一的jar,但是不重啟服務(wù)獲取不到最新值),@Value獲取最新值一定要加@RefreshScope注解,配置文件中配置refresh: true

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java超詳細講解ArrayList與順序表的用法

    Java超詳細講解ArrayList與順序表的用法

    ArrayList 類是一個可以動態(tài)修改的數(shù)組,與普通數(shù)組的區(qū)別就是它是沒有固定大小的限制,我們可以添加或刪除元素。ArrayList 繼承了 AbstractList ,并實現(xiàn)了 List 接口,順序表是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關(guān)系由它們的存儲順序自然表示
    2022-06-06
  • Mybatis之Select Count(*)的獲取返回int的值操作

    Mybatis之Select Count(*)的獲取返回int的值操作

    這篇文章主要介紹了Mybatis之Select Count(*)的獲取返回int的值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • SpringBoot程序的打包與運行的實現(xiàn)

    SpringBoot程序的打包與運行的實現(xiàn)

    本文主要介紹了SpringBoot程序的打包與運行的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Java實現(xiàn)簡易學(xué)籍管理系統(tǒng)

    Java實現(xiàn)簡易學(xué)籍管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡易學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java讀取xml文件的五種方式

    Java讀取xml文件的五種方式

    在編寫與 XML 數(shù)據(jù)交互的現(xiàn)代軟件應(yīng)用時,有效地讀取和解析 XML 文件是至關(guān)重要的,本文旨在探討 Java 中處理 XML 文件的五種主要方法:DOM、SAX、StAX、JAXB 和 JDOM,我們將詳細介紹每種方法的工作原理、典型用途以及如何在 Java 程序中實現(xiàn)它們
    2024-05-05
  • 解決BeanUtils.copyProperties之大坑

    解決BeanUtils.copyProperties之大坑

    這篇文章主要介紹了解決BeanUtils.copyProperties之大坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot中實現(xiàn)分布式的Session共享的詳細教程

    SpringBoot中實現(xiàn)分布式的Session共享的詳細教程

    這篇文章主要介紹了SpringBoot中實現(xiàn)分布式的Session共享,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Java紅黑樹的數(shù)據(jù)結(jié)構(gòu)與算法解析

    Java紅黑樹的數(shù)據(jù)結(jié)構(gòu)與算法解析

    紅黑樹問題是各大計算機考研命題以及面試算法題目中的熱門,接下來我們?yōu)榇蠹覉D解紅黑樹的數(shù)據(jù)結(jié)構(gòu)與算法解析,需要的朋友可以參考下
    2021-08-08
  • 基于strict-origin-when-cross-origin問題的解決

    基于strict-origin-when-cross-origin問題的解決

    這篇文章主要介紹了基于strict-origin-when-cross-origin問題的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring異常捕獲且回滾事務(wù)解決方案

    Spring異常捕獲且回滾事務(wù)解決方案

    這篇文章主要介紹了Spring異常捕獲且回滾事務(wù)解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06

最新評論

正宁县| 桓台县| 全椒县| 博爱县| 泗阳县| 临桂县| 鲜城| 祁东县| 涿州市| 武汉市| 防城港市| 呼玛县| 宁津县| 罗定市| 云林县| 五峰| 柏乡县| 镇赉县| 五大连池市| 大足县| 巴林右旗| 桓台县| 大化| 宝丰县| 蚌埠市| 乐至县| 阳江市| 淮滨县| 望江县| 贵阳市| 保靖县| 上饶市| 文水县| 桓仁| 大厂| 勃利县| 沙田区| 武宣县| 和田市| 鄢陵县| 射洪县|