nacos替代config-server和Euraka

按照Nacos Spring Cloud 快速开始Nacos Spring Boot 快速开始,将我之前项目依赖的config-server和Euraka替换过来,过程并不是那么顺利
提示找不到配置

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.druidConfig': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.datasource.url' in value "${spring.datasource.url}"

1 spring boot
版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本,这个官方有说明

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

application.properties如下

nacos.config.server-addr=10.101.5.147:8847

按照下图配置,我的疑问是@NacosPropertySource写死dataId,如果更改环境呢?另外获取配置的中的值要使用com.alibaba.nacos.api.config.annotation.NacosValue,而不是org.springframework.beans.factory.annotation.Value
1
如果按照下图注释掉NacosPropertySource,则需要在启动的时候增加Active profilesbdo-test切换过去了。但这样并不完美。

1
1
因为还是有问题:
问题一:@NacosValue中autoRefreshed默认值为false,那么是否每一个配置变量都夭加上autoRefreshed = true呢?而@NacosPropertySource(dataId = "bdo-dev", autoRefreshed = true)是全部默认的
问题二:部署到测试环境怎么切换这边配置的环境呢?
2 spring cloud
上线的springboot遇到一些疑问,springcloud使用nacos就相对容易很多,可是springboot与springcloud之前差距真的很大吗?
pom.xml中

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

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

在使用到配置的程序中需要使用org.springframework.cloud.context.config.annotation.RefreshScope即可,org.springframework.beans.factory.annotation.Value则不用改变。
1
把nacos作为注册中心,增加@EnableDiscoveryClient

import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;

@Slf4j
@SpringBootApplication
@ComponentScan(basePackages = { "com.test.*" })
@MapperScan("com.test.**.dao")
@EnableScheduling
@EnableFeignClients(basePackages = { "com.test.*" })
@EnableCaching
@EnableDiscoveryClient
public class BdoParentApplication {

    public static void main(String[] args) {
        try {
            System.setProperty("es.set.netty.runtime.available.processors", "false");
            SpringApplication.run(BdoParentApplication.class, args);
        } finally {
            log.info("server start finish");
        }
    }
}

bootstrap.yml如下,这里通过命令空间id来判断是属于哪个环境

spring:
  application:
    name: bdo
  cloud:
    nacos:
      discovery:
        server-addr: 10.101.5.147:8847
        namespace: 012e6aa3-a6d6-4a6c-9cfb-93f5e4d76667
      config:
        server-addr: 10.101.5.147:8847
        file-extension: yml
        namespace: 012e6aa3-a6d6-4a6c-9cfb-93f5e4d76667

1
可以在浏览器中通过http://10.101.5.147:8847/nacos/v1/cs/configs?dataId=bdo&group=DEFAULT_GROUP&tenant=012e6aa3-a6d6-4a6c-9cfb-93f5e4d76667看看是否能获取到配置,参数根据自己的调整.
在服务管理中服务列表中发现有些问题,因为服务注册到public下面了,正确的是应该是在DEV下面,怎么解决这个问题呢?那是因为spring.cloud.nacos.discovery.namespace没有配置导致的
1
如果把nacos当成注册中心又当成配置中心,则bootstrap.yml中设置这样就可以了。

nacos:
  server-addr: 10.101.5.147:8847
  namespace: 012e6aa3-a6d6-4a6c-9cfb-93f5e4d76667
spring:
  application:
    name: bdo
  cloud:
    nacos:
      discovery:
        server-addr: ${nacos.server-addr}
        namespace: ${nacos.namespace}
      config:
        server-addr: ${nacos.server-addr}
        file-extension: yml
        namespace: ${nacos.namespace}

可以在com.alibaba.nacos.client.config.http.ServerHttpAgenthttpGet方法中设置断点,注意如果server-addr是域名,则需要hs.nacos.com:80,添加上80端口.
3 springmvc
按照下面的配置固然可以加载进来,但是缺点就是nacos自身的配置也写在xml里面,如果想properties和xml分离,就有些困难了。
nacos中Properties中如果有中文,直接发包会报js错误,如果先发布不带中文,然后编辑后再写入中文,提示语法错误,但是可以发布

<dependency>
			<groupId>com.alibaba.nacos</groupId>
			<artifactId>nacos-spring-context</artifactId>
			<version>0.3.1</version>
		</dependency>
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:nacos="http://nacos.io/schema/nacos"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://nacos.io/schema/nacos http://nacos.io/schema/nacos.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--开启注解-->
    <nacos:annotation-driven></nacos:annotation-driven>
    <!--指定nacos配置地址-->
    <nacos:global-properties server-addr="hs.nacos.com:80" namespace="f730605f-e19a-4207-82d4-3b76e8d1e54f"/>
    <!--指定dataId,group-id, 是否是自动刷新-->
    <nacos:property-source data-id="peb-web" group-id="DEFAULT_GROUP" auto-refreshed="true" />

</beans>

1
4 问题清单
4.1 数字问题
连接mysql访问拒绝,一开始以为是配置的问题,发现好像没什么错。原始yml将000000当成了数字,故这类字符,应该加上引号

02:00:33.873 ERROR com.alibaba.druid.pool.DruidDataSource - create connection SQLException, url: jdbc:mysql://10.101.100.30:3306/peb?characterEncoding=UTF-8, errorCode 1045, state 28000
java.sql.SQLException: Access denied for user 'root'@'10.101.10.99' (using password: YES)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:870)
	at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1659)

1
出现下面的问题,在yml中增加spring.main.allow-bean-definition-overriding=true

The bean 'dataSource', defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class], could not be registered. A bean with that name has already been defined in class path resource [com/dzmsoft/ucs/user/server/config/DruidConfig.class] and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

如果要关掉nacos配置

spring:
  cloud:
    nacos:
      config:
        enabled: false
      discovery:
        enabled: false
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

warrah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值