spring2020.0.4使用nacos2.0.3作为注册中心案例

1、nacos下载安装

nacos安装比较简单,可直接从github中下载release发布包,https://github.com/alibaba/nacos/releases,window下载zip包,linux下载tar包即可,启动nacos需要先安装好jdk环境

修改配置文件application.properties,取消注释db连接配置项,配置好对应的数据库连接

db.num=1
db.url.0=
db.user.0=
db.password.0=

启动单机版nacos

./startup.sh -m standalone

打开管理后台页面

http://192.168.80.20:8848/nacos
默认用户名密码为nacos/nacos

集群版nacos需要在单机版的基础上增加配置cluster.conf,例如如下配置

192.168.80.130:8848
192.168.80.131:8848
192.168.80.132:8848

配置完成后,三台机器均startup.sh启动即可

nacos服务启动比较简单,可以看到功能菜单有配置管理、服务管理、集群管理等相关功能;

2、spring-boot中使用nacos作为配置中心

当前nacos-config-spring-boot-starter的最新版本0.2.10,可以跟踪到其对应的spring-boot版本为2.0.3.RELEASE,为了减少包的依赖冲突或缺失,直接使用此版本演示nacos作为配置中心;

配置方式

说明

方式一

@EnableNacosConfig,同时需要在配置文件中指定相应的配置项

方式二

@NacosPropertySource,直接在java类中指定配置项

方式一

> 1、启动类中增加 @EnableNacosConfig
> 2、applicaion.yaml增加以下配置
nacos:
  config:
    server-addr: 192.168.80.120:8848
    type: yaml
    data-id: nacos-config
    auto-refresh: true
    bootstrap:
      enable: true
    group: dev

方式二

> 1、启动类中增加 @NacosPropertySource(dataId = "nacos-config",groupId = "dev",autoRefreshed = true,type = ConfigType.YAML)
> 2、applicaion.yaml增加以下配置
nacos:
  config:
    server-addr: 192.168.80.120:8848

配置完成后在代码中使用@NacosValue(value = "${app.name:default}",autoRefreshed = true)即可完成动态加载nacos配置的参数; 需要注意默认的配置方式为properties,以上两种方式均改成了yaml,参考代码可查看gitee https://gitee.com/viturefree/spring-cloud-nacos-config.git

引入数据库依赖包,此处使用jdbcTemplate模拟数据库查询


    org.springframework.boot
    spring-boot-starter-data-jpa


    mysql
    mysql-connector-java

项目中增加数据连接配置

spring:
  datasource:
    url: jdbc:mysql://192.168.80.120:3306/test?useSSL=false
    username: root
    password: 123456

写一个简单语句完成验证,如下

Date result = jdbcTemplate.queryForObject("select now()", Date.class);

当程序正常运行时,尝试修改nacos中配置的数据库连接的密码,发现依然正常访问,说明并没有生效。简单分析一下原因,数据库的连接配置是通过DataSourceProperties类获取,其指定的配置项参数为@ConfigurationProperties(prefix = "spring.datasource"),很直观地就会想到这个配置初始化完就不会再变更了。

默认连接池对应的数据源是HikariDataSource,而jdbcTemplate获取连接方法DataSourceUtils.fetchConnection调用的是HikariDataSource.getConnection,继续查看getConnection方法,关键代码如下

private volatile HikariPool pool;

   @Override
   public Connection getConnection() throws SQLException
   {
      ...
      HikariPool result = pool;
      if (result == null) {
      ...

可以看到是从连接池中获取的连接,因此为了实现这个动态变更参数的效果(只演示变更密码),可以简单模拟一下将pool置为空,再次调用方法getConnection时会使用新的配置重新初始化HikariPool,此时将应用到变更后的密码,代码如下

@Autowired
ApplicationContext context;

@NacosValue(value = "${spring.datasource.password:123456}", autoRefreshed = true)
private String password;

public void test() throws Exception {
    ...
    HikariDataSource dataSource = context.getBean(HikariDataSource.class);
    dataSource.setPassword(password);
    Field field = dataSource.getClass().getDeclaredField("pool");
    Method method = HikariPool.class.getDeclaredMethod("shutdown");
    method.setAccessible(true);
    field.setAccessible(true);
    if (dataSource != null && field.get(dataSource)!=null) {
        method.invoke(field.get(dataSource));
        field.set(dataSource, null);
    }
	...
}

可查看代码gitee https://gitee.com/viturefree/spring-cloud-nacos-config.git release分支

3、spring-cloud使用nacos作为注册中心

此部分包含两个模块,服务端和客户端。通常情况下,微服务即是客户端又是服务端,既需要调用其他微服务同时又对外提供服务。

服务依赖的配置


    org.springframework.cloud
    spring-cloud-starter-alibaba-nacos-discovery
    0.9.0.RELEASE
    
        
            com.alibaba.nacos
            nacos-client
        
    


    com.alibaba.nacos
    nacos-client
    2.0.3

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.80.120:8848
        ip: 192.168.80.120

同时启动类增加@EnableDiscoveryClient注解

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.80.120:8848
        register-enabled: false

同样需要在启动类增加@EnableDiscoveryClient注解,并定义RestTemplate Bean

@LoadBalanced
@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

其中register-enabled: false表示不将此服务注册到nacos注册中心。

代码示例gitee https://gitee.com/viturefree/spring-cloud-nacos-discovery.git

展开阅读全文

页面更新:2024-03-10

标签:中心   集群   服务端   客户端   数据库连接   案例   参数   代码   简单   方式   动态

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top