springboot+nacos配置管理

nacos在项目中的作用

在项目中某些配置修改时需要重新打包项目或者修改配置文件,这些操作都需要对服务进行更新重启,而有些不影响服务正常运行的配置修改对服务更新重启是可以避免的,使用nacos就可以解决这类问题

我在项目中整合nacos所遇到的问题

1.nacos的版本要严格与项目中springboot的版本相符不然配置无效,springboot是1.x的版本对应nacos版本0.1.x,springboot是2.x的版本对应nacos版本0.2.x(在刚开始将nacos整合到项目中时没有仔细看文档,这个问题困扰了我一天多)
2.nacos的版本问题,我在项目中刚开始用的nacos的版本是0.1.4,这个版本的配置项中是没有账号密码的配置项的,而服务器部署的nacos的版本是2.0可以设置连接权限即连接nacos需要账号密码,联调时导致我一直连接不上服务器上的nacos,将项目中nacos的版本换成0.1.6最终解决

在项目中部署nacos

1.我在nacos客户端建的配置文件:
springboot+nacos配置管理_第1张图片
2.项目中引入nacos的依赖


        
        
            com.alibaba.boot
            nacos-config-spring-boot-starter
            0.1.6
        

3.项目配置文件
springboot+nacos配置管理_第2张图片server.port、server.context-path和日志配置不能迁移到nacos配置中心去,因为nacos的配置文件优先级比较低,如果迁移过去这些配置会被默认的配置覆盖
server-addr是nacos服务的ip和端口,如果有经过nginx转发,可以填nginx转发的ip和端口,我本地连接nacos是经过nginx转发的,服务器部署直接走内网nacos的ip和端口
username和password如果nacos配置文件中的nacos.core.auth.enabled=true即开启权限验证,项目的配置文件就需要配置账号和密码
namespace指的是客户端自己创建的命名空间id,如果使用的是默认的public命名空间这个不用配置

4.项目启动类配置:
springboot+nacos配置管理_第3张图片springboot+nacos配置管理_第4张图片我微信模块和注册模块用了两种不同的配置方式@NacosPropertySource和@NacosPropertySources,因为每个模块需要用到两种配置文件,分别是主模块配置文件和通用配置文件,这里我需要在nacos配置两个配置文件的dataId和groupId

5.监测是否有连上nacos的测试类

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;

import java.io.IOException;
import java.util.Date;
import java.util.Properties;
import java.util.concurrent.Executor;

/**
 * @author:zhanggaowei
 * @date: 2020/4/8
 */
public class nacosTest {
    public static void main(String[] args) throws NacosException, IOException {
        String serverAddr = "172.16.xx.xx:80";
        String dataId = "wechat-application";
        String groupId = "WECHAT_GROUP";
        String namespace = "15137861-7756-47af-a9aa-xxxxxx";
        Properties properties = new Properties();
        properties.put("serverAddr",serverAddr);
        properties.put("namespace",namespace);
        properties.put("username","admin");
        properties.put("password","xxxxxxx");
        ConfigService configService = NacosFactory.createConfigService(properties);
        String content = configService.getConfig(dataId,groupId,5000);
        String content1 = configService.getConfig("default-api","DEFAULT_GROUP",5000);
        System.out.println("first receive:"+content);
        System.out.println("second receive:"+content1);
        configService.addListener(dataId, groupId, new Listener() {
            @Override
            public Executor getExecutor() {
                return null;
            }

            @Override
            public void receiveConfigInfo(String configInfo) {
                System.out.println("currentTime:"+new Date()+",receive:"+configInfo);
            }
        });
        int n = System.in.read();
    }
}

原来使用的@Value注解我并没有完全换成@NacosValue,看了下源码,其实这两个注解区别不大,只是@NacosValue注解多了个自动刷新的配置项(哈哈,个人理解不一定对)

你可能感兴趣的:(java,nacos)