`
kuangbinhua
  • 浏览: 7668 次
  • 性别: 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  能够有什么办法解决吗?

相关推荐

    微服务 spring dubbo项目:dubbo rpc;druid数-spring-dubbo-service.zip

    5. **Druid数据源**:Druid是一个强大的数据库连接池组件,提供了监控、SQL解析、连接有效性检查、池预热、慢查询日志等功能。在微服务项目中,Druid可以优化数据库操作的性能,保证连接的稳定性和效率。 综上所述...

    SpringMVC+MyBatis+druid+Dubbo+Zookpper案例.zip

    3. **Druid**:Druid是阿里巴巴开源的数据库连接池组件,它不仅提供了监控、扩展性、性能等功能,还包含了SQL解析和执行计划等功能。Druid能有效地管理数据库连接,防止资源浪费,提高系统的并发处理能力,并且其...

    springmvc+dubbo/zookeeper+activemq+redis+mybatis+druid

    它不仅可以提高数据库连接的效率,还具有强大的监控和扩展功能,比如SQL解析、SQL执行分析、连接池健康检查等。 这些技术组合在一起,构建了一个复杂的企业级应用架构,包括前端展示(SpringMVC)、后端服务(Dubbo...

    springboot+dubbo+redis+RabbitMQ 项目实例

    在本项目实例中,我们探讨的是如何整合SpringBoot、Dubbo、Redis以及RabbitMQ来构建一个高效、可扩展的Java应用程序。以下是对这些技术及其整合的详细解释: 1. **SpringBoot**: SpringBoot是由Pivotal团队提供的...

    用户中心的项目

    根据给定的信息,我们...综上所述,该“用户中心”的项目涵盖了从底层的数据访问到上层的应用逻辑等多个方面,采用了Spring、MyBatis、Druid和Dubbo等成熟的技术栈,旨在构建一个高效、稳定且可扩展的用户管理系统。

    vue+springboot前后端分离项目源码

    Druid是阿里巴巴开源的数据库连接池,它提供了监控、SQL解析、连接池管理等功能,优化了数据库的连接使用,确保了系统的稳定运行。在高并发场景下,Druid能够有效地管理和分配数据库连接,减少资源浪费,提升系统...

    springboot整合资源

    Druid是一款优秀的数据库连接池组件,它提供了监控、Web管理界面、SQL解析等多种功能。在Spring Boot项目中整合Druid,可以通过以下步骤: - 添加Druid的Maven依赖。 - 配置Druid数据源,包括URL、用户名、密码、...

    iBase4J-iBase4J-master.zip

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

    project.zip

    4. **Druid**:Druid是一个连接池组件,它不仅提供了数据库连接池功能,还包括SQL解析、监控等功能。Druid以其强大的监控和扩展性在Java开发中被广泛应用,能有效提高数据库操作的性能。 5. **线程池**:线程池是一...

    GitHub xbin商城项目

    在xbin商城项目中,MyBatis负责将SQL语句映射到Java代码,实现数据的CRUD操作,提供了灵活的查询能力和良好的数据库操作性能。 Druid是一个数据库连接池组件,它增强了JDBC的性能和监控。在高并发场景下,Druid能够...

    iBase4j快速开发框架

    11. 监控和日志:例如,Druid的SQL监控,可以帮助开发者追踪和优化数据库查询性能。 12. 权限控制:包括菜单权限(通过角色分配)、操作类权限(如增删改查),并在代码层面进行控制。 13. UI:采用前后端分离设计...

    阿里开源项目合集

    - **强大的监控功能**:可以监控到SQL执行性能,通过Druid提供的控制台查看; - **灵活的扩展机制**:支持自定义拦截器、过滤器等,可以根据应用需求定制化扩展; - **高性能**:通过减少不必要的连接创建和销毁操作...

    iBase4J-springmvc-mybatis

    Druid 是阿里巴巴提供的一个数据库连接池组件,它提供了监控、日志和SQL拦截等功能。在iBase4J中,Druid作为数据库连接池,增强了系统的数据库访问性能,同时提供了丰富的监控指标,帮助开发者优化数据库操作。 综...

    【xbin-store】模仿国内知名B2C网站,实现的一个分布式B2C商城

    5. **Druid**:Druid是一个强大的数据库连接池组件,它提供监控、SQL解析等功能。在系统中,Druid用于管理数据库连接,确保数据操作的高效性和安全性。 6. **Solr**:Apache Solr是一个高性能的全文搜索引擎,xbin-...

    seata-server-1.4.0.rar

    OpenFeign是一个声明式的Web服务客户端,简化了RESTful服务的调用,而Druid是一个强大的数据库连接池,提供了监控、SQL解析等功能。 1. Spring Cloud Alibaba: 它是基于Spring Cloud的微服务全家桶,包括Nacos...

    xbin-store常用JAR包源码

    Druid是一个全面的数据库连接池实现,它不仅提供了强大的监控和扩展功能,还具有优秀的性能。在源码中,我们可以看到DruidDataSource类是核心,它继承了AbandonedConfig和AbandonedTrace,实现了...

    模仿国内知名B2C网站,实现的一个分布式B2C商城

    Druid是一个强大的数据库连接池,它提供了丰富的监控和管理功能,如SQL审计、性能分析等,对数据库连接进行有效管理和优化,确保了系统的稳定运行。 Solr作为全文搜索引擎,负责商品信息的索引和搜索。它提供了高效...

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

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

    服务器框架

    - **监控统计**:Druid 提供了详细的 SQL 执行监控,可以方便地了解数据库访问的情况。 - **SQL 防火墙**:Druid 可以拦截不安全的 SQL 语句,防止 SQL 注入攻击。 #### 二、服务框架 服务框架是构建分布式服务...

Global site tag (gtag.js) - Google Analytics