程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(2)

学习狂神说的SpringBoot + Dubbo + zookeeper的发现

发布于2021-03-13 13:41     阅读(677)     评论(0)     点赞(16)     收藏(0)




情况简述

狂神说SpringBoot17:Dubbo和Zookeeper集成_狂神说-CSDN博客

我跟着上面的文章做了一下,成功实现了。下面打包的是根据上面那个文章,配置好的dubbo-admin和zookeeper和文章里的SpringBoot + Dubbo + zookeeper的整合小项目。没要积分,免费。想测试的可以下载下来测试一下。
狂神说SpringBoot17:Dubbo和Zookeeper集成.zip-Java文档类资源-CSDN下载

测试步骤:

——>导入项目到IDEA
——>双击运行zkServer.cmd
——>命令行来到dubbo-admin-0.0.1-SNAPSHOT.jar所在的目录,输入 "java -jar dubbo-admin-0.0.1-SNAPSHOT.jar" 运行dubbo-admin-0.0.1-SNAPSHOT.jar
——>浏览器打开[Dubbo Admin(http://localhost:7001/)](http://localhost:7001/)
——>在IDEA中运行ProviderServerApplication类的main方法
——>在IDEA中运行ConsumerServerApplication类的main方法
——>刷新网页,观察Dubbo Admin网页中的服务治理的提供者和消费者。

发现一(用@Test运行不会被Dubbo监控中心监测到)

在这里插入图片描述

Consumer向Registry来subscribe,用@Test的方式来执行时,不会被 [Dubbo Admin(http://localhost:7001/)](http://localhost:7001/) 监测到,只有用main方法(如下)来执行时,才能被监测到。
public static void main(String[] args) {
		SpringApplication.run(ConsumerServerApplication.class, args);
		userService2.bugTicket();
}

监测到:
在这里插入图片描述

发现二(@Autowired和static的关系)

因为main方法是static的,main方法里面的变量也要是static的,但如果直接把用@Autowired注入的变量userService改为static,运行main方法会产生java.lang.NullPointerException异常。

而如果另外定义一个static变量userService2,然后在构造器里给userService2赋值,即userService2=userService;,然后在main方法里写userService2.bugTicket();,此时依然会产生java.lang.NullPointerException异常。

@Autowired和static的关系 - 左手程序,右手诗 - 博客园 这篇文章给出的两种方法都能解决这个问题。

我用这篇给文章的两个方法解决我的问题,代码如下:


方法一(将@Autowire加到构造方法上):

package com.kuang;

import com.kuang.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ConsumerServerApplication {

	static UserService userService;

	@Autowired
	ConsumerServerApplication(UserService userService){
		ConsumerServerApplication.userService=userService;
		System.out.println("构造器");
	}

	public static void main(String[] args) {
		System.out.println("main()_run()_前");
		SpringApplication.run(ConsumerServerApplication.class, args);
		System.out.println("main()_run()_后");
		userService.bugTicket();
	}
}

输出如下:

main()_run()_前
构造器
main()_run()_后
在注册中心买到《狂神说Java》

方法二(用@PostConstruct注解):

通过打断点调试,发现下方代码流程如下:

——>main()方法里的SpringApplication.run(ConsumerServerApplication.class, args);
——>构造器ConsumerServerApplication()
——>自动注入@Autowired
——>用@PostConstruct注解的setUserService()
——>main()方法里的userService2.bugTicket();

package com.kuang;

import com.kuang.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.annotation.PostConstruct;

@SpringBootApplication
public class ConsumerServerApplication {

	@Autowired
	UserService userService;

	static UserService userService2;

	ConsumerServerApplication(){
		//userService2=userService;
		System.out.println("构造器");
	}

	@PostConstruct
	public void setUserService(){
		userService2=userService;
		System.out.println("构造器后");
	}

	public static void main(String[] args) {
		System.out.println("main()_run()_前");
		SpringApplication.run(ConsumerServerApplication.class, args);
		System.out.println("main()_run()_后");
		userService2.bugTicket();
	}
}

输出如下:

main()_run()_前
构造器
构造器后
main()_run()_后
在注册中心买到《狂神说Java》

最后

在这里插入图片描述

原文链接:https://blog.csdn.net/wpw2000/article/details/114680604



所属网站分类: 技术文章 > 博客

作者:哦哦好吧

链接:http://www.javaheidong.com/blog/article/114202/b9bc54ac64d5bc02bc70/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

16 0
收藏该文
已收藏

评论内容:(最多支持255个字符)