springboot 整合druid记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuxiao_wei/article/details/85753541

有两种方法

引入druid依赖

                <dependency>
		    <groupId>com.alibaba</groupId>
		    <artifactId>druid</artifactId>
		    <version>1.0.25</version>
		</dependency>

application.properties配置druid信息

######################Druid连接池得配置信息#################
初始化连接大小
spring.druid.initialSize = 5                                 
#最小连接池数量
spring.druid.minIdle = 5                                     
#最大连接池数量
spring.druid.maxActive = 20                                  
#获取连接时最大等待时间,单位毫秒
spring.druid.maxWait = 60000                                 
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.druid.timeBetweenEvictionRunsMillis = 60000           
#配置一个连接在池中最小生存的时间,单位是毫秒
spring.druid.minEvictableIdleTimeMillis = 300000            
#测试连接
spring.druid.validationQuery = SELECT 1 FROM DUAL           
#申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
spring.druid.testWhileIdle = true                           
#获取连接时执行检测,建议关闭,影响性能
spring.druid.testOnBorrow = false                           
#归还连接时执行检测,建议关闭,影响性能
spring.druid.testOnReturn = false                            
#是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
spring.druid.poolPreparedStatements = false                 
#开启poolPreparedStatements后生效
spring.druid.maxPoolPreparedStatementPerConnectionSize = 20  
#配置扩展插件,常用的插件有=>stat:监控统计  log4j:日志  wall:防御sql注入
spring.druid.filters = stat,wall,log4j                       
#通过connectProperties属性来打开mergeSql功能;慢SQL记录  
spring.druid.connectionProperties = 'druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000'  

spring.datasource.useGlobalDataSourceStat=true

config包下 新建druidConfig Java文件 由于是配置文件需要加configuration注解

@Configuration
public class druidConfig {

	@Value("${spring.datasource.url}")
	private String url;
	
	@Value("${spring.datasource.username}")
	private String username;
	
	@Value("${spring.datasource.password}")
	private String password;
	
	@Value("${spring.datasource.driver-class-name}")
	private String driverClassName;
	
	@Value("${spring.druid.initialSize}")
	private int initialSize;
	
	@Value("${spring.druid.minIdle}")
	private int minIdle;
	
	@Value("${spring.druid.maxActive}")
	private int maxActive;
	
	@Value("${spring.druid.maxWait}")
	private int maxWait;
	
	@Value("${spring.druid.timeBetweenEvictionRunsMillis}")
	private int timeBetweenEvictionRunsMillis;
	
	@Value("${spring.druid.minEvictableIdleTimeMillis}")
	private int minEvictableIdleTimeMillis;
	
	@Value("${spring.druid.validationQuery}")
	private String validationQuery;
	
	@Value("${spring.druid.testWhileIdle}")
	private boolean testWhileIdle;
	
	@Value("${spring.druid.testOnBorrow}")
	private boolean testOnBorrow;
	
	@Value("${spring.druid.testOnReturn}")
	private boolean testOnReturn;
	
	@Value("${spring.druid.poolPreparedStatements}")
	private boolean poolPreparedStatements;
	
	@Value("${spring.druid.maxPoolPreparedStatementPerConnectionSize}")
	private int maxPoolPreparedStatementPerConnectionSize;
	
	@Value("${spring.druid.filters}")
	private String filters;
	
	@Value("${spring.druid.connectionProperties}")
	private String connectionProperties;
	
    @Value("${spring.datasource.useGlobalDataSourceStat}")  
    private boolean useGlobalDataSourceStat;

	//********************************druid监控****************************
	@Bean
	@Primary
	public DataSource dataSource(){
		DruidDataSource dataSource = new DruidDataSource();
		dataSource.setUrl(url);
		dataSource.setUsername(username);
		dataSource.setPassword(password);
		dataSource.setDriverClassName(driverClassName);;
		
		//druid
		dataSource.setInitialSize(initialSize);
		dataSource.setMinIdle(minIdle);
		dataSource.setMaxActive(maxActive);
		dataSource.setMaxWait(maxWait);
		dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
		dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
		dataSource.setValidationQuery(validationQuery);
		dataSource.setTestWhileIdle(testWhileIdle);
		dataSource.setTestOnBorrow(testOnBorrow);
		dataSource.setTestOnReturn(testOnReturn);
		dataSource.setPoolPreparedStatements(poolPreparedStatements);
		dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
		dataSource.setConnectionProperties(connectionProperties);
		dataSource.setUseGlobalDataSourceStat(useGlobalDataSourceStat);  
		try {
			dataSource.setFilters(filters);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return dataSource;
	}

在resource下新建druid的spring监控内容 由于注入方式没有实现 目前先用xml形式

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop
		http://www.springframework.org/schema/aop/spring-aop.xsd">
	<!-- 配置_Druid和Spring关联监控配置 -->
	<bean id="druid-stat-interceptor"
		class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"></bean>
	<!-- 方法名正则匹配拦截配置 -->
	<bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
		scope="prototype">
		<property name="patterns">
			<list>
				<value>com.iboomer.controller.*</value>
			</list>
		</property>
	</bean>
	<aop:config proxy-target-class="true">
		<aop:advisor advice-ref="druid-stat-interceptor"
			pointcut-ref="druid-stat-pointcut" />
	</aop:config>
</beans>

以上这些都是必须有的 通用的文件 接下来配置其他的内容

方法1:

建立一个druid页面 和拦截功能 可以新建一个java文件 需要加configuration注解 也可以直接在druidConfig里直接添加

/**
	 * 建立一个druid页面
	 * @return
	 */
	@Bean
	public ServletRegistrationBean statViewServlet(){
		ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
		//白名单
		servletRegistrationBean.addInitParameter("alow", "127.0.0.1");
		//黑名单
		servletRegistrationBean.addInitParameter("deny", "0.0.0.0");
		//登录名
		servletRegistrationBean.addInitParameter("loginUsername", "root");
		//登陆密码
		servletRegistrationBean.addInitParameter("loginPassword", "root");
		//是否重置数据
		servletRegistrationBean.addInitParameter("resetEnable", "false");
		return servletRegistrationBean;
	}
	
	/**
	 * 设置拦截器
	 * @return
	 */
	@Bean
	public FilterRegistrationBean statFilter(){
		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
		filterRegistrationBean.addUrlPatterns("/*");
		filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
		return filterRegistrationBean;
	}

这样第一种就实现了 直接访问localhost:端口号/druid/index.html即可 访问任意个接口 观察druid界面变化

方法二:

新建DruidFilter

@WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",
initParams={
    @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源
})
public class DruidFilter extends WebStatFilter {

}

新建DruidServlet

@WebServlet(urlPatterns = "/druid/*", 
    initParams={
            @WebInitParam(name="allow",value="127.0.0.1"),// IP白名单 (没有配置或者为空,则允许所有访问)
            @WebInitParam(name="deny",value="0.0.0.0"),// IP黑名单 (存在共同时,deny优先于allow)
            @WebInitParam(name="loginUsername",value="admin"),// 用户名
            @WebInitParam(name="loginPassword",value="admin"),// 密码
            @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
    })
public class DruidServlet extends StatViewServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

}

这样就可以了 访问如同方法一样

多多指教

猜你喜欢

转载自blog.csdn.net/wuxiao_wei/article/details/85753541