`
kuangbinhua
  • 浏览: 7449 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

dubbo项目扩展druid sql监控

阅读更多

最近在项目中采用dubbo来管理服务,但是数据库连接池这一块采用druid,网上配置druid  sql监控的都是基于web.xml配置,需要servlet容器支持,但是dubbo项目服务端这边一般不是web项目,所以启动这一块用不到servlet容器,一般dubbo项目启动都是采用shell脚本,java命令行,eclipse开发时直接main函数启动。出现了这问题后网上找方案,比较少,庆幸前辈记录的好,通俗易懂,依葫芦画瓢搞出来了,在此也特别记录下。

解决思想:

dubbo提供的容器有SpringContainer、Log4jContainer、JettyContainer、JavaConfigContainer、LogbackContainer

其中jetty大家都熟悉,更轻量级的servlet容器。dubbo里面内置了JettyContainer,可以提供汇报一些dubbo的执行状态。但是我们无法直接配置druid的sql监听器,所以必须借助于dubbo启动jetty容器的形式,自己进行JettyContainer扩展,而同时dubbo启动服务时可以指定多个容器,所以我们启动时指定启动spring容器与我们扩展的JettyContainer容器,完成druid监控。

 

1.添加jetty依赖

 

<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty</artifactId>
    <version>6.1.26</version>
</dependency>

 

2.更改JettyContainer

先下载JettyContainer代码下来,或者拷贝我的

下载路径:http://grepcode.com/file/repo1.maven.org/maven2/com.alibaba/dubbo/2.3.1/com/alibaba/dubbo/container/jetty/JettyContainer.java

 

将下载下来的JettyContainer添加到项目/src/main/java/自定义包下,再添加druid监听servlet代码

 

public class JettyContainer implements Container {

	private static final Logger logger = LoggerFactory.getLogger(JettyContainer.class);

	public static final String JETTY_PORT = "dubbo.jetty.port";

	public static final String JETTY_DIRECTORY = "dubbo.jetty.directory";

	public static final String JETTY_PAGES = "dubbo.jetty.page";

	public static final int DEFAULT_JETTY_PORT = 8090; //jetty容器端口

	SelectChannelConnector connector;

	public void start() {
		String serverPort = ConfigUtils.getProperty(JETTY_PORT);
		int port;
		if (serverPort == null || serverPort.length() == 0) {
			port = DEFAULT_JETTY_PORT;
		} else {
			port = Integer.parseInt(serverPort);
		}
		connector = new SelectChannelConnector();
		connector.setPort(port);
		ServletHandler handler = new ServletHandler();

		String resources = ConfigUtils.getProperty(JETTY_DIRECTORY);
		if (resources != null && resources.length() > 0) {
			FilterHolder resourceHolder = handler.addFilterWithMapping(ResourceFilter.class, "/*", Handler.DEFAULT);
			resourceHolder.setInitParameter("resources", resources);
		}
		
		ServletHolder pageHolder = handler.addServletWithMapping(PageServlet.class, "/*");
		pageHolder.setInitParameter("pages", ConfigUtils.getProperty(JETTY_PAGES));
		pageHolder.setInitOrder(2);
	        //这里是新添加的,作用于druid日志监控系统的
                handler.addServletWithMapping(StatViewServlet.class, "/druid/*");
		
		Server server = new Server();
		server.addConnector(connector);
		server.addHandler(handler);
		try {
			server.start();
		} catch (Exception e) {
			throw new IllegalStateException("Failed to start jetty server on " + NetUtils.getLocalHost() + ":" + port
					+ ", cause: " + e.getMessage(), e);
		}
	}

	public void stop() {
		try {
			if (connector != null) {
				connector.close();
				connector = null;
			}
		} catch (Throwable e) {
			logger.error(e.getMessage(), e);
		}
	}

}

 

3.更改duboo启动时加载容器配置

在src/main/resources/META-INF  下面创建dubbo文件夹,再添加文件com.alibaba.dubbo.container.Container

文件内容

myjetty=自定义包.JettyContainer

 

4.更改或添加dubbo.properties内容

   说明:dubbo加载spring容器时,默认加载src/main/resources/META-INF/spring 文件夹里面的配置文件。

              此处更改内容也是更改spring配置加载位置,指定dubbo加载哪些容器,配置日志

#配置spring配置加载位置 
dubbo.spring.config=classpath*:spring-*.xml
#配置传入要加载的容器
dubbo.container=spring,myjetty,log4j
#配置日志文件路径 
dubbo.log4j.file=/logs/dubbo-jzy-provider.log
#配置日志级别 
dubbo.log4j.level=WARN
#配置日志子目录,用于多进程启动,避免冲突 
dubbo.log4j.subdirectory=20880

 

5.启动发布服务

   说明:  com.alibaba.dubbo.container.Main 是dubbo服务启动的主类,指定启动spring容器和修改后的myjetty 容器。

 

public class JettyContainerStart {
	public static void main(String[] args) {
		args = new String[] { "spring", "myjetty" };
		com.alibaba.dubbo.container.Main.main(args);
	}
}

 

6.druid sql监控页面



 

参考网上解决方案,感谢

http://www.mamicode.com/info-detail-2006074.html

 

  • 大小: 37.2 KB
分享到:
评论
1 楼 Jz_lvcha 2018-01-11  
  ServletHolder statViewHolder = handler.addServletWithMapping(StatViewServlet.class, "/druid/*");
        statViewHolder.setInitParameter("loginUsername", "hnstadmin");
        statViewHolder.setInitParameter("loginPassword", "123456");
添加用户名和密码以后,项目抛出java.lang.IllegalStateException: No SessionHandler or SessionManager  能够有什么办法解决吗?

相关推荐

    iBase4J-iBase4J-master.zip

    Base4J项目简介 iBase4J是Java语言的分布式系统架构。...数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。 数据库密码加密,加密方式请查看PropertiesUtil,decryptProperties属性

    xmljava系统源码-SLPlat:SLPlat基于开源项目ibase4j调整而得的,专注于本科院校实践类课程的教学与考试服务的平台。该平台

    数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。 持久层:mybatis持久化,使用MyBatis-Plus优化,减少sql开发量;aop切换数据库实现读写分离。Transtraction注解事务。 MVC: 基于spring mvc...

    iBase4J:测试.....

    数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。数据库密码加密,加密方式请查看PropertiesUtil,decryptProperties属性配置需要解密的密钥。 持久层:mybatis持久化,使用MyBatis-Plus优化,...

    xmljava系统源码-iBase4J-SpringBoot:JAVA分布式快速开发平台:Spring,SpringBoot,SpringMV

    数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。 数据库密码加密,加密方式请查看PropertiesUtil,decryptProperties属性配置需要解密的key。 持久层:mybatis持久化,使用MyBatis-Plus优化,...

    xmljava系统源码-JAVA-:JAVA分布式快速开发平台:Spring,SpringMVC,Mybatis,mybatis-plus,m

    数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。 数据库密码加密,加密方式请查看PropertiesUtil,decryptProperties属性配置需要解密的key。 持久层:mybatis持久化,使用MyBatis-Plus优化,...

    xmljava系统源码-iBase4J:JAVA分布式快速开发平台:SpringBoot,SpringMVC,Mybatis,mybatis-

    数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。 数据库密码加密,加密方式请查看PropertiesUtil,decryptProperties属性配置需要解密的key。 持久层:mybatis持久化,使用MyBatis-Plus优化,...

    xmljava系统源码-iBase4J-person:iBase4J-人

    数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。 数据库密码加密,加密方式请查看PropertiesUtil,decryptProperties属性配置需要解密的key。 持久层:mybatis持久化,使用MyBatis-Plus优化,...

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 ...

    百度地图开发java源码-discussion:SpringBootMybatisRedis开发脚手架平台,浏览器支持IE8以上版本

    使用Maven对项目进行模块化管理,提高项目的易开发性、扩展性。 可以无限的扩展子系统,子系统之间使用Dubbo或MQ进行通信。 技术框架: 核心框架:SpringBoot 安全框架:Apache Shiro 1.3.2 缓存框架:...

    iBase4J分布式系统-其他

    iBase4J主要功能:1、数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。数据库密码加密,加密方式请查看PropertiesUtil,decryptProperties属性配置需要解密的key。2、持久层:mybatis持久化,...

    JAVA上百实例源码以及开源项目

    百度云盘分享 简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对...

    单点登录源码

    Druid | 数据库连接池 | [https://github.com/alibaba/druid](https://github.com/alibaba/druid) FluentValidator | 校验框架 | [https://github.com/neoremind/fluent-validator]...

    java开源包1

    Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司的开源项目。 SwingSet 增强现实标记跟踪软件库 AccuTag AccuTag是AR(增强现实)标记跟踪软件库。它利用GPGPU的快速和...

    java开源包11

    Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司的开源项目。 SwingSet 增强现实标记跟踪软件库 AccuTag AccuTag是AR(增强现实)标记跟踪软件库。它利用GPGPU的快速和...

    java开源包2

    Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司的开源项目。 SwingSet 增强现实标记跟踪软件库 AccuTag AccuTag是AR(增强现实)标记跟踪软件库。它利用GPGPU的快速和...

    java开源包3

    Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司的开源项目。 SwingSet 增强现实标记跟踪软件库 AccuTag AccuTag是AR(增强现实)标记跟踪软件库。它利用GPGPU的快速和...

    java开源包6

    Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司的开源项目。 SwingSet 增强现实标记跟踪软件库 AccuTag AccuTag是AR(增强现实)标记跟踪软件库。它利用GPGPU的快速和...

    java开源包5

    Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司的开源项目。 SwingSet 增强现实标记跟踪软件库 AccuTag AccuTag是AR(增强现实)标记跟踪软件库。它利用GPGPU的快速和...

    java开源包10

    Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司的开源项目。 SwingSet 增强现实标记跟踪软件库 AccuTag AccuTag是AR(增强现实)标记跟踪软件库。它利用GPGPU的快速和...

Global site tag (gtag.js) - Google Analytics