Druid内置提供一个StatFilter,用于统计监控信息。
参考文档:(https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter)
1.创建DruidStatueServlet
// 匹配所有/druid/* 的请求 进行处理
@WebServlet(urlPatterns = "/druid/*",
initParams = {
@WebInitParam(name="allow",value = ""),//ip白名单,没有配置或空,则允许所有访问
@WebInitParam(name="deny",value = ""),//ip黑名单
@WebInitParam(name = "loginUsername",value = "admin"),//用户名
@WebInitParam(name="loginPassword",value = "123456"),//密码
@WebInitParam(name="resetEnable",value="false")//禁用html页面的reset all功能
})
public class DruidStatueServlet extends StatViewServlet {
}
开启后即可以启动服务器,并且通过地址栏访问监控页面,访问规则:
ip:端口号/应用名/druid/login.html
2.创建WebStatFilter过滤器
@WebFilter(urlPatterns = "/*",
initParams ={
@WebInitParam(name="exclusions",value="*.js,*.jpg,*.png,*.css,/druid/*"),//忽略后缀
@WebInitParam(name="profileEnable",value = "true")//开启sql详情
}
)
public class DruidWebFilter extends WebStatFilter {
}
3.配置DruidDataSource数据源
//数据源
@Bean
public DruidDataSource getDataSource() {
Properties properties = new Properties();
try {
properties.load(SpringMybatisConfig.class.getClassLoader().getResourceAsStream("db.properties"));
} catch (IOException e) {
e.printStackTrace();
}
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.configFromPropety(properties);
//配置使用druid内置filter 通过别名,别名...的方式设置
//stat:开启监控功能过滤器
try {
//开启性能监控、sql防火墙、日志
druidDataSource.setFilters("stat,wall,log4j2");
//开启慢sql监控,大于1000毫秒的为慢sql,默认是3秒
druidDataSource.setConnectionProperties("druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000");
} catch (SQLException e) {
e.printStackTrace();
}
return druidDataSource;
}
4.配置session插件
//sqlSessionFactor创建
@Bean
public SqlSessionFactoryBean getSessionFactoryBean(DruidDataSource dataSource) {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
// org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
//tkmapper 需要使用 tkmapper提供的configuration
//默认使用驼峰命名转换
tk.mybatis.mapper.session.Configuration configuration = new tk.mybatis.mapper.session.Configuration();
configuration.setLogImpl(Log4j2Impl.class);//设置日志类
configuration.setMapUnderscoreToCamelCase(true);//设置驼峰命名转换
configuration.setCallSettersOnNulls(true);//解决查询返回map,null的数据不封装key到map中的问题
configuration.setObjectWrapperFactory(new MapWrapperFactory());
sessionFactoryBean.setConfiguration(configuration);
//设置分页插件
PageInterceptor pageInterceptor = new PageInterceptor();
pageInterceptor.setProperties(new Properties());//使用默认配置
sessionFactoryBean.setPlugins(new Interceptor[]{pageInterceptor});//设置使用插件
return sessionFactoryBean;
}
5.注解配置spring监控
设置druid 的 aop切面类
@Bean(name = "druidStatInterceptor")//设置druid 的 aop切面类
public DruidStatInterceptor getDruidStatInterceptor() {
DruidStatInterceptor druidStatInterceptor = new DruidStatInterceptor();
return druidStatInterceptor;
}
配置spring监控
public BeanNameAutoProxyCreator getAutoProxyCreator() {
BeanNameAutoProxyCreator beanNameAutoProxyCreator = new BeanNameAutoProxyCreator();
beanNameAutoProxyCreator.setProxyTargetClass(true);
beanNameAutoProxyCreator.setBeanNames(new String[]{"*Mapper", "*Service*"});
beanNameAutoProxyCreator.setInterceptorNames("druidStatInterceptor");
return beanNameAutoProxyCreator;
}