微服務從nacos配置中心獲得配置信息


一,安裝nacos, 略

二,創建父工程和微服務工程 service1, service2,以idea為例

  1, new -> project -> Maven -> 填寫groupid等信息 -> finish

  2,new -> module -> Maven -> 填寫ArtifactId -> finish

三,父工程pom.xml中加入版本控制 (因為用到了spring-cloud, spring-cloud-alibaba, spring-boot相關的包)

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

四,service1, service2加入依賴(因為都是springboot應用,且都是用nacos作為配置中心)

<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>
    </dependencies>

五,實現service1, service2(此處以service1為例)

  1,編寫啟動類

@SpringBootApplication
public class Service1Application {
    public static void main(String[] args) {
        SpringApplication.run(Service1Application.class, args);
    }
}

  2,配置bootstrap.yml (nacos作為配置中心使用時,配置信息應寫在bootstrap.yml文件中,而非application.yml)

server:
  port: 8081
spring:
  application:
    name: service1
  cloud:
    nacos:
      config:
        server-addr: 172.0.0.1:8848
        namespace: c22e5019-0bee-43b1-b80b-fc0b9d847501
        file-extension: yaml
        group: NACOS-CONFIG

  3,寫controller,從nacos獲取配置信息

@RestController
@RequestMapping("/demo")
public class DemoController {

    //動態更新需要用到這個對象
    @Autowired
    private ConfigurableApplicationContext applicationContext;

    //直接通過@Value注解就能獲取nacos配置中心的數據,但這種寫法不能實現動態更新
    @Value(value = "${name}")
    private String name;

    @GetMapping("/test")
    public String test(){
        return "test " + applicationContext.getEnvironment().getProperty("name");
    }
}

注:

//@NacosValue注解按字面理解,應該此注解就實現了動態更新,但經測試取到數據為null,不知是因為pom中引入的是sping-cloud依賴的原因還是其它原因,待確定!

@NacosValue(value = "${name}", autoRefreshed = true)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM