最近在项目中采用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代码下来,或者拷贝我的
将下载下来的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
相关推荐
5. **Druid数据源**:Druid是一个强大的数据库连接池组件,提供了监控、SQL解析、连接有效性检查、池预热、慢查询日志等功能。在微服务项目中,Druid可以优化数据库操作的性能,保证连接的稳定性和效率。 综上所述...
3. **Druid**:Druid是阿里巴巴开源的数据库连接池组件,它不仅提供了监控、扩展性、性能等功能,还包含了SQL解析和执行计划等功能。Druid能有效地管理数据库连接,防止资源浪费,提高系统的并发处理能力,并且其...
它不仅可以提高数据库连接的效率,还具有强大的监控和扩展功能,比如SQL解析、SQL执行分析、连接池健康检查等。 这些技术组合在一起,构建了一个复杂的企业级应用架构,包括前端展示(SpringMVC)、后端服务(Dubbo...
在本项目实例中,我们探讨的是如何整合SpringBoot、Dubbo、Redis以及RabbitMQ来构建一个高效、可扩展的Java应用程序。以下是对这些技术及其整合的详细解释: 1. **SpringBoot**: SpringBoot是由Pivotal团队提供的...
根据给定的信息,我们...综上所述,该“用户中心”的项目涵盖了从底层的数据访问到上层的应用逻辑等多个方面,采用了Spring、MyBatis、Druid和Dubbo等成熟的技术栈,旨在构建一个高效、稳定且可扩展的用户管理系统。
Druid是阿里巴巴开源的数据库连接池,它提供了监控、SQL解析、连接池管理等功能,优化了数据库的连接使用,确保了系统的稳定运行。在高并发场景下,Druid能够有效地管理和分配数据库连接,减少资源浪费,提升系统...
Druid是一款优秀的数据库连接池组件,它提供了监控、Web管理界面、SQL解析等多种功能。在Spring Boot项目中整合Druid,可以通过以下步骤: - 添加Druid的Maven依赖。 - 配置Druid数据源,包括URL、用户名、密码、...
Base4J项目简介 iBase4J是Java语言的分布式系统架构。...数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。 数据库密码加密,加密方式请查看PropertiesUtil,decryptProperties属性
4. **Druid**:Druid是一个连接池组件,它不仅提供了数据库连接池功能,还包括SQL解析、监控等功能。Druid以其强大的监控和扩展性在Java开发中被广泛应用,能有效提高数据库操作的性能。 5. **线程池**:线程池是一...
在xbin商城项目中,MyBatis负责将SQL语句映射到Java代码,实现数据的CRUD操作,提供了灵活的查询能力和良好的数据库操作性能。 Druid是一个数据库连接池组件,它增强了JDBC的性能和监控。在高并发场景下,Druid能够...
11. 监控和日志:例如,Druid的SQL监控,可以帮助开发者追踪和优化数据库查询性能。 12. 权限控制:包括菜单权限(通过角色分配)、操作类权限(如增删改查),并在代码层面进行控制。 13. UI:采用前后端分离设计...
- **强大的监控功能**:可以监控到SQL执行性能,通过Druid提供的控制台查看; - **灵活的扩展机制**:支持自定义拦截器、过滤器等,可以根据应用需求定制化扩展; - **高性能**:通过减少不必要的连接创建和销毁操作...
Druid 是阿里巴巴提供的一个数据库连接池组件,它提供了监控、日志和SQL拦截等功能。在iBase4J中,Druid作为数据库连接池,增强了系统的数据库访问性能,同时提供了丰富的监控指标,帮助开发者优化数据库操作。 综...
5. **Druid**:Druid是一个强大的数据库连接池组件,它提供监控、SQL解析等功能。在系统中,Druid用于管理数据库连接,确保数据操作的高效性和安全性。 6. **Solr**:Apache Solr是一个高性能的全文搜索引擎,xbin-...
OpenFeign是一个声明式的Web服务客户端,简化了RESTful服务的调用,而Druid是一个强大的数据库连接池,提供了监控、SQL解析等功能。 1. Spring Cloud Alibaba: 它是基于Spring Cloud的微服务全家桶,包括Nacos...
Druid是一个全面的数据库连接池实现,它不仅提供了强大的监控和扩展功能,还具有优秀的性能。在源码中,我们可以看到DruidDataSource类是核心,它继承了AbandonedConfig和AbandonedTrace,实现了...
Druid是一个强大的数据库连接池,它提供了丰富的监控和管理功能,如SQL审计、性能分析等,对数据库连接进行有效管理和优化,确保了系统的稳定运行。 Solr作为全文搜索引擎,负责商品信息的索引和搜索。它提供了高效...
数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。 持久层:mybatis持久化,使用MyBatis-Plus优化,减少sql开发量;aop切换数据库实现读写分离。Transtraction注解事务。 MVC: 基于spring mvc...
- **监控统计**:Druid 提供了详细的 SQL 执行监控,可以方便地了解数据库访问的情况。 - **SQL 防火墙**:Druid 可以拦截不安全的 SQL 语句,防止 SQL 注入攻击。 #### 二、服务框架 服务框架是构建分布式服务...