- 可可
-
springBoot项目集成druid的时候,系统间歇性的报CommunicationsException:communications link failure的异常如下。由于是间歇性的,即并不是每次都报异常,而是过了一段时间之后就会出现,所以针对性的测试修复难度很大。
经过研究一段时间之后,发现配置文件中的两个配置要注意。test-while-idle 和 time-between-eviction-runs-millis,具体配置的说明如下。
如果想在开发环境复现这种问题的话,
首先设置mysql变量
set global interactive_timeout=30
set global wait_timeout=30; (超时时间由28800改为30秒)
然后再把项目druid的配置文件test-while-idle=false
最后启动项目,第一次请求sql才会初始化连接池,等待30+秒,再次请求sql就会出现以上错误(CommunicationsException异常也不是只有一种情况,这里解决的是java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
Druid的释义
“Druid”一词分两部分理解:前半部很大程度上和希腊文的“drus”相关,是橡树的意思;而后半部与印欧语系的词尾「-wid」相似。而德鲁依教又以橡果为圣果,更证明其名字的古意是熟悉橡树之人 。同时Druid也是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计SQL信息、SQL性能收集、SQL注入检查、SQL翻译等,程序员可以通过定制来实现自己需要的功能。德鲁依教德鲁依教的仪式和教义都是非常神秘的,而且只依惯例口头传授。所以,虽然经过历代研究和探索,依然所知甚少。多数有关他们的资料是来源于古希腊和古罗马的文献。除此之外,考古学家只能从森林、神坛、庙宇的遗迹中偶然寻得一些如图画、记号等的微小线索而已。在史书上最早有关于德鲁依教团的记载主要是见于朱理亚·凯撒和古罗马最伟大的史学家塔西佗斯的著作中。在这些著作中,多是描述德鲁依教的野蛮和恐怖!凯撒远征高卢时曾向元老院报告说:「德鲁依教教士在当地有仲裁和主祭等重要地位和权力,而且该教教士精通物理、化学;在树林中居住,用金镰刀砍伐神圣的橡树果,甚至用活人献祭!」但在大多数情况之下,德鲁依教士是公认的古代智能的守护者,有着崇高的道德修养,并对自然科学和神学有很深的造诣。2023-06-07 10:08:431
druid是什么意思
druid 英["dru:u026ad] 美["dru:u026ad] [词典] 棉帆布;2023-06-07 10:08:571
为什么说Druid是“最好的数据库连接池”
1、可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。2、数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。3、SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。4、扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。2023-06-07 10:09:041
Druid查询语法
本文的demo示例均来源于官网。 Druid的查询是使用Rest风格的http请求查询服务节点,客户端通过发送Json对象请求查询接口。可以使用shell脚本查询或通过Google的ARC插件构造Post请求进行查询。 Shell脚本 其中<queryable_host>:<port>为broker、historical或realtime进程所在机器的ip和提供服务的端口,query_json_file为json配置文件路径。 ARC插件 [图片上传失败...(image-5a63a0-1626656067202)] 不同的查询场景使用不同的查询方式。Druid有很多查询类型,对于各种类型的查询类型的配置可以通过配置不同的Query实现。Druid的查询类型,概括为以下3类: 1.聚合查询:时间序列查询(Timeseroes),Top查询(TopN),GroupBy查询(GroupBy) 2.元数据查询:时间范围(Time Boundary),段元数据(Segment Metadata),数据源(DataSource) 2.Search查询(Search) 一般聚合查询使用的较多,其他类型的查询方式使用场景较少且较简单,可直接参考官网给出的demo即可查询;本文主要介绍聚合查询。一般情况下,Timeseries和TopN查询性能优于GroupBy,GroupBy查询方式最灵活但是最耗性能。Timeseries查询性能明显优于GroupBy,因为聚合不需要其他GroupBy其他维度;对于Groupby和排序在一个单一维度的场景,TopN优于GroupBy。 一条Druid query中主要包含以下几种属性: 2.1 granularity简介 2.1.1 简单的聚合粒度 简单的聚合粒度有:all、none、second、minute、fifteen_minute、thirty_minute、hour、day、week、month、quarter、year;简单聚合粒度的查询取决于druid存储数据的最小粒度,如果构建数据的最小粒度是小时,使用minute粒度去查询,结果数据也是小时粒度的数据。 假设存储在Druid中的数据使用毫秒粒度构建,数据格式如下: 提交一个小时粒度的groupBy查询,查询query如下: 提交一个小时粒度的groupBy查询,查询query如下: 按小时粒度进行的groupby查询结果中timestamp值精确到小时,比小时粒度更小粒度值自动补填零,以此类推按天查询,则小时及小粒度补零。timestamp值为UTC。查询结果如下: 如若指定聚合粒度为day,则按照天为单位对数据进行聚合,查询结果如下: 如若聚合粒度设置为none,则按照druid中build数据的最小粒度查询数据,即不进行聚合,如bulid数据的粒度是ms,则聚合出来的结果也是毫秒: 如若将聚合粒度设置为all,则返回数据的长度为1,即把查询时间段的数据做一个汇总: 可指定一定的时间段进行聚合,返回UTC时间;支持可选属性origin;不指定时间,默认的开始时间=1970-01-01T00:00:00Z; 持续时间段2小时,从1970-01-01T00:00:00开始: 时间聚合粒度的特例,方便使用,如年、月、日、小时等,日期标准是ISO 8601。无特别指定的情况下,year从1月份开始,month从1号开始,week从周一开始。 一般的格式为:其中timeZone可选,默认值是UTC;origin可选,默认1970-01-01T00:00:00; period的一般写法为: 如提交一个1d作为聚合粒度的groupby查询的query: 查询得到的结果为: 官网给出的例子是以美国洛杉矶的时区为准,一般中国的时区这样使用,更多时区可移步该链接查询: 一个filter即一个json对象,代表一个过滤条件,等价于mysql中的一个where条件;过滤器的类型主要有:Selector filter,Regular expression filter(正则表达式过滤)、Logical expression filters(AND、OR、NOT)、In filter、Bound filter、Search filter、JavaScript filter、Extraction filter; 等价于 WHERE <dimension_string> = "<dimension_value_string>" json格式: 类似Selector过滤器,只不过过滤使用的是正则表达式;正则表达式为标准的java正则表达式规范; aggregations即汇总数据记性druid之前提供的一个数据采集一种聚合方式。常用的聚合类型主要有:count,sum,min/max,approximate,miscellaneous; 2.3.1 Count aggregator 符合查询条件的行数,类似mysql中的count计算: Note: Druid进行Count查询的数据量并不一定等于数据采集时导入的数据量,因为Druid在采集数据查询时已经按照相应的聚合方式对数据进行了聚合。 2.3.2 Sum aggregator 与底层druid表中的字段类型一致。 longSum 2.4 聚合查询 2.4.1 Timeseries query query 2.4.2 TopN query TopN查询根据规范返回给定维度的有序的结果集,从概念上来讲,TopN查询被认为单维度、有序的类似分组查询。在某些情况下,TopN查询比分组查询(groupby query)快。TopN查询结果返回Json数组对象。TopN在每个节点将顶上K个结果排名,在Druid默认情况下最大值为1000。在实践中,如果你要求前1000个项顺序排名,那么从第1-999个项的顺序正确性是100%,其后项的结果顺序没有保证。你可以通过增加threshold值来保证顺序准确。2023-06-07 10:09:301
德鲁伊是什么
我知道的是暗黑破坏神里面的一个人物``叫那个``2023-06-07 10:09:415
德鲁伊的英文名称是什么?
Druid2023-06-07 10:10:044
Druid连接池原理
druid监控地址: http://localhost:8080/druid/sql.html druid关闭监控页面: spring.datasource.druid.filter.config.enabled=false spring.datasource.druid.web-stat-filter.enabled=false spring.datasource.druid.stat-view-servlet.enabled=falseu200b根据图上的步骤,详细说下 (1)调用DruidDataSourceFactory.createDataSource(properties)方法,初始化DruidDataSource对象;只是初始化了对象,并没有创建连接;properties参数指的druid.properties配置文件 (2)调用DruidDataSource.getConnection()方法,获取连接;maxWait配置文件设置的超时时间 (3)init()方法创建连接池;inited初始化连接标志位为false,首次获取连接时先初始化initialSize配置数量的连接数,线程池异步创建连接(socket通道);submitCreateTask(true)方法提交创建连接任务 (4)调用DruidDataSource.pollLast(long nanos)方法,参数超时纳秒,获取连接池数组尾部连接;如果连接池为0时,emptySignal()方法会提交创建连接的任务,如果存活的连接超过最大连接数,会创建失败,在未超时情况下,会循环做此操作,当有连接调用close()方法关闭后,会将连接再设置到连接池数组中,此时再拿连接池尾部连接使用;否则超时返回null,上层做出抛异常处理 (5)Connection.close()关闭连接(实现方法DruidPooledConnection.close()),DruidDataSource.putLast()方法将连接重新设置到连接池数组的尾部 个人看源码理解,说下大致流程,有不足和不对地方可以指出2023-06-07 10:10:111
如何使用Druid监控sql
Druild包获取Maven工程中添加druid依赖包: <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.26</version> </dependency>Druid使用替换C3P0连接池Web工程原先采用C3P0连接池的配置: <!-- 配置数据源-C3PO --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClassName}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="autoCommitOnClose" value="false" /> <property name="maxIdleTime" value="${cpool.maxIdleTime}" /> <property name="checkoutTimeout" value="${cpool.checkoutTimeout}" /> <property name="initialPoolSize" value="${cpool.minPoolSize}" /> <property name="minPoolSize" value="${cpool.minPoolSize}" /> <property name="maxPoolSize" value="${cpool.maxPoolSize}" /> <property name="acquireIncrement" value="${cpool.acquireIncrement}" /> <property name="maxIdleTimeExcessConnections" value="${cpool.maxIdleTimeExcessConnections}" /> </bean>改成Druid连接池DruidDataSource <!-- 配置数据源-druid --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxActive" value="20" /> <property name="initialSize" value="1" /> <property name="maxWait" value="60000" /> <property name="minIdle" value="1" /> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <property name="minEvictableIdleTimeMillis" value="300000" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="poolPreparedStatements" value="true" /> <property name="maxOpenPreparedStatements" value="20" /> </bean>StatViewServlet配置Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。这个StatViewServlet的用途包括:提供监控信息展示的html页面提供监控信息的JSON APIStatViewServlet是一个标准的javax.servlet.http.HttpServlet,需要配置在你web应用中的WEB-INF/web.xml中。 <servlet> <servlet-name>DruidStatView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DruidStatView</servlet-name> <url-pattern>/druid/*</url-pattern> </servlet-mapping>配置完之后,可以通过如下格式的地址在浏览器访问查看。http:/<host>:<port>/<context>/druid2023-06-07 10:10:181
请问德鲁伊教(Druid)是什么?
德鲁伊教的概述凯尔特人于公元前1500年左右迁入中欧,公元前5世纪至公元1世纪时进驻西欧,徳鲁伊教就是他们的信仰。徳鲁伊(Druid)一词,可理解为“了解橡树的人”,或“智者”、“男巫”。德鲁伊属于凯尔特人中的特权阶级,是部落的支配者、王室顾问、神的代言人,地位极尊;只要他们出面调停,即便是处于交战状态的两个部族也必须偃旗息鼓,坐下来谈判。另外徳鲁伊还担负着主持祭祀,解释教法,传授知识,仲裁纠纷,医治病痛,探求哲学等诸多责任。罗马人的著作中也记载了很多徳鲁伊教徒献祭活人的故事。但当年的罗马人自以为是文明的中心,且正陷入与高卢人的战争,记述的客观性难免要大打折扣。德鲁伊宗教敬拜自然,并将橡树视作至高神祗的象征,他们把寄生在橡树上的槲寄生看作一种万灵丹(panacea),认为它具有神圣的疗效。因此这种圣果也就需要通过特别的仪式才可采集,据说只有在满月和新月的日子,或者每月的第六个夜晚,才能举行这种仪式。(图大徳鲁伊)此时要由大德鲁伊(Arch-Druid)身披白袍、佩戴黄金首饰,手持黄金镰刀上树割取。这种仪式充分体现了德鲁伊宗教对于自然力量的崇拜。其实徳鲁伊教在不列颠的母系社会时代就已存在。但经过与罗马人的战争,以及基督教的极力打压。公元6世纪到16世纪这千年中,很多徳鲁伊教的传统渐渐融入人们的日常生活,甚至被基督教吸收消化,但教团本身却已销声匿迹。直到16世纪,随着早期徳鲁伊宗教研究著作的翻译和印刷传播,欧洲人开始意识到他们的祖先并非愚昧无知的野蛮人,“徳鲁伊教复兴”运动才逐步展开。时至今日,已有数个徳鲁伊团体(Order)活跃在世界各地,他们将环保主义和泛爱主义融合到自己的信仰中,使这个根植于古老传统的神秘宗教焕发出了前所未有的清新与活力。2023-06-07 10:10:261
druid数据库密码加密原理
现针对数据库密码加密方面,利用druid进行数据库加密,实现项目配置文件中数据库密码密文存储,一定程度上保证了数据安全。配置方法:1、数据源配置[spring-mybatis.xml文件]<!-- 配置数据源 --><bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init" destroy-method="close"><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><!-- 配置初始化大小、最小、最大 --><property name="initialSize" value="${jdbc.pool.init}" /> <property name="minIdle" value="${jdbc.pool.minIdle}" /> <property name="maxActive" value="${jdbc.pool.maxActive}" /><!-- 配置获取连接等待超时的时间 --><property name="maxWait" value="60000" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="300000" /><property name="validationQuery" value="${jdbc.validation.query}" /><property name="testWhileIdle" value="true" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><!-- 打开PSCache,并且指定每个连接上PSCache的大小(Oracle使用)<property name="poolPreparedStatements" value="true" /><property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> --><!-- 配置监控统计拦截的filters --> <!--<property name="filters" value="stat" /> --><property name="filters" value="${jdbc.filters}" /><property name="connectionProperties" value="${jdbc.connectionProperties}"/></bean>2023-06-07 10:10:441
Druid调优指南(一)- Historical
【翻译自 https://druid.apache.org/docs/latest/operations/basic-cluster-tuning.html 】 本文档提供Druid部署调优基础指南,涉及相关属性配置以及集群架构设想。 请注意,本文档提供一般性的指导原则和经验法则:对于集群调优来说,这些法则并不是绝对的,通用的,而且并没有完全覆盖到Druid属性调优的所有部分。 如果对于特定的case有疑问或者本文未尽事宜,请详询 https://druid.apache.org/community/ 。 Historical节点中堆使用主要集中在: 通常情况下,调整Historical堆大小的经验规则:(0.5GB * CPU核数),上限约为24GB。这个公式并不是一个硬性标准,仅供参考。 如果堆太大,则可能会导致GC时间过长,因此要设置一个24G左右的上限。 如果在Historical节点上启动了缓存,则缓存存储在堆中,大小由druid.cache.sizeInBytes决定。 Historical节点上的堆耗尽,说明配置错误或者所用的方式导致集群过载 目前处于试验阶段,暂不说明 关于 Historicals: 当历史节点处理查询请求时,它需要读取segments,此时,需要一些直接内存空间。 预估直接内存使用量的公式: 对于历史节点,druid.server.http.numThreads 应设置为略高于druid.broker.http.numConnections 数量和(集群中所有broker节点相加) 可以从每个历史节点接收50个查询和10个非查询开始对集群连接池进行调优 druid.server.maxSize:Coordinator节点能够分配给一个Historical节点 segment 总的数据大小 druid.segmentCache.locations:segment 存储所在历史节点的位置,这些位置所在磁盘的大小应该大于等于druid.server.maxSize 历史节点利用可用的系统内存(没有被jvm以及堆/直接内存缓冲区使用的内存)将segment文件映射到内存中,当查询到来时,不在内存中的segment将会被从磁盘分页(从磁盘移动到内存) 因此,druid.server.maxSize的设置应该使历史节点不分配过量的segment。随着 (free system memory/druid.server.maxSize)值的增加,内存中可以保留更多的segment,提供更好的查询性能。 所需历史节点的数量依赖于数据量的大小。为了获取良好的性能,将需要足够的历史节点,以致于每个历史节点有一个好的比率(free system memory/ druid.server.maxSize),如上述 segment cache size部分描述的那样。 在对使用场景有足够的容错情况下,拥有较少的大型服务器通常比拥有较多的小型服务器要好。 我们建议历史节点采用SSD存储,因为该节点处理存储在磁盘上的segment数据。 根据如下指导来预估历史节点总的内存使用量: 历史节点将会使用任意可用的系统内存(jvm、堆/直接内存缓冲区以及系统上其他进程未使用到的内存)来对磁盘上的segments进行内存映射。为了获取更好的查询性能,需要确保一个合适的比率(free system memory/ druid.server.maxSize),这样就可以在内存中保留更大比例的segments。 续接 Druid调优指南(二)2023-06-07 10:10:511
Druid配置参数详解-maxWait
画外音:目前Druid在开源中国举办的2019年度最受欢迎中国开源软件中排名第7名,支持Druid的朋友可以去投票哇。 2019年度最受欢迎中国开源软件 maxWait :从连接池中获取连接的最大等待时间,单位ms,默认-1,即会一直等待下去 笔者在使用Druid时都会设置这个参数,这样如果是获取连接超时,更容易从日志中获取调用失败的原因。 如果超时,Druid会抛出以下异常 在DruidDataSource中的getConnectionInternal方法使用到了maxWait maxWait默认是不超时,即如果连接池没有空闲连接,则会一直等待下去,但是一般的接口都是有超时时间的,如果接口超时,不方便定位出来是获取不到连接导致的,最好设置maxWait,并且小于接口的超时时间。2023-06-07 10:10:581
druid和hikaridatasource哪个好
能够提供基于Filter-Chain模式的插件体系: DruidDriver 代理Driver如何重复获取Druid的数据源 Druid是一个JDBC组件,它包括三部分。 DruidDataSource 高效可管理的数据库连接池2023-06-07 10:11:072
分布式 | 关于 druid 连接池参数问题
最近用户在使用 druid 连接池连接 dble 时,应用会有不定时出现下面的错误: 这种错误还是很常见的,猜测是应用拿到了已经 close 的连接并继续使用从而引发上面的问题。因此,我们想开启 druid 中的对空闲连接检测的机制。 在查询文档的过程中,发现了两个参数,分别是 testWhileIdle 和 keepAlive(1.0.28 版本引入),那到底这两个参数有什么区别? 下面我们使用 1.1.13 版本的 druid 做一个测试。 因此在实际使用中,建议开启 keepAlive 参数用于对空闲连接做有效性检测。Druid 中 testWhileIdle 和普通的连接池(DBCP 等)所表达的含义并不相同,使用时候需要慎重。 测试程序原理是:首先初始化 druid 连接池,使其中有一个空闲连接。我们设置 TimeBetweenEvictionRunsMillis 为 10s,分别打印 10s 前后连接池中连接的信息。连接信息中 LastActiveTime 这个属性表示这条连接上次被使用的时间。通过观察前后两次打印的 LastActiveTime 是否有差别,来推断期间是否有对连接下发语句进行过有效性检测。 测试程序: 开启 keepalive 参数 第一次结果: 第二次结果: 观察第一次结果和第二次结果中 Connections 的 LastActiveTime 值,分别是 2021-03-23 18:47:00 和 2021-03-23 18:47:09,发现两个值变化,可以推断出 10s 内有对连接下发语句进行过有效性检测。 开启 testWhileIdle 参数 第一次结果: 第二次结果: 观察第一次结果和第二次结果中 Connections 的 LastActiveTime 值,分别是 2021-03-23 18:52:39 和 2021-03-23 18:52:39,发现两个值没有变化,可以推断出 10s 内没有对连接下发语句进行过有效性检测。2023-06-07 10:11:201
druid 连接数据库超时怎么配置
Druid连接池及监控在Spring配置如下:[html] view plaincopy<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- 基本属性 url、user、password --> <property name="url" value="${jdbc_url}" /> <property name="username" value="${jdbc_user}" /> <property name="password" value="${jdbc_password}" /> <!-- 配置初始化大小、最小、最大 --> <property name="initialSize" value="1" /> <property name="minIdle" value="1" /> <property name="maxActive" value="20" /> <!-- 配置获取连接等待超时的时间 --> <property name="maxWait" value="60000" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="300000" /> <property name="validationQuery" value="SELECT "x"" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <!-- 打开PSCache,并且指定每个连接上PSCache的大小 --> <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 --> <property name="filters" value="stat" /> </bean> 2. 只要配置initialSize,maxActive就可以,目前这样的配置已经能够使用连接池,加入其实配置性能不好,官方文档里也不没加其它属性,连接池jar包免费下载。2023-06-07 10:11:271
druid vs elasticSearch druid 和es 对比
druid api这么说: 我们不是搜索领域的专家,如果我们的描述不正确,请发邮件或者通过其他方式告知。 es 是一个基于apache lucene 的搜索引擎。它提供了针对scheme-free 文档的全文搜索,提供看了对原始事件数据的访问。eses逐渐的增加了更多对于Fenix和聚合的支持。一些社区的成员指出: es相比druid,在数据的获取和聚合方面需要的资源更多。 另外 es 在数据获取阶段不支持数据的汇总和汇聚,汇总和汇聚压缩数据。这就导致了es 需要更大的存储。 druid 致力于OLAP 工作流。druid 在低成本的基础上为了高性能(快速的聚合和数据获取)做了优化,而且支持更多的分析操作。对于结构化的事件数据,druid 也有一些基础的搜索的支持,但是不支持全文的搜索。druid 也不支持完全的非结构化的数据。查询的维度必须在drudi的schema中进行定义,比如 汇总和roll-up 的实现。2023-06-07 10:11:341
Druid连接池源码解析(8)DruidPooledStatement
本来以为pool包收尾了,扫了一下发现还有statement,这块比较简单,是对JDBC的Statement进行了一些封装,实现了与连接池对应的功能,看下类图: DruidPooledStatement 中最重要的就是execute开头的一系列方法了,是执行SQL的本体,都是对JDBC的Statement的增强,主要多做了以下: DruidPooledPreparedStatement实现了JDBC的PreparedStatement,是执行预编译的SQL用,跟Connection相同,引入了PreparedStatementHolder这样一个Holder类,同样定义了一些统计属性,其中有个属性pooling,是否池化,引出了PreparedStatementPool,里面用LinkedHashMap实现了LRU,一个cache类用来缓存预编译过的statement; cache的key定义了一个类,PreparedStatementKey,重写了hashcode和equals方法,很有意思地参考了String的hashcode,用了31这个质数作进制来计算hash,且不仅仅是sql语句相同,需要其他属性都相同才算相同,贴一下源码: CallableStatement是用来执行函数或者存储过程的,在当下的大环境下,用得真的很少就略过了吧。 druid在JDBC的statement基础上,封装了一些类来扩展自己的属性和功能,一般在工程环境下,基本就用AOP或者装饰器模式来实现(感觉这个Holder有点像装饰器,又有点像单例的Holder)的,写框架的时候,这种方式还是很值得借鉴的,很内聚、高效,也没有额外的引用 cache的使用很巧妙,但是在刷文章的时候看到过一个问题,虽然在后续版本中修复了,但还是分享一下: 探究Druid连接池“违反协议”异常 这个问题抛的是SQL异常,问题却出在缓存上,对与缓的状态和刷新策略,有了新的认识2023-06-07 10:11:411
Druid配置参数详解-testOnReturn
画外音:目前Druid在开源中国举办的2019年度最受欢迎中国开源软件中排名第7名,支持Druid的朋友可以去投票哇。 2019年度最受欢迎中国开源软件 testOnReturn :如果为true(默认false),当应用使用完连接,连接池回收连接的时候会判断该连接是否还可用。 当连接使用完,调用commit或者rollback方法后,连接池会回收该连接,该参数主要在DruidDataSource的recycle方法中用到 判断连接是否可用同testOnBorrow Druid配置参数详解-testOnBorrow2023-06-07 10:11:481
Druid连接池源码解析(2)DruidDataSource-2
关闭时调用close()方法,主要流程: 在DruidDataSource中单独定义了一个StackTrace,就是在初始化的时候获取了当前线程的StackTrace,目测目的是为了自定义输出调试信息 重启时调用restart()方法,主要流程: 加锁->判断活跃连结数是否为0-> 调用close() ->调用resetStat() resetStat()重置配置到默认值,设置各个原子计数器为0 如果有配置变动,调用configFromPropety()重新配置各属性 此时重启便结束了,下一次调用getConnection()的时候,会调用init()重新初始化 关于几个原子计数器,由于Druid说是为监控而生的连接池,默认是基于内存计数的,所以restart里清空的几个计数器,根据名字就能比较明显地知道是统计各种情况发生的次数的,如:链接错误数,事务提交、回滚数等等 那么之前init中的几个计数器,是做什么的么? connectionIdSeedUpdater 追了下,主要是生成连接id的,对应到holder中的connectionId, 在DataSource中的getPoolingConnectionInfo(),放到了一个map里,缓存了连接信息 在DruidStatManagerFacade和DruidStatService 中获取了map中的连接信息,供监控控制台使用 dataSource的id本身是自增的,留出来的步长是生成connectionid等根据id的前缀判断属于哪个datasource 使用AtomicLongFieldUpdater的好处是: 因为当需要进行原子限定的属性所属的类会被创建大量的实例对象,如果用AtomicLong每个实例里面都要创建AtomicLong对象,从而多出内存消耗,使用AtomicLongFieldUpdater仅需要在抽象的父类中声明一个静态的更新器,就可以在各个对象中使用了。2023-06-07 10:11:551
怎样配置Druid监控并实现权限控制
这里只讲了如何通过IP来控制访问,没有讲如何通过用户名和密码来控制访问。经测试可以通过以下方式实现使用固定的用户名和密码来控制访问。<servlet><servlet-name>DruidStatView</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class><init-param><param-name>loginUsername</param-name><param-value>admin</param-value></init-param><init-param><param-name>loginPassword</param-name><param-value>admin</param-value></init-param></servlet><servlet-mapping><servlet-name>DruidStatView</servlet-name><url-pattern>/druid/*</url-pattern></servlet-mapping>2023-06-07 10:12:141
怎么样配置druid将sql语句及参数记录到日志文件中去
<!-- 每隔5分钟将监控日志输出到日志文件中,单位是毫秒。 --> <property name="timeBetweenLogStatsMillis" value="300000" /> <!-- 监控数据库 --> <property name="proxyFilters"> <list> <ref bean="stat-filter" /> <ref bean="wall-filter" /> <ref bean="log-filter" /> </list> </property> <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter"> <property name="slowSqlMillis" value="3000" /> <property name="logSlowSql" value="true" /> <property name="mergeSql" value="true" /> </bean> <bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter"> <!-- <property name="resultSetLogEnabled" value="false" /> --> <!-- <property name="statementExecutableSqlLogEnable" value="true" /> --> </bean> <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter"> <property name="dbType" value="oracle" /> <property name="config" ref="wall-filter-config" /> </bean> <bean id="wall-filter-config" class="com.alibaba.druid.wall.WallConfig" init-method="init"> <property name="dir" value="META-INF/druid/wall/oracle" /> </bean>2023-06-07 10:12:211
德鲁伊之神是谁?
德鲁伊的神是孤山长者2023-06-07 10:12:312
Druid源码分析(四) 从连接池获取数据库链接getConnectionDirect()
public DruidPooledConnection getConnectionDirect(long maxWaitMillis) throws SQLException { // 超时重试次数,达到这个值就报错 int notFullTimeoutRetryCnt = 0; for (; ; ) { // handle notFullTimeoutRetry DruidPooledConnection poolableConnection; try { // 核心逻辑 poolableConnection = getConnectionInternal(maxWaitMillis); } catch (GetConnectionTimeoutException ex) { if (notFullTimeoutRetryCnt <= this.notFullTimeoutRetryCount && !isFull()) { notFullTimeoutRetryCnt++; if (LOG.isWarnEnabled()) { LOG.warn("get connection timeout retry : " + notFullTimeoutRetryCnt); } continue; } throw ex; }2023-06-07 10:12:381
Druid连接池自定义数据库密码加解密怎么实现
可以扩展Spring的PropertyPlaceholderConfigurer,摘录别人一段代码你参考public class DecryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer{ /** * 重写父类方法,解密指定属性名对应的属性值 */ @Override protected String convertProperty(String propertyName,String propertyValue){ if(isEncryptPropertyVal(propertyName)){ return DesUtils.getDecryptString(propertyValue);//调用解密方法 }else{ return propertyValue; } } /** * 判断属性值是否需要解密,这里我约定需要解密的属性名用encrypt开头 * @param propertyName * @return */ private boolean isEncryptPropertyVal(String propertyName){ if(propertyName.startsWith("encrypt")){ return true; }else{ return false; } }}2023-06-07 10:12:451
DND的德鲁伊
艾泽拉斯用的是魔兽系统、英雄无敌用的是M&M系统、而DND系统则是又一个……所以他们基本上并没有什么可比性,也不存在正统与否2023-06-07 10:12:554
求关于德伊鲁教的资料!
欧洲北部的原始宗教——萨满教 萨满教中有一个教派,就是德鲁伊教派 德鲁伊教派以橡树和橡树果实作为图腾,并将巨大的橡树称作神之树,用橡树果实向上天祈祷 德鲁伊教派是最早的单一神宗教之一,可以说在宗教史上是一种领先的宗教 当其它大部分自认“文明”的地方都还在用活人、牲畜祭拜上天的时候,他们已经开始用文学告慰神灵,用音乐打动人心,用吟游的方式替人们祈祷 德鲁伊类似于我们常提到的吟游诗人,只不过他们吟咏的都是与宗教有关的诗歌,这些人身体强壮,还精通医学、手工工艺,还很了解农业,他们的镰刀、狼头是在祭祀时不可少的工具与装饰品,在与古罗马军队作战时,使得古罗马人认为哥特人中有“狼人”,并有“死神”协助他们,于是后来镰刀成了死神的象征,而浪人的传说也逐渐出现一般据说是一个拿活人祭祀的邪教. 似乎因为他们的宗教教义或者行为与自然有紧密联系,所以在游戏中他们扮演着自然世界的守护者. 现代德鲁伊教团体在这次复兴上拥有他们的根源,一些声称奥布里是一位主要成员,持有德鲁伊教知识的不间断的传统,尽管奥布里,一位不受禁止的知识和闲谈的收藏家,在他保存下来的内容庞杂的笔记本里。 托兰被奥布里的巨石阵理论迷住,但没有相信奥布里,并且写了自己的书。他也被声称为一位主要成员。古代德鲁伊律法声称托兰持有从整个英国到爱尔兰的德鲁伊教知识收集,于1717年在伦敦的一间酒馆里面。 古代德鲁伊律法本身也是在1781年建立的,由亨利哈里领导,明显是合并了共济会的思想。 一个德鲁伊教复兴的中心人物就是爱德华 威廉斯,最为大家熟悉的是Iolo手稿,他的著作在死后发表,比如Iolo手稿(1848年),还有巴达斯(1862),在同时代的德伊鲁运动中仍然有影响力。威廉斯声称在他组织的“英国爱尔兰吟游诗人吟游诗集会”已经收藏有古代知识,但在上世纪七十年代,文献的草拟手稿被发现在威廉斯的论文里,暴露了手稿是他自己的杰作。 今天的德鲁伊教是十八世纪复兴运动的延伸,因而也与古代宗教有一些联系,尽管联系并不很多。现代德鲁伊教围绕着两条线索:文化和宗教。文化德鲁伊教团员举行作诗,文学和音乐竞赛,比如知名的就是凯尔特人(威尔斯,爱尔兰,康沃尔,布里多尼等等)的诗词大会。现代的宗教德鲁伊教团员是新德鲁伊教的形式,主要地是建立在十八世纪和后期的著作的基础上,加上罗马人稀疏的研究,还有中世纪早期的来源。 两条绳索之间并不能总是容易地区分开来,因为宗教导向的德鲁伊教定制会欢迎任何宗教背景和无宗教信仰背景的人,而文化导向的德鲁伊教定制可能不会打听成员们的宗教信仰。然而,两种类型的德鲁伊教可能会既包含宗教导向和非宗教导向的成员。很多著名的英国人已经开始发起德鲁伊教的定制,包括邱吉尔(英国政治家及作家,首相),邱吉尔的情形说明了区分两者的困难性,因为历史学家甚至没有确定他加入了哪种定制,是古代德鲁伊教定制还是古代—考古德鲁伊教定制?不管他加入的目的是什么。 在凯尔特信仰里面,现代词语“德鲁伊教团员”或“德鲁伊教”是用来表示古代德鲁伊教的实践,祭司阶层在古代凯匀特社会里面是遍及西欧,从阿尔卑斯山到不列颠群岛。德鲁伊教实践的是所有部族成员文化的一部分,这个部族被希腊人称为“凯尔特族”,被罗马人称为高利,发展成近代英语的“凯尔特”和“高卢”。 正在努力尝试重建德鲁伊教的现代人就称为“新德鲁伊教”。" 从琐碎的资料我们得知,它表现出深深的传统,保守派的德鲁伊教团员保存着知识和文明的仓库。现在不可能的就是判断这种连续性是否拥有深深的历史根源,起源于拉丁后期的社会转变中,或者中间是否出现过间断,以及德鲁伊宗教的改革。根据语源学,“德鲁伊”这个词的起源是各式各样,足可以怀疑这个词可能是出自印欧时期之前。更为普遍的观点就是“德鲁伊”是源自凯尔特的单调“橡树”(爱尔兰的盖子尔语),这个词的词根也是“智慧”的意思。 他们的影响既是社会性,也是宗教性。德鲁伊教团员不仅履行现代祭司所做之事,而且还经常是哲学家,科学家,知识的主人,教师,国王的法官和议员。德鲁伊教团员运用众多的神,阴历与神圣的自然规律,凯尔特人们连接在一起。随着基督教进入每个区域,所有这些角色都被假装成主教和修道院,从来不是相同的个人,可能也会发现他们本身是处于直接的竞争中。 我们有关德鲁伊教的历史知识十分有限。德鲁伊教的知识是由大量记住的诗句组成,我们也得知完成学习课程需要二十年的时间。盎格鲁可能曾经有过德鲁伊教导中心,以不可思议的湖作为圆心,但教导的内容,不管是诗,天文学还是歌曲,甚至很可能是希腊语,都只是猜想。他们的口头文献是神圣的歌,成为祷告者的客套语和咒语,预言和巫术的法则,并没有诗句保存下来,甚至没有译本,也没有一个可以称得上纯粹的德鲁伊教的传说,没有像基督教那样的覆盖图和解释。然而,很多传统的乡村宗教实践在基督教诠释之下仍然可以洞悉到,仍然保持着传统,比如万圣节的庆祝,玉米洋娃娃和其他的收割典礼,还有精灵的神话,森林野狼,“幸运”与“不幸”的植物和动物等诸如此类。 然而,口头流传的材料可能已经对古代起源进行了夸大,经常受到周围文化的影响。 我们在凯撒的高卢战争中首先发现完整的德鲁伊教说明。凯撒注重到高卢里面所有任何等级和尊严的人,要么是在德鲁伊教里,要么是在贵族里,是两种分化的阶级。 德鲁伊教团员组成了有学问的祭司阶层,他们是古代传统口头律法的守护者,拥有执行判断的权力,被团体驱出教会是最可怕的。尽管德鲁伊教因为服务着他们的领域而享有免税权,而这些服务也来自税收,他们并没有世袭的阶级。一个初学者的训练课程不得不服从于拖延的时间。凯撒报道说,所有的教导都是口头上沟通,但为了普通的目的,高卢人也有一种书写语言,他们使用了希腊语的特征。 没有保存下来的德鲁伊教文献。凯撒说:“他们的教义的要点是灵魂并不会死亡,死后会从一个身体转入到另一个。”这就引致了古代作者得出不太可靠的结论,说德鲁伊教一定受了希腊哲学家毕达哥拉斯的教导所影响。凯撒也注意到了德鲁伊教对部族灵魂守护者的意识,他翻译成为Dispater,还有冥王父亲的普遍意识。德奥多拉斯和斯特雷波等作者比凯撒获得更少的直接体验,对德伊鲁教这个阶层持有吟游诗人和占卜者等观点。 Pomponius Mela是首位说他们的教导是神秘,在森林和山洞举行的作者。我们知道森林里面的某些小树林是神圣是因为罗马人和基督徒以同样的方式斩下它们,并且燃烧树木。人类献祭有时候也归因于德鲁伊教;这是欧洲的一种古老遗产(尽管这可能是罗马的宣传)。高卢人习惯于提供人类作为献祭,通过是罪犯。 英国是德鲁伊教的总部,曾经在高卢人的堆石标记地域上每年举行过会员大会。 西塞罗评论过存在于高卢人之间的占卜或者占卜者,就是德鲁伊教。他与一位Divitiacus相识。Diodorus告知我们神可接受的献祭一定要有一位德鲁伊教团员参与,因为他们是媒介。战役之前,他们经常在两支敌军之间用石头来向自己掷去,是为了带来和平。 德鲁伊教团员本质上是被看作非罗马人;奥古斯都命令罗马居民禁止履行德鲁伊教仪式。 在斯特雷波的著作,我们发现德鲁伊教团员仍然在公众和私人事件上担当仲栽者的角色,但他们不再处理谋杀案。在台比留(公元我世纪的罗马皇帝)统治期间,德鲁伊教受到元老院的法令镇压,但在公元54年的克劳迪亚斯期间却得到复兴。 在普林尼(罗马学者)的著作里面,他们的活动仅局限于医药和巫术的实践。依照他的观点,德鲁伊教团员在最高的崇拜上持有槲寄生,槲寄生被穿白袍的祭司用金色小刀切割出来,两头白公牛在现场作为献祭。 塔西佗(古罗马元老院员,历史学家)在叙述罗马人Suetonius Paulinus领导,对凫内的莫纳(盎格鲁人或威尔士的Ynys Mon)发动进攻的时候,声称军团看到了一群德鲁伊教团员的出现就会肃然起敬,德鲁伊教团员就会用双手举上空中,连续不断地念着诅咒侵略者的可怕咒语。然而,罗马人的勇气很快就克服了这些恐惧,迫使英国人仓皇逃窜;莫纳的神圣小树林被砍了。公元一世纪之后,欧洲大陆的德鲁伊教完全地消失,只有在非常稀少的场合才谈到。例如,雄辩家Ausonius顿呼Attius Patera(圆盘状的太阳光晕光辉?)已经远离德鲁伊部族而去。Early Druids in Britain 英国早期的德鲁伊教团员(南尼纽斯)报告的Vortigern故事是罗马人征服之后,英国幸存的德鲁伊教的其中非常中的见闻。在被德国逐出教会之后,这位英国领导者邀请十二位德鲁伊教团员去帮助他。然而,在爱尔兰文学,却频繁地提出到德鲁伊教,看来它们的作用在岛上是与高卢人是相当协调的对应。我们在这里发现了德鲁伊教的作用分布在德鲁伊教团员,吟游诗人和诗人当中,可是甚至在非常早的时期,诗人已经篡夺了很多德鲁伊教团员的职位(至少是作诗的判断),最终随着基督教的传播而排挤了他。 最重要的爱尔兰文献包含了十二世纪的手稿,但文献本身要很大尺度地回溯到比十二世纪要早七百年的时候,也就是五世纪的时候。 在各种英雄人物时期的故事中,德伊鲁教看上去似乎并未形成任何社团,也没有免除服兵役。Cathbu (Cathbad),是德鲁伊教与阿尔斯特(原为爱尔兰一地区)的康纳尔王(爱尔兰传说中公元初期阿尔斯特国王)发生联系的人,在更古老的时期,是由众多年轻人陪倍着(依照最古老的版本,是100个),渴望学习他的艺术。 德鲁伊教团员被描绘成能预言未来;在离开阿尔斯特的伟大远征之前,仅是著名英雄迪尔德丽出生之前,康纳尔王的王后玛布请教了她的德伊鲁教团员,Cathbu就预言到她将会是哪种类型的女人。 德鲁伊教团员也拥有不可思议的技巧:英雄Cuchulainn被一位名为Fand的仙女精灵长期诱惑之后,已经从精灵之地返回。他从德鲁伊教团员手上得到一服药,会消除他最近经历的记忆,也会摆脱掉他的妻子伊玛嫉妒的悲痛。更加不可思议的就是Etain的故事。这位女士,现在是爱尔兰最高国王Eochaid Arem的妻子,在至爱之神密特(Mider)形式上的存在之物里面,又再次地去寻找她的爱,并且得到她的芳心。国王求助他的德鲁伊教团员Dalgn,建议需要一整年的时间去发现这对神出鬼没的夫妻。这回他需要依靠四条记下欧甘文字(古爱尔兰人用的一种文字,共20个字母)的紫杉木棒子来完成。以下是描述发生在史诗故事Tain bo Cuailnge里的迦布斯(Cathbus)德鲁伊教团员:侍奉者(团员)举起他的眼睛,望向天空,观察着云层,回答着他周围的人。他们都举起双目,望向天空,观察着云层,用力地念着靠着这些元素的咒语,因此他们会唤起在他们之中的斗争,点燃的云层被驱赶到朝向爱尔兰人阵营的方向上。我们更进一步地被告知在康纳尔王的宫廷上,没有人有权在德鲁伊教团员说话之前先开口。在另一本文献上,德鲁伊教团员能够制造精神错乱。 基督教文学里面的德鲁伊教尽管我们发现它们两者都作为指引者,都有高贵的国王,但在圣人,殉道者和传教士的生命当中,德鲁伊教被描绘成术士和占卜者,反对基督教的传教士。在圣人帕特里克来到的时候,他们被描绘成利用举起云层和薄雾,竭力阻止帕特里克和科伦巴(天鸽座之意)的前进。561年Culdremne战役之前,一位德鲁伊教团员制造了一种保护的剑术,围绕着其中一队敌军,但短词的意思正好又是晦涩不清。爱尔兰德鲁伊教团员看起来还有一种奇特的削发方式(头顶部分剃光 德鲁伊教的复兴创造了这个德鲁伊教团员的版本——短胡子,远离槲寄生,挂着一个袋子,里面是一种瓶子或葫芦,系在带子上。 十八世纪,英格兰和威尔士经历了一场德鲁伊教的复兴,是由约翰 奥布里,约翰 托兰,以及William Stukely得到灵感而引发。有明显证据暗示了威廉 布莱克是涉及到德鲁伊教的复兴,还有可能是主要成员。 奥布里是首位涉及到史前巨石阵和其他德鲁伊教巨石纪念碑的现代作家,在十九世纪期间,一种误解发展出了一种对德鲁伊教的想法。2023-06-07 10:13:032
druid DBMS_RANDOM报错
原因如下:1)使用了Oracle随机排序 order by dbms_random.value;2)springboot集成druid连接池批量更新异常。解决方法:1)更改druid 配置并解决问题。2)设置Druid的防火墙配置(WallConfig)中变量multiStatementAllow=true,新建DruidDataSource配置类。2023-06-07 10:13:101
请教如何不依赖配置文件纯Java调用Druid连接池
现在常用的开源数据库连接池主要有c3p0、dbcp、proxool三种,其中:Spring 推荐使用dbcp;Hibernate 推荐使用c3p0和proxool; 1、 DBCP:ApacheDBCP(DataBase connection pool)数据库连接池。是Apache上的一个 java连接池项目,也是 tomcat使用的连接池组件。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。dbcp没有自动的去回收空闲连接的功能。 2、 C3P0:C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能。目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲连接功能。 3、 Proxool:SourceforgeProxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。 对比:1> 相同时间内同等量的线程数和循环次数下:通过对三个连接池的三个标志性性能测试参数(Average,median,90%Line)进行比较发现:性能dbcp<=c3p0<proxool; 2> 不同情况下的同一数据库连接池测试:通过观察 Average,median,90%Line三个参数发现三个连接池的稳定性(三种连接池的三个测试参数的变化情况)依次:稳定性dbcp>=c3p0>proxool。 结论: 通过对三种数据库连接池的性能测试发现,proxool和 c3p0能够更好的支持高并发,但是在稳定性方面略逊于 dpcp;2023-06-07 10:13:171
mybatis+druid+jdbc 原理介绍
mybatis是警察.druid是武器库(有很多枪).jdbc是武器商(他们造枪给武器库).当你需要一次"除暴安良"时,你需要去找警察,警察从武器库拿枪干活.以往的开发,是你使用jdbc直接造枪,然后自己干活.jdbc整合了:加载数据库驱动,创建连接,写原生语句,执行,关闭这些东西.而mybatis是对jdbc的封装,他允许你通过配置的形式,配置数据库参数,并且允许你通过xml来写动态sql语句.<if:test>让你可以把sql变得灵活起来.并且还能将你的查询结果直接映射到你想要的实体上面.然后你就去配置你的用户名,密码,连接超时,等等.等你下次使用mybatis时,他后面会根据你的配置,帮你加载数据库驱动,创建连接,写原生语句,执行,关闭.但是mybatis发现,在你每次访问都要重新创建创建连接,写,关.很麻烦,所以mybatis说,我可以接受你再配置一个连接池,比如druid.mybatis让你指定连接池是谁,如druid.之后将原来自己需要搞的东西都交给druid.什么账号了,密码了.都给他,让druid帮你创建一批连接,在你需要用的时候,mybatis从druid里面拿一个就行.下面是一次简单的访问流程: controller->service->dao->mapper1.首先项目启动时druid就已经使用jdbc创建好一堆连接了,留待后用.2.当请求到mapper时,mybatis框架创建临时类.3.然后将动态sql进行替换重写,变成原始的native sql.4.从druid拿到一个连接.5.将sql通过连接交给数据库执行.6.然后获取执行结果.7.mybatis进行将结果进行映射,返回数据.说的有点乱,希望能说清楚吧...2023-06-07 10:13:471
使用druid记录慢查询sql,能不能获取sql执行的参数
在JdbcSqlStatValue类中,有一个LastSlowParameters参数,是用来保存sql执行的参数的。以下是一个参考配置: <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc_url}" /> <property name="username" value="${jdbc_user}" /> <property name="password" value="${jdbc_password}" /> <property name="filters" value="stat" /> <property name="maxActive" value="20" /> <property name="initialSize" value="1" /> <property name="maxWait" value="60000" /> <property name="minIdle" value="1" /> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <property name="minEvictableIdleTimeMillis" value="300000" /> <property name="validationQuery" value="SELECT "x"" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="50" /> </bean>2023-06-07 10:13:551
如何监控druid获取连接的耗时
替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。在项目中使用Druid非常简单,只要修改下配置文件就可以了2023-06-07 10:14:021
druids的翻译是:什么意思
德鲁伊教团员的意思。 谢谢,望采纳2023-06-07 10:14:101
Druid怎么翻译
就是德鲁伊2023-06-07 10:14:172
Alibaba-Druid 连接池使用
Spring Boot 2.0默认连接池为HikariCP,一款号称高性能的连接池。如没特殊要求使用默认连接池就可以,那么我们为什么要使用Druid呢。 注 HikariCP 基于spring boot 的metric功能,结合prometheus + grafana也可以实现监控 下面记录下工作中用到的监控和密码加密功能: 使用版本: 配置文件: 启动项目后访问: http://localhost:8080/druid/login.html2023-06-07 10:14:241
Druid的内置监控servlet的数据源应该怎么配置
ervlet> <servlet-name>DruidStatView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> <init-param> <param-name>resetEnable</param-name> <param-value>true</param-value> </init-param></servlet><servlet-mapping> <servlet-name>DruidStatView</servlet-name> <url-pattern>/druid2023-06-07 10:14:311
Druid怎么log4j记录查看比较慢的sql
把log4j.logger.druid.sql.Statement后面改成debug,然后 appender重新指定成文件,就能基本完成log sql的需要。不过他是连带预编译语句的创建,设置参数,执行这三种一起log的!2023-06-07 10:14:391
魔兽世界德鲁伊的变身技能有哪些?
10级熊形态,需要做任务,有各种技能相当于半个战士,比如低吼(嘲讽),重殴(英勇打击)等,上面已经说的很明白18级海豹形态,需要做任务,无特殊技能,但是海里战斗时没有氧气了可以直接变豹,等呼吸满了再变战斗形态20级猎豹形态,直接训练师学习,各种相当于半个盗贼,可以学习爪击(类似邪恶攻击),偷袭(类似伏击)等,上面说的很明白了30级旅行形态,直接学习,无技能,野外使用,增加40%速度40级巨熊形态,直接学习,当学习巨熊形态后,默认变熊直接边巨熊,技能和熊形态公用68级飞行形态,变60%速度小鸟,直接训练师学习70级史诗飞行形态,变280%速大鸟,需要做一系列史诗任务方可获得技能扩展资料:起源:欧洲人一般认为德鲁伊教徒是自然和中立的拥护者,是将整个荒原都当作是自己家园的隐士,他们使自己的特殊力量保护大自然并且让整个世界获得平衡。在现代奇幻文学中,德鲁伊教徒是自然的崇拜者和维护者们,为了保护自然界可以与任何势力战斗。德鲁伊的英文原名是“Druid”,这个词的前半部“druis”在希腊文中是橡树的意思,而后半部与印欧语系的词尾“-wid”相似,意为去了解。而德鲁伊教(Druidism)又以橡果为圣果,所以德鲁伊名字的古意是熟悉橡树之人。著名的亚瑟王时期的“梅林”,传说是一位有着超凡法力的巫师,其实他应该是一个有着相当修行的德鲁伊教徒。“梅林”一词最初就是泛指那些精通诗之艺、视之艺(占卜)的德鲁伊教巫师们。2023-06-07 10:14:481
Druid连接池 查询慢 超时
使用druid连接池时,有时查询超时,慢,设置的minIdle也算合理。通过监控发现,池中连接+活动连接数很小了,也小于minIdle。原因可能是部分连接被销毁了,譬如因为查询报错。此时若查询徒增,则要临时创建新连接,故造成慢。如果需要连接保持在至少minIdle,则druid版本必须升级到1.0.27以上(不包括),同时创建配置添加属性druid.keepAlive=true2023-06-07 10:15:001
Druid除了结合Spring,能在Hibernate中用吗
可以的。我使用的是Druid0.2.13 内置ConnectionProviderhibernate.cfg.xml 配置如下<!-- druidpro --><property name="hibernate.connection.provider_class">com.alibaba.druid.support.hibernate.DruidConnectionProvider</property><property name="url">jdbc:mysql://192.168.1.4:3306/databasename?useUnicode=true&characterEncoding=UTF-8</property><property name="username">***</property><property name="password">***</property><property name="driverClassName">com.mysql.jdbc.Driver</property>2023-06-07 10:17:321
如何设置 druid 监控页面的访问权限
这里只讲了如何通过IP来控制访问,没有讲如何通过用户名和密码来控制访问。经测试可以通过以下方式实现使用固定的用户名和密码来控制访问。<servlet><servlet-name>DruidStatView</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class><init-param><param-name>loginUsername</param-name><param-value>admin</param-value></init-param><init-param><param-name>loginPassword</param-name><param-value>admin</param-value></init-param></servlet><servlet-mapping><servlet-name>DruidStatView</servlet-name><url-pattern>/druid/*</url-pattern></servlet-mapping>2023-06-07 10:17:391
alibaba 的druid所依赖tools.jar会找jdk吗
Druid是一个JDBC组件,它包括三部分:DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 DruidDataSource 高效可管理的数据库连接池。 SQLParserDruid可以做什么?1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。2) 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。2023-06-07 10:17:512
什么叫德鲁伊
Dryad一词原出自druids,即德鲁依。Dryad在罗马、希腊神话中意指森林女神,传说每一棵橡树都居住着精灵,而这些树精通过dryads向人类传达神谕,因此呢后世的文学著作中Dryad通常以树精的形象出现。 德鲁依(Druid) 这个单词的原意是“熟悉橡树的人”,在历史上,他是凯尔特民族(Celt)的神职人员,主要特点是在森林里居住,擅长运用草药进行医疗,橡树、橡果等是他们崇拜的圣物。凯尔特人是一个在公元前5世纪至公元1世纪散居在高卢、不列颠、爱尔兰、欧洲、小亚细亚和巴尔干半岛民族。德鲁依教士精通占卜,对祭祀之礼一丝不苟,也长于历法、医药、天文和文学……同时,他们也是执法者、吟游诗人、探险家的代名词。男女皆可为德鲁依教士,在族内担当祭司、法师或预言者,同样在社会上享有崇高的地位。也有史学家将德鲁依教士与印度的婆罗门( Brahmins)、波斯祅僧(Magi)、埃及祭师(Priests)和巫医(Shamans)相等同。 在起初,因凯尔特为母系社会,所以只有女性可担任德鲁伊,而后逐渐由男性加入。2023-06-07 10:17:581
如何设置 druid 监控页面的访问权限
这里只讲了如何通过IP来控制访问,没有讲如何通过用户名和密码来控制访问。经测试可以通过以下方式实现使用固定的用户名和密码来控制访问。<servlet><servlet-name>DruidStatView</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class><init-param><param-name>loginUsername</param-name><param-value>admin</param-value></init-param><init-param><param-name>loginPassword</param-name><param-value>admin</param-value></init-param></servlet><servlet-mapping><servlet-name>DruidStatView</servlet-name><url-pattern>/druid/*</url-pattern></servlet-mapping>2023-06-07 10:18:061
谁能解释下德鲁伊教教义具体的含义?
欧洲人一般认为德鲁伊教徒是自然和中立的拥护者,是将整个荒原都当作是自己家园的隐士,他们使自己的特殊力量保护大自然并且让整个世界获得平衡。在现代奇幻文学中,德鲁伊教徒是自然的崇拜者和维护者们,为了保护自然界可以与任何势力战斗。德鲁伊的英文原名是“Druid”,这个词的前半部“druis”在希腊文中是橡树的意思,而后半部与印欧语系的词尾“-wid”相似,意为去了解。而德鲁伊教(Druidism)又以橡果为圣果,所以德鲁依名字的古意是熟悉橡树之人。著名的亚瑟王时期的“梅林”,传说是一位有着超凡法力的巫师,其实他应该是一个有着相当修行的德鲁依教徒。“梅林”一词最初就是泛指那些精通诗之艺、视之艺(占卜)的德鲁伊教巫师们。 德鲁伊宗教崇拜自然,并且将橡树作为至高之神的象征膜拜,因此他们认为寄生在橡树之上的槲寄生(mistletoe)是一种万灵丹药(panacea),具有神圣的功力和最好的疗效,当然也需要通过特别严肃的仪式来采集。只有在满月和新月的日子,或者每月的第六个夜晚,才能举行这种仪式,此时要由德鲁伊祭司中最高级的大德鲁伊(Arch-Druid)(一般同时有两位大德鲁伊,一个在不列颠群岛上,一个在欧洲大陆上)身披白袍、佩戴黄金首饰,手持黄金镰刀上树割取。 Dryad一词原出自druids,即德鲁依。Dryad在罗马、希腊神话中意指森林女神,传说每一棵橡树都居住着精灵,而这些树精通过dryads向人类传达神谕,因此呢后世的文学著作中Dryad通常以树精的形象出现。 德鲁依(Druid) 这个单词的原意是“熟悉橡树的人”,在历史上,他是凯尔特民族(Celt)的神职人员,主要特点是在森林里居住,擅长运用草药进行医疗,橡树、橡果等是他们崇拜的圣物。凯尔特人是一个在公元前5世纪至公元1世纪散居在高卢、不列颠、爱尔兰、欧洲、小亚细亚和巴尔干半岛民族。德鲁依教士精通占卜,对祭祀之礼一丝不苟,也长于历法、医药、天文和文学……同时,他们也是执法者、吟游诗人、探险家的代名词。男女皆可为德鲁依教士,在族内担当祭司、法师或预言者,同样在社会上享有崇高的地位。也有史学家将德鲁依教士与印度的婆罗门( Brahmins)、波斯祅僧(Magi)、埃及祭师(Priests)和巫医(Shamans)相等同。 在起初,因凯尔特为母系社会,所以只有女性可担任德鲁伊,而后逐渐由男性加入。2023-06-07 10:18:151
根据狄更斯的说法,德鲁伊始祖是谁
欧洲人一般认为德鲁伊教徒是自然和中立的拥护者,是将整个荒原都当作是自己家园的隐士,他们使自己的特殊力量保护大自然并且让整个世界获得平衡。在现代奇幻文学中,德鲁伊教徒是自然的崇拜者和维护者们,为了保护自然界可以与任何势力战斗。德鲁伊的英文原名是“Druid”,这个词的前半部“druis”在希腊文中是橡树的意思,而后半部与印欧语系的词尾“-wid”相似,意为去了解。而德鲁伊教(Druidism)又以橡果为圣果,所以德鲁伊名字的古意是熟悉橡树之人。著名的亚瑟王时期的“梅林”,传说是一位有着超凡法力的巫师,其实他应该是一个有着相当修行的德鲁伊教徒。“梅林”一词最初就是泛指那些精通诗之艺、视之艺(占卜)的德鲁伊教巫师们。公元一世纪,信奉基督教的罗马人进攻了信奉德鲁伊教的凯尔特人。作为胜利者的罗马人血洗了德鲁伊教,德鲁伊教徒们被冲进神秘森林的罗马士兵成批成批的屠杀,教士们的尸体被丢在神圣的森林。这场大屠杀让德鲁伊教一蹶不振,德鲁伊教从此蛰伏起来,以后的德鲁伊教只出现在民谣和诗歌中。从此以后几个世纪里他们的威信下降到普通巫师的地位,从前的辉煌一去不返,只有独自呤诵悲哀挽歌。于是,从那时起到如今,德鲁伊渐渐不再像是一个宗教或历史名词,而变成了一个神话里的角色了。如今,我们可以在一些有趣的复古运动中看到他们的仿效体,但真正影响我们的,仍是游戏中那呼风唤雨的施法者。现代各类奇幻文学和各种游戏中的德鲁伊教徒大都取材于公元一世纪以前的传说,并逐渐演变成一个拥有拥有自然力量的神秘组织。2023-06-07 10:18:221
tomcat jdbc和druid对比,各自有哪些优缺点
JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源 com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置。一、下载Druid的jar包 下载地址:http://mvnrepository.com/artifact/com.alibaba/druid/1.0.9,如下图所示: druid.jar依赖log4j的jar包,所以还需要下载log4j的jar包。 log4j的下载地址如下:http://mvnrepository.com/artifact/log4j/log4j/1.2.17,如下图所示: 二、使用Druid配置JNDI数据源2.1、前期准备工作 创建一个Web测试项目Druid_JNDI_Config,将下载下来druid-1.0.9.jar和log4j-1.2.17.jar添加到项目中,在项目的META-INF目录下创建一个context.xml文件 目录结构如下图所示: 在tomcat服务器的lib目录下添加Oracle、MySQL、SQLServer三种数据库的驱动jar包,如下图所示: 2.2、在context.xml文件中加入JNDI的配置信息 在context.xml文件中加入如下配置信息1 <Context> 2 <!-- 使用阿里巴巴的DruidDataSource配置针对Oracle数据库的JNDI数据源 --> 3 <Resource 4 name="jdbc/OracleDataSource" 5 factory="com.alibaba.druid.pool.DruidDataSourceFactory" 6 auth="Container" 7 type="javax.sql.DataSource" 8 driverClassName="oracle.jdbc.OracleDriver" 9 url="jdbc:oracle:thin:@192.168.1.229:1521:lead"10 username="lead_oams"11 password="p"12 maxActive="50"13 maxWait="10000"14 removeabandoned="true"15 removeabandonedtimeout="60"16 logabandoned="false"17 filters="stat"/>18 19 <!-- 使用阿里巴巴的DruidDataSource配置针对MySQL数据库的JNDI数据源 -->20 <Resource 21 name="jdbc/MysqlDataSource"22 factory="com.alibaba.druid.pool.DruidDataSourceFactory"23 auth="Container"24 type="javax.sql.DataSource"25 driverClassName="com.mysql.jdbc.Driver"26 url="jdbc:mysql://192.168.1.233:3306/lead_oams?useUnicode=true&characterEncoding=utf-8"27 username="lead_system"28 password="password"29 maxActive="50"30 maxWait="10000"31 removeabandoned="true"32 removeabandonedtimeout="60"33 logabandoned="false"34 filters="stat"/>35 36 <!--使用阿里巴巴的DruidDataSource配置针对SQLServer数据库的JNDI数据源-->37 <Resource 38 name="jdbc/SqlServerDataSource"39 auth="Container"40 factory="com.alibaba.druid.pool.DruidDataSourceFactory" 41 type="javax.sql.DataSource"42 driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"43 url="jdbc:sqlserver://192.168.1.61:1433;DatabaseName=gaclTest"44 username="sa" 45 password="p@ssw0rd"46 maxActive="50"47 maxWait="10000"48 removeabandoned="true"49 removeabandonedtimeout="60"50 logabandoned="false"51 filters="stat"/>52 </Context> 配置项中指定了各个参数后,在连接池内部是这么使用这些参数的。数据库连接池在初始化的时候会创建initialSize个连接,当有数据库操作时,会从池中取出一个连接。如果当前池中正在使用的连接数等于maxActive,则会等待一段时间,等待其他操作释放掉某一个连接,如果这个等待时间超过了maxWait,则会报错;如果当前正在使用的连接数没有达到maxActive,则判断当前是否空闲连接,如果有则直接使用空闲连接,如果没有则新建立一个连接。在连接使用完毕后,不是将其物理连接关闭,而是将其放入池中等待其他操作复用。同时连接池内部有机制判断,如果当前的总的连接数少于miniIdle,则会建立新的空闲连接,以保证连接数得到miniIdle。如果当前连接池中某个连接在空闲了timeBetweenEvictionRunsMillis时间后任然没有使用,则被物理性的关闭掉。有些数据库连接的时候有超时限制(mysql连接在8小时后断开),或者由于网络中断等原因,连接池的连接会出现失效的情况,这时候设置一个testWhileIdle参数为true,可以保证连接池内部定时检测连接的可用性,不可用的连接会被抛弃或者重建,最大情况的保证从连接池中得到的Connection对象是可用的。当然,为了保证绝对的可用性,你也可以使用testOnBorrow为true(即在获取Connection对象时检测其可用性),不过这样会影响性能。2023-06-07 10:18:311
在使用druid数据库连接池执行后为啥会出现出现无效的源发行版14
执行了错误的sql。问题就出在druid连接池上,连接池在执行完了某一条错误的sql以后,报错信息会被保存在执行sql的线程中,当下一条拿到这个线程的sql执行时,就直接报错,而不会去执行sql。最终的解决方法就是解决那条问题线程,肯定是哪里出错才会保留报错信息,或者升级druid的版本。2023-06-07 10:18:381
在Oracle下druid出现的各种问题,求助
<obj name="dataSource" type="com.alibaba.druid.pool.DruidDataSource"> <field name="driverClassName"><str>oracle.jdbc.driver.OracleDriver</str></field> <field name="url"><str>jdbc:oracle:thin:@127.0.0.1:1521:tsoc</str></field> <field name="username"><str>user</str></field> <field name="password"><str>123456</str></field> <field name="maxActive"><int>500</int></field> <field name="minIdle"><int>30</int></field> <!-- 配置获取连接等待超间 --> <field name="maxWait"><int>10000</int></field> <!-- 配置间隔久才进行检测检测需要关闭空闲连接单位毫秒 --> <field name="timeBetweenEvictionRunsMillis"><int>60000</int></field> <!-- 配置连接池存间单位毫秒 --> <field name="minEvictableIdleTimeMillis"><int>300000</int></field> <field name="testWhileIdle"><bool>true</bool></field> <field name="testOnBorrow"><bool>false</bool></field> <field name="testOnReturn"><bool>false</bool></field> <field name="defaultAutoCommit"><bool>true</bool></field> <field name="validationQuery"><str>select 1 + 1</str></field> </obj>补充:数据库连接并没耗尽使用select * from v$session才36使用其测试程序或者客户端工具都连接数据库转载仅供参考!2023-06-07 10:18:451
druid sql监控 怎么看
首先是过滤器filter的配置,在web.xml中添加如下配置,如图:选项配置结束之后,就是我们监控界面的路径配置了,配置如下图Druid已经配置好,接着在浏览器中访问,如图所以:输入访问地址后,进入Druid监控页面,如图所示:此时,在浏览器中输入需要监控系统页面网址,然后点击上个画面中的“SQL监控”即可,此时就可以看到每个SQL语句所用的时间,如下图所示:2023-06-07 10:19:031
jfinal使用druid怎么配置druid登录权限
jfinal 对 druid 的登录与权限支持,不用修改 web.xml,直接在 YourJFinalConfig 的 configHandler 中添加DruidStatViewHandler,并为其指定IDruidStatViewAuth 实现类即可:public void configHandler(Handlers me) { DruidStatViewHandler dsvh = new DruidStatViewHandler("visitPath", new IDruidStatViewAuth(){ public boolean isPermitted(HttpServletRequest request) { // 这里只是简单的判断访问者是否登录,还可以做更加细致的权限控制 return request.getSession().getAttribute("loginUser") != null; } }); me.add(dsvh);}以上的 IDreuidStatViewAuth 只是简单判断用户是否登录,实际项目中可以对该用户是否拥有访问 druid 的权限进行更细致的检测。以上的 "visitPath" 是访问 druid 的 url,DruidStatViewHander 会拦截所有请求,并将 "visitePath" 定向到 druid 管理界面。2023-06-07 10:19:101