nacos安装与spring-boot使用



本文后续使用是在spring-boot应用中使用,注意说的spring-boot应用就是spring-boot应用,不要一谈sprinb-boot应用对一些中间件的使用,说是spring-boot使用,上来就依赖spring-cloud。

下载

下载地址,选择对应版本,这里后续选择的版本是2.0.2
https://github.com/alibaba/nacos/tags

maven依赖

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <nacos.version>0.2.10</nacos.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>${nacos.version}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-actuator</artifactId>
            <version>${nacos.version}</version>
        </dependency>
    </dependencies>

解压后到/conf目录下找到文件nacos-mysql.sql, 然后自己建立数据库连接等,执行sql语句

安装运行

单机

到/conf目录下修改配置文件application.properties其中的数据库连接部分,注释掉默认的内置数据库,然后修改为mysql,自己的数据库连接
在这里插入图片描述


单机启动,进入到/bin目录执行脚本

sh startup.sh -m standalone

nacos控制台访问地址为http://host:8848/nacos
默认用户名和密码都是nacos,登录后可以修改密码

端口开放

默认端口是8848,且可配置,但2.0以上版本如果是外网访问还需要开放另外两个端口,在上一个端口的基础上+1000,+1001,
如默认8848,即9848,9849,否则启动不会报错,刷新不会生效,也获取不到配置,跟踪代码发现是报错401, 未连接


基本使用

spring-boot使用必看
配置中心配置类使用
配置注解

上面三个官方文档把用到的配置和注解说的非常清楚了,下面不会具体在详细说明。

控制台添加配置文件

使用namespace来做多环境区分, group就采用默认名称就行,注意命名空间ID,这个有用,后续是用这个ID而不是名称
在这里插入图片描述

切到刚添加的命名空间,然后添加自己的配置,注意DataId和Group,类似于定位配置的坐标,后续配置中会用到
先新增一个基本的key-value形式的配置文件,注意无论是注入一个属性类包含多个字段,还是仅仅只是一个字段,都必须有一个载体,都必须创建一个配置。
下面先创建两个配置, 注意配置格式,按照自己的喜好,后续使用时对应上就好。
在这里插入图片描述
在这里插入图片描述

代码编写

1. 配置nacos

在项目中引入nacos的基础配置,注意如果是spring-boot应用,就用spring-{profile}对应的配置文件编写即可。
具体含义可参考,上面已经给出了这个链接。

nacos:
  config:
    server-addr: localhost:8848
    username: nacos
    password: nacos
    auto-refresh: true
    config-retry-time: 3000
    namespace: dev
    type: yaml
    data-id: config-server

2. 编写配置类

https://nacos.io/zh-cn/docs/nacos-spring.html

config-properties配置对应的代码配置类,注意这里故意比上面配置文件中少一个,就是为了演示,获取单个字段的值,而不是在对象中获取,但是也要有一个载体把dataId引入进来

@Data
@NacosPropertySource(dataId = "config-properties", type = ConfigType.PROPERTIES, autoRefreshed = true)
@Component
public class DynamicPropertySource {

    @NacosValue(value = "${name:}", autoRefreshed = true)
    private String name;

    @NacosValue(value = "${price:0}")
    private Integer price;

}

config-server对应的配置类

@NacosConfigurationProperties(prefix = "user-info", dataId = "config-server", type = ConfigType.YAML, autoRefreshed = true)
@Component
@Data
public class DynamicProperties {

    private String name;

    private Integer age;

    private String address;
}

3. 测试代码
@RestController
@RequestMapping("/nacos")
@RequiredArgsConstructor(onConstructor_={@Autowired})
public class NacosController {

    private final DynamicProperties dynamicProperties;

    private final DynamicPropertySource dynamicPropertySource;

    @NacosValue(value = "${singleValue: nothing}", autoRefreshed = true)
    private String singleValue;

    @NacosInjected
    private ConfigService configService;

    /**
     * 演示单字段注入
     *
     * @return
     */
    @GetMapping("singleValue")
    public String singleValue() {
        return singleValue;
    }

    /**
     * 演示动态属性注入
     *
     * @return
     */
    @GetMapping("dynamicProperties")
    public DynamicProperties dynamicProperties() {
        return dynamicProperties;
    }

    /**
     * 演示动态PropertySource注入
     *
     * @return
     */
    @GetMapping("dynamicPropertySource")
    public DynamicPropertySource dynamicPropertySource() {
        return dynamicPropertySource;
    }
}

其中带了autoRefreshed=true语法的,在配置后台修改配置,然后点击发布, 重新获取值就可以发现值也会同步更新。但是试验下来@NacosPropertySource这种方式即使在类上加了这个属性,字段上如果不加也没用。再加上类上用了这个注解, 字段上还是要用@NacosValue,非常麻烦,感觉应该是自己使用姿势不对,暂时没找到对应文档。
还有一个问题, 在配置类上引入data-id,那么在spring-{profile}配置文件中即使不引入data-id也能正常使用。而如果在配置文件中引用,但是在配置类中不引用,反而无法使用。

进阶使用

经过基本使用的过程,还是能深刻体会到目前使用上的不方便的。最重要的是我们也想要获得和spring-cloud环境上可以将数据源等基础配置都交给配置中心来做的,但是目前在配置文件中添加了配置之后,在项目中根本找不到如何引入进来,直接在配置文件中引入data-id,完全不可行。
直到在这个文档地址看到一个属性nacos.config.bootstrap.enable=true,开启配置预加载功能。
那就将这个属性添加到application.yml中, 注意这里不是cloud环境,也没有cloud的依赖,不是bootstrap.yml, spring-boot环境就是spring-boot,非拿着spring-boot的标题去说spring-cloud,是怕别人不知道你懂spring-boot吗。好多中间件都是,就硬往spring-cloud环境上。
application.yml添加如下

nacos:
  config:
    bootstrap:
      enable: true

然后剩下的继续按照spring-{profile}中添加nacos的其它配置,这个时候就可以将项目中的配置都放到nacos中去了,比如数据库,各种中间件的连接配置都可以通过dataId引入的方式。
比如将数据库配置放入到nacos中,到nacos控制台添加对应配置

在这里插入图片描述

修改配置文件,引入dataId即可

nacos:
  config:
    server-addr: localhost:8848
    username: nacos
    password: nacos
    auto-refresh: true
    config-retry-time: 3000
    namespace: dev
    enable-remote-sync-config: false
    type: yaml
    data-id: config-server
    ext-config:
      - dataId: common-datasource
        type: yaml
        auto-refresh: false
      - dataId: config-properties
        type: properties
        auto-refresh: true

而且经过测试发现,这种方式,@NacosPropertySource也不需要在配置类上手动添加dataId即可正常使用了,只需要在配置文件中引入对应的dataId,即可将配置添加到spring的enviroment中

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要将nacosspring-boot-admin集成,需要进行以下步骤: 1. 在pom.xml中添加以下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.2.3</version> </dependency> ``` 2. 在application.properties中添加以下配置: ```properties spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 # nacos服务地址 spring.application.name=spring-boot-admin-server # 应用名 server.port=8080 # 服务端口 spring.boot.admin.server.url=http://localhost:${server.port} # spring-boot-admin服务地址 spring.boot.admin.client.url=http://localhost:${server.port} # spring-boot-admin客户端地址 management.endpoints.web.exposure.include=* # 开启所有端点 ``` 3. 在启动类上添加@EnableDiscoveryClient和@EnableAdminServer注解: ```java @SpringBootApplication @EnableDiscoveryClient @EnableAdminServer public class SpringBootAdminApplication { public static void main(String[] args) { SpringApplication.run(SpringBootAdminApplication.class, args); } } ``` 4. 在需要监控的应用中添加spring-boot-starter-actuator依赖,并在application.properties中添加以下配置: ```properties spring.boot.admin.client.url=http://localhost:8080 # spring-boot-admin服务地址 spring.boot.admin.client.username=admin # 认证用户名 spring.boot.admin.client.password=admin # 认证密码 ``` 5. 启动nacosspring-boot-admin服务,然后启动需要监控的应用,即可在spring-boot-admin控制台中查看应用的监控信息。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值