Nacos config
Data ID 的命名格式是:{spring.application.name}.{file-extension}
其中的spring.application.name和file-extension在服务的yaml中配置。
测试代码
1. 配置nacos地址
spring:
application:
name: demo
cloud:
nacos:
config:
server-addr: localhost:8848
file-extension: yaml
discovery:
server-addr: localhost:8848
main:
allow-bean-definition-overriding: true
logging:
level:
com.alibaba.nacos.*: WARN
2. 获取配置并打印
ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args);
@SpringBootApplication
@ServletComponentScan
public class DemoApplication {
public static void main(String[] args) throws InterruptedException {
ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args);
while (true) {
//当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
String userName = applicationContext.getEnvironment().getProperty("dubbo.protocol.name");
String userAge = applicationContext.getEnvironment().getProperty("dubbo.protocol.port");
System.out.println("配置信息,名称:{},年龄:{}"+userName+" "+userAge);
TimeUnit.SECONDS.sleep(1);
}
}
}
Demo代码
参考上面的测试代码,我们已经可以获得nacos中的配置信息,现在只需要创建专门一个config类,来获取即可。
注意下这里的value的包不要导错import org.springframework.beans.factory.annotation.Value;
# nacos中dubbo的配置信息
dubbo:
scan:
base-packages: com.example.demo.service
protocol:
name: dubbo
port: 7702
registry:
address: nacos://localhost:8848
consumer:
timeout: 60000
check: false
application:
name: ${spring.application.name}
cloud:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class DubboConfig {
@Value("${dubbo.scan.base-packages}")
private String scanBasePackages;
@Value("${dubbo.protocol.name}")
private String protocolName;
@Value("${dubbo.protocol.port}")
private int protocolPort;
@Value("${dubbo.registry.address}")
private String registryAddress;
@Value("${dubbo.consumer.timeout}")
private int consumerTimeout;
@Value("${dubbo.consumer.check}")
private boolean consumerCheck;
@Value("${spring.application.name}")
private String applicationName;
// getters and setters
}
这样我们就算配置成功了。
如果别的类还需要用到这些配置信息,我们还可以
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class SomeService {
@Autowired
private DubboConfig dubboConfig;
public void someMethod() {
String scanBasePackages = dubboConfig.getScanBasePackages();
String protocolName = dubboConfig.getProtocolName();
int protocolPort = dubboConfig.getProtocolPort();
String registryAddress = dubboConfig.getRegistryAddress();
int consumerTimeout = dubboConfig.getConsumerTimeout();
boolean consumerCheck = dubboConfig.isConsumerCheck();
String applicationName = dubboConfig.getApplicationName();
// use these configuration properties
}
}