专栏首页杂烩SSM项目搭建之druid 原

SSM项目搭建之druid 原

Druid是一个JDBC组件,它包括三部分: 

  • DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 
  • DruidDataSource 高效可管理的数据库连接池。 
  • SQLParser 

Druid可以做什么? 

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

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

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

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

扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。 

    官方语言结束。

    首先是jar配置,找到pom.xml

    pom.xml

<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.7</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis.caches</groupId>
			<artifactId>mybatis-oscache</artifactId>
			<version>1.0.1</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
		</dependency>

然后是applicationContext.xml

<!-- 数据库配置文件位置 -->
	<context:property-placeholder location="classpath:config\jdbc.properties" />

	<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}</value>
		</property>
		<property name="password" value="${jdbc_password}" />
		<!-- 若密碼加密需指定程序解密 -->
		<property name="connectionProperties" value="config.decrypt=true" />

		<!-- 根据url自动识别 这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName -->
		<!-- <property name="driverClassName" value="${driverClass}" /> -->
		<!-- 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall -->
		<property name="filters">
			<value>${filters}</value>
		</property>
		<!-- 最大连接池数量 -->
		<property name="maxActive">
			<value>${maxActive}</value>
		</property>
		<!-- 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 -->
		<property name="initialSize">
			<value>${initialSize}</value>
		</property>
		<!-- 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 -->
		<!-- <property name="maxWait"><value>60000</value></property> -->
		<!-- 最小连接池数量 -->
		<property name="minIdle">
			<value>${minIdle}</value>
		</property>
		<!-- 有两个含义:1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明 -->
		<property name="timeBetweenEvictionRunsMillis">
			<value>${timeBetweenEvictionRunsMillis}</value>
		</property>
		<property name="minEvictableIdleTimeMillis">
			<value>${minEvictableIdleTimeMillis}</value>
		</property>
		<!-- 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。 -->
		<!-- <property name="validationQuery"><value></value></property> -->
		<!-- 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 -->
		<property name="testWhileIdle">
			<value>${testWhileIdle}</value>
		</property>
		<!-- 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 -->
		<property name="testOnBorrow">
			<value>${testOnBorrow}</value>
		</property>
		<!-- 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 -->
		<property name="testOnReturn">
			<value>${testOnReturn}</value>
		</property>


		<!-- 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。 -->
		<!-- <property name="poolPreparedStatements"><value>false</value></property> -->
		<!-- 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 -->
		<!-- <property name="maxOpenPreparedStatements"><value>-1</value></property> -->


		<!-- 配置removeAbandoned对性能会有一些影响,建议怀疑存在泄漏之后再打开。在上面的配置中,如果连接超过30分钟未关闭,就会被强行回收,并且日志记录连接申请时的调用堆栈。 -->
		<!-- 打开removeAbandoned功能 -->
		<!-- <property name="removeAbandoned" value="true" /> -->
		<!-- 1800秒,也就是30分钟 -->
		<!-- <property name="removeAbandonedTimeout" value="1800" /> -->
		<!-- 关闭abanded连接时输出错误日志 -->
		<!-- <property name="logAbandoned" value="true" /> -->
	</bean>

	<!-- 配置druid监控spring jdbc -->
	<bean id="druid-stat-interceptor"
		class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor" />

	<bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
		scope="prototype">
		<property name="patterns">
			<list>
				<value>com.cmicroentropy.soa.controller.*</value>
				<value>com.cmicroentropy.soa.service.*</value>
			</list>
		</property>
	</bean>
	<aop:config proxy-target-class="true">
		<aop:advisor advice-ref="druid-stat-interceptor"
			pointcut-ref="druid-stat-pointcut" />
	</aop:config>

    另外druid的一个特点就是监控,在web.xml加上

<!-- 
		druid监控,生产环境建议关闭	 -->
	<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>
   		<!-- 开启session统计功能 -->
		<init-param>
			<param-name>sessionStatEnable</param-name>
			<param-value>false</param-value>
		</init-param>
		<!-- profileEnable能够监控单个url调用的sql列表。 -->
		<init-param>
			<param-name>profileEnable</param-name>
			<param-value>false</param-value>
		</init-param>
		<!-- 你可以配置principalSessionName,使得druid能够知道当前的session的用户是谁,根据需要,把其中的xxx.user修改为你user信息保存在session中的sessionName。注意:如果你session中保存的是非string类型的对象,需要重载toString方法。 -->
		<init-param>
			<param-name>principalSessionName</param-name>
			<param-value>user</param-value>
		</init-param>
		<!-- 缺省sessionStatMaxCount是1000个 -->
		<init-param>
	        <param-name>sessionStatMaxCount</param-name>
	        <param-value>1000</param-value>
    	</init-param>
  </filter>
  <filter-mapping>
    <filter-name>DruidWebStatFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
	<!-- 静态文件 -->
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.css</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.js</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.gif</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.jpg</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.png</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.html</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.htm</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.xml</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.swf</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.woff</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.ttf</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.map</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.eot</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.svg</url-pattern>
	</servlet-mapping>
	<!-- 
		druid监控后台设置-->
	<servlet>
		<servlet-name>DruidStatView</servlet-name>
		<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
		<!-- 是否允许重置 -->
		<init-param>
			<param-name>resetEnable</param-name>
			<param-value>false</param-value>
		</init-param>
		<!-- 用户密码权限 -->
		<init-param>
			<!-- 用户名 -->
			<param-name>loginUsername</param-name>
			<param-value>scc</param-value>
		</init-param>
		<init-param>
			<!-- 密码 -->
			<param-name>loginPassword</param-name>
			<param-value>scc123</param-value>
		</init-param>
		<!-- ip权限 <init-param> <param-name>allow</param-name> <param-value>127.0.0.1</param-value> 
			</init-param> <init-param> <param-name>deny</param-name> <param-value></param-value> 
			</init-param> -->
	</servlet>
	<servlet-mapping>
		<servlet-name>DruidStatView</servlet-name>
		<url-pattern>/druid/*</url-pattern>
	</servlet-mapping>

好了,最终会有一个文章,贴出整个项目的各个配置文件,不要急。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SSM项目搭建三(终) 原

    尚浩宇
  • springmvc http异步请求 原

        servlet3.0开始支持异步请求,springmvc3.2引入支持异步http。相比于servlet2.5,异步后的程序在系统性能,尤其是吞吐量,资...

    尚浩宇
  • spring的spel 转

     Spring 3.0 创建了一种新的方式用以配置对象的注入(set注入或者构造参数注入),它便是SpEL (Spring Expression Languag...

    尚浩宇
  • SSM整合及聚合工程的搭建

    Tips: 这样配置的目的就是为了使springmvc的容器可以获得spring容器内的实例。因此配置一个监听器,在应用加载时就加载spring容器。

    宋先生
  • 应用Druid进行数据源、SQL、Web应用、URI、Session等监控的简单实现

    最近由于用户量的增加,项目有点力不从心了,感觉比以前慢了许多,着实给咱程序猿吓了一跳,莫非RP有限? 那当然是不可能的啦!仔细排查了下原因,有一点不可以质疑的就...

    哎_小羊
  • 快速集成 Flyway、MyBatis、MyBatis-Generator、H2

    导读:如何快速集成 Flyway,MyBatis,MyBatis-Generator,H2? 优质教程请关注微信公众号“Web项目聚集地”

    用户1093975
  • eclipse J2EE中将servlet与freemarker结合使用

    我参考:http://314858770.iteye.com/blog/966863 

    克虏伯
  • 阿里Druid数据连接池在SSM框架中的配置使用

    首先可以参考阿里在GitHub给出的一些说明:

    似水的流年
  • 学会这个工具的使用,让你快速生成验证码

    验证码是我们做人机验证最常用的方式,常用于敏感操作的验证,比如:登录、注册、修改等。

    享智同行
  • 饼图legend显示百分比 原

    (adsbygoogle = window.adsbygoogle || []).push({});

    tianyawhl

扫码关注云+社区

领取腾讯云代金券