`

使用Druid作为数据源

阅读更多

Druid号称是Java语言中最好的数据库连接池。

1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。

 

2) 替换DBCPC3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。

3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。

4) SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-LoggingLog4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。

5) 能够提供基于Filter-Chain模式的插件体系。

 

下面介绍下如何在项目中集成Druid:

1、maven依赖

<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid-version}</version>
    </dependency>

 2、配置web.xml

	<!-- druid -->
	<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>

	<filter>
		<filter-name>DruidWebStatFilter</filter-name>
		<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
		<init-param>
			<param-name>exclusions</param-name>
			<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>DruidWebStatFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 3、spring.xml中配置druid数据源

	<!-- 数据源druid -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" 
	init-method="init" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		
		 <!-- 配置初始化大小、最小、最大 -->  
	    <property name="initialSize" value="${druid.pool.size.init}" />  
	    <property name="minIdle" value="${druid.pool.size.min}" />   
	    <property name="maxActive" value="${druid.pool.size.max}" />  
	    
	    <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
	    <property name="filters" value="stat" /> 
	</bean>

 

Druid常见问题:

 

1、怎么打开Druid的监控统计功能

 Druid的监控统计功能是通过filter-chain扩展实现,如果你要打开监控统计功能,配置StatFilter

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

 

2、怎样使用Druid的内置监控页面

内置监控页面是一个Servlet

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE

 

3、内置监控中的Web和Spring关联监控怎么配置?

Web关联监控配置 

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_%E9%85%8D%E7%BD%AEWebStatFilter

Spring关联监控配置 

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_Druid%E5%92%8CSpring%E5%85%B3%E8%81%94%E7%9B%91%E6%8E%A7%E9%85%8D%E7%BD%AE

 

4、怎么配置防御SQL注入攻击

Druid提供了WallFilter,它是基于SQL语义分析来实现防御SQL注入攻击的。

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter

 

5、Druid有没有参考配置

不同的业务场景需求不同,你可以使用我们的参考配置,但建议你仔细阅读相关文档,了解清楚之后做定制配置。 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_DruidDataSource%E5%8F%82%E8%80%83%E9%85%8D%E7%BD%AE

 

6、我想日志记录JDBC执行的SQL,如何配置

Druid提供了Log4jFilter、CommonsLogFilter和Slf4jFilter。

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter

 

7、我的程序可能产生连接泄漏了,有什么办法?

Druid提供了多种监测连接泄漏的手段。

https://github.com/alibaba/druid/wiki/%E8%BF%9E%E6%8E%A5%E6%B3%84%E6%BC%8F%E7%9B%91%E6%B5%8B

 

8、在Druid中使用PSCache会有内存占用过大问题么?

连接Oracle数据库,打开PSCache,在其他的数据库连接池都会存在内存占用过多的问题,Druid是唯一解决这个问题的连接池。

https://github.com/alibaba/druid/wiki/Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%8BPreparedStatementCache%E5%86%85%E5%AD%98%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88

 

9、有没有和其他数据库连接池的对比?

https://github.com/alibaba/druid/wiki/%E5%90%84%E7%A7%8D%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0%E5%AF%B9%E6%AF%94

 

10、从其他连接池迁移要注意什么?

不同连接池的参数参照对比:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=6947005

DBCP迁移 https://github.com/alibaba/druid/wiki/DBCP%E8%BF%81%E7%A7%BB

 

11、Druid中有没有类似Jboss DataSource中的ExceptionSorter

ExceptionSorter是JBoss DataSource中的优秀特性,Druid也有一样功能的ExceptionSorter,但不用手动配置,自动识别生效的。

具体看这里:http://code.alibabatech.com/wiki/display/Druid/ExceptionSorter

 

12、Druid中的maxIdle为什么是没用的?

maxIdle是Druid为了方便DBCP用户迁移而增加的,maxIdle是一个混乱的概念。连接池只应该有maxPoolSize和minPoolSize,druid只保留了maxActive和minIdle,分别相当于maxPoolSize和minPoolSize。

 

13、我的应用配置的是JNDI数据源,可以用DruidDataSource么?

DruidDataSource支持JNDI配置,具体看这里:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_JNDI_Tomcat 

具体实现的类是这个:com.alibaba.druid.pool.DruidDataSourceFactory,你可以阅读代码加深理解。

 

14、我的应用已使用DBCP,是代码中写死的,怎样更换为Druid?

可以的,Druid提供了一个中完全平滑迁移DBCP的办法。

 1) 从http://repo1.maven.org/maven2/com/alibaba/druid/druid-wrapper/ 下载druid-wrapper-xxx.jar 

2) 加入druid-xxx.jar 

3) 从你的WEB-INF/lib/中删除dbcp-xxx.jar 

4) 按需要加上配置,比如JVM启动参数加上-Ddruid.filters=stat,动态配置druid的filters 

这种用法,使得可以在一些非自己开发的应用中使用Druid,例如在sonar中部署druid,sonar是一个使用jruby开发的web应用,写死了DBCP,只能够通过这种方法来更换。

 

 

15、有一些SQL执行很慢,我希望日志记录下来,怎么设置?

在StatFilter配置中有慢SQL执行日志记录。

看这里 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

 

16、我希望加密我的数据库密码怎么办?

运维和DBA都不希望把密码明文直接写在配置文件中,Druid提供了数据库秘密加密的功能。

具体看这里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

 

17、如果DruidDataSource在init的时候失败了,不再使用,是否需要close

是的,如果DruidDataSource不再使用,必须调用close来释放资源,释放的资源包括关闭Create和Destory线程。

 

18、DruidDataSource支持哪些数据库?

理论上说,支持所有有jdbc驱动的数据库。

 

19、Oracle下jdbc executeBatch时,更新行数计算不正确

使用jdbc的executeBatch 方法,如果数据库为oracle,则无论是否成功更新到数据,返回值都是-2,而不是真正被sql更新到的记录数,这是Oracle JDBC Driver的问题,Druid不作特殊处理。

 

20、Druid如何自动根据URL自动识别DriverClass的

Druid是根据url前缀来识别DriverClass的,这样使得配置更方便简洁。

 

21、如何保存监控记录

https://github.com/alibaba/druid/wiki/%E6%80%8E%E4%B9%88%E4%BF%9D%E5%AD%98Druid%E7%9A%84%E7%9B%91%E6%8E%A7%E8%AE%B0%E5%BD%95

 

22、我想Log输出SQL执行的信息怎么办?

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter

 

23、如何配置Druid内置的log实现

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AEdruid%E5%86%85%E7%BD%AE%E7%9A%84log%E5%AE%9E%E7%8E%B0

7
0
分享到:
评论
1 楼 haoran_10 2016-06-24  
最大的好处就是可以监控mysql

相关推荐

    springboot整合mybatis,使用druid作为数据源监控

    在本文中,我们将深入探讨如何在SpringBoot项目中整合MyBatis,并利用Druid作为数据源进行SQL执行监控。这是一项关键的技术实践,对于优化应用性能、排查问题以及提升数据库操作效率具有重要意义。 首先,...

    springboot druid maven多数据源(mysql+SqlServer)

    本项目将介绍如何在SpringBoot项目中结合Maven构建一个支持多数据源的系统,特别是如何处理MySQL和SQLServer两种不同的数据库类型,并使用Druid作为数据源连接池。 首先,我们需要理解“多数据源”这一概念。多数据...

    SpringBoot+druid+多数据源示例

    本示例将详细讲解如何在SpringBoot项目中集成Druid并实现多数据源的自动切换。 首先,我们需要理解多数据源的概念。多数据源意味着应用程序可以同时连接和操作多个不同的数据库,这对于数据分层、高可用性和分布式...

    SpringBoot整合JDBC&Druid;数据源示例

    而Druid作为一款优秀的数据库连接池,提供了丰富的监控和管理功能,能帮助我们更好地管理和优化数据库操作。 首先,我们需要在项目的`pom.xml`文件中添加Druid的依赖。Druid的最新版本通常可以在Maven中央仓库找到...

    spring boot 整合 mybatis,使用Druid数据源

    在本文中,我们将深入探讨如何将Spring Boot框架与MyBatis持久层框架集成,并使用Druid作为数据源。Spring Boot以其简洁的配置和自动化配置能力,使得开发过程更加高效;MyBatis则提供了灵活的SQL映射机制,而Druid...

    spring boot 整合mybtis druid 多数据源 源代码

    Druid作为连接池,其优势在于强大的监控能力。我们可以配置Druid的StatFilter,收集SQL执行的统计信息,包括执行时间、次数等。此外,Druid还提供了Web监控页面,方便开发者实时查看数据库连接池的状态。在Spring ...

    Springboot Druid多数据源 多线程

    总结起来,这个项目展示了如何利用Spring Boot和Druid实现多数据源切换,以及如何在Spring Boot中配置和使用多线程来提升数据库操作的并发性能。对于初学者,这是一个很好的学习资源,可以深入理解Spring Boot的自动...

    Spring Boot整合Mybatis使用druid实现多数据源自动切换

    在Spring Boot中使用Druid实现多数据源,我们需要: 1. 定义数据源配置:在`application.properties`或者自定义的配置类中,配置两个数据源(例如:primary和secondary)的连接信息,包括URL、用户名、密码等。 2....

    springboot druid 多数据源demo

    总的来说,本项目提供了一个实战示例,展示了如何在Spring Boot应用中使用Druid配置多数据源,以及如何进行数据源路由和事务管理。这对于开发者理解和掌握Spring Boot与数据库的交互具有很高的参考价值。

    【Mybatis自定义DataSource使用druid】

    本篇文章将深入探讨如何在MyBatis中自定义使用Druid作为数据源。 首先,我们需要了解数据源(DataSource)在Java应用中的作用。数据源是应用程序和数据库之间的桥梁,它负责管理数据库连接,提高系统的并发性能。在...

    Spring Boot + Druid + Mybatis + Atomikos 配置多数据源 并支持分布式事务

    在多数据源配置中,Druid可以作为一个高效且灵活的工具,帮助管理不同的数据库连接。 Mybatis是一个轻量级的持久层框架,它允许我们通过XML或注解来编写SQL映射文件,从而更直观地控制SQL执行。在多数据源环境中,...

    Springboot+mybatis+druid多数据源配置(oracle+mybatis)

    使用Druid作为连接池,因为它提供了丰富的监控和扩展功能。首先引入Druid的依赖: ```xml &lt;groupId&gt;com.alibaba&lt;/groupId&gt; &lt;artifactId&gt;druid-spring-boot-starter &lt;version&gt;1.2.13 ``` 然后,为每个...

    spring boot+mybatis+druid多数据源.zip

    在多数据源场景中,Druid不仅可以作为数据源管理工具,还提供了数据源切换、监控和统计分析的能力。Druid的数据源代理机制使得在运行时动态切换数据源成为可能,这对于处理多租户或者分库分表等复杂业务非常有用。 ...

    Springboot整合Druid与Mybatis的多数据源切换

    3. **配置Druid数据源**:使用`DruidDataSource`类作为数据源,并在配置类中通过`@Bean`注解声明。别忘了为每个数据源设置不同的名字,如`primaryDataSource`和`secondaryDataSource`。 4. **创建数据源路由`...

    springboot-AOP实现多数据源动态切换(Druid连接池)

    - **配置文件**(yml格式):在application.yml中配置多个数据源的信息,使用`spring.datasource.druid`作为根路径,为每个数据源设置不同的路径,例如`db1`和`db2`。每个数据源下配置包括数据库类型、驱动类名、...

    springmvc-mybatis 整合druid多数据源配置读写实现读写分离,windows上mysql主从复制

    Druid的多数据源配置可以方便地实现这一目标。以下是一个基本的配置示例: ```xml &lt;bean id="dataSourceMaster" class="com.alibaba.druid.pool.DruidDataSource"&gt; &lt;!-- 配置主库连接信息 --&gt; ...

    mybatis+druid association 切换数据源

    本话题聚焦于"Mybatis+Druid Association 数据源切换",主要探讨在特定场景下如何解决Druid的DruidPooledStatement无法直接切换数据源的问题。 Druid是阿里巴巴开源的一个强大而全面的Java数据库连接池,它提供了...

    springboot + mybatis(通用mapper) + druid多数据源

    【标题】"SpringBoot + MyBatis(通用Mapper) + Druid多数据源"是一个常见的Java后端开发架构,用于构建高效、稳定且可扩展的Web应用程序。在这个框架中,SpringBoot简化了Spring应用的初始化和配置,MyBatis作为持久...

    SpringBoot + mybatis-plus + druid 实现mySql与Orcl双数据源

    这里,我们通过`DataSourceContextHolder`来设置当前使用的数据源,这个类需要自己实现,它通常会使用ThreadLocal来存储当前线程的数据源标识。 在Mybatis-Plus配置中,需要配置两个MapperFactoryBean,分别对应两...

    SpringBoot多数据源配置(方式一:配置多个mapper扫描不同的包路径实现多数据源配置).docx

    Spring Boot作为一款流行的Java框架,为开发者提供了灵活的多数据源配置方案。本文将详细介绍如何通过配置多个Mapper扫描不同的包路径来实现多数据源的配置。 #### 二、多数据源配置背景与应用场景 在Spring Boot...

Global site tag (gtag.js) - Google Analytics