微服務架構實戰篇(四):Spring boot2.0 集成Druid監控數據庫

簡介

該項目主要利用Spring boot2.0 + Mybatis +Druid 實現監控數據庫訪問性能。

  • Druid是一個非常優秀的數據庫連接池。在功能、性能、擴展性方面,都超過其他數據庫連接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。
  • Druid已經在阿里巴巴部署了超過600個應用,經過一年多生產環境大規模部署的嚴苛考驗。
  • Druid是一個JDBC組件,它包括三個部分:
  • 基於Filter-Chain模式的插件體系。
  • DruidDataSource 高效可管理的數據庫連接池。
  • SQLParser
  • 源碼地址
  • GitHub:https://github.com/yundianzixun/Spring-Boot-2.0-Mybatis-Druid
  • 聯盟公眾號:IT實戰聯盟
  • 我們社區:https://100boot.cn

小工具一枚,歡迎使用和Star支持,如使用過程中碰到問題,可以提出Issue,我會盡力完善該Starter

版本基礎

  • Spring Boot:2.0.4
  • Mybatis:3.4.5
  • Druid:1.1.10

操作步驟

第一步:下載Spring boot2.0 + Mybatis + PageHelper項目

  • GitHub地址:https://github.com/yundianzixun/Spring-boot2.0-Mybatis-PageHelper
  • 參考文檔:https://www.jianshu.com/p/920199133db0

第二步:添加maven依賴

org.springframework.boot

spring-boot-configuration-processor

true

第三步:application.properties 增加Druid監控的配置

# 開啟哪些攔截器 stat:性能監控,wall: 防火牆控制

druid.filters=stat,wall

使用這個filter的配置,開啟對監控的支持。屬性類型是字符串,通過別名的方式配置擴展插件,常用的插件有:

  • 監控統計用的filter:stat
  • 日誌用的filter:log4j
  • 防禦sql注入的filter:wall

第四步:DatasourceConfig配置信息

package com.itunion.springbootstarterdruid.config;

import com.alibaba.druid.pool.DruidDataSource;

import org.apache.ibatis.session.SqlSessionFactory;

import org.mybatis.spring.SqlSessionFactoryBean;

import org.mybatis.spring.annotation.MapperScan;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.core.io.ClassPathResource;

import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.annotation.PostConstruct;

import javax.sql.DataSource;

import java.sql.SQLException;

@Configuration

@MapperScan(basePackages = "com.itunion.springbootstarterdruid.mapper")

@ConfigurationProperties(prefix = "druid")

public class DatasourceConfig {

private static Logger log = LoggerFactory.getLogger(DatasourceConfig.class);

@Value("${druid.driver}")

private String driverClassName;

@Value("${druid.url}")

private String url;

@Value("${druid.username}")

private String username;

@Value("${druid.password}")

private String password;

@Value("${druid.init-size}")

private int initSize;

@Value("${druid.min-idel}")

private int minIdel;

@Value("${druid.max-active}")

private int maxActive;

@Value("${druid.login.timeout.seconds}")

private int loginTimeoutSeconds;

@Value("${druid.query.timeout.seconds}")

private int queryTimeoutSeconds;

@Value("${druid.filters}")

private String filters;

@Bean

public DruidDataSource dataSource() throws SQLException {

DruidDataSource ds = new DruidDataSource();

ds.setDriverClassName(driverClassName);

ds.setUrl(url);

ds.setUsername(username);

ds.setPassword(password);

ds.setInitialSize(initSize);

ds.setMinIdle(minIdel);

ds.setMaxActive(maxActive);

ds.setLoginTimeout(loginTimeoutSeconds);

ds.setQueryTimeout(queryTimeoutSeconds);

ds.setFilters(filters);

return ds;

}

@Bean

public SqlSessionFactory sqlSessionFactory() throws Exception {

final SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();

sqlSessionFactory.setDataSource(dataSource());

sqlSessionFactory.setConfigLocation(new ClassPathResource("mybatis-config.xml"));

sqlSessionFactory.setFailFast(true);

return sqlSessionFactory.getObject();

}

public DataSourceTransactionManager dataSourceTransactionManager() throws SQLException {

log.debug("> transactionManager");

return new DataSourceTransactionManager(dataSource());

}

@PostConstruct

public void postConstruct() {

log.info("jdbc settings={}", this);

}

}

備註

  • 增加@ConfigurationProperties(prefix = "druid")
  • 增加@Value("${druid.filters}") private String filters

第五步:創建DruidStatFilter 攔截器

package com.itunion.springbootstarterdruid.config;

import com.alibaba.druid.support.http.WebStatFilter;

import javax.servlet.annotation.WebFilter;

import javax.servlet.annotation.WebInitParam;

@WebFilter(filterName = "druidStatFilter", urlPatterns = "/*", asyncSupported = true,

initParams = {

@WebInitParam(name = "exclusions", value = "/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*")//忽略資源

}

)

public class DruidStatFilter extends WebStatFilter{

}

第六步:增加DruidStatViewServlet 訪問入口

package com.itunion.springbootstarterdruid.config;

import com.alibaba.druid.support.http.StatViewServlet;

import javax.servlet.annotation.WebInitParam;

import javax.servlet.annotation.WebServlet;

@WebServlet(urlPatterns = "/druid/*",

initParams = {

@WebInitParam(name = "allow", value=""),

@WebInitParam(name="deny", value=""),// IP黑名單 (存在共同時,deny優先於allow)

@WebInitParam(name="loginUsername", value="admin"),// 用戶名

@WebInitParam(name="loginPassword", value="123456"),// 密碼

@WebInitParam(name="resetEnable", value="false")// 禁用HTML頁面上的“Reset All”功能

})

public class DruidStatViewServlet extends StatViewServlet {

private static final long serialVersionUID = 1L;

}

第七步:SpringBootApplication配置

package com.itunion.springbootstarterdruid;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.web.servlet.ServletComponentScan;

import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication

@ServletComponentScan

public class SpringBootStarterDruidApplication extends SpringBootServletInitializer {

public static void main(String[] args) {

SpringApplication.run(SpringBootStarterDruidApplication.class, args);

}

}

第八步:啟動運行

http://127.0.0.1:8081/Demo/druid/login.html

備註

  • 端口號已自己配置為準

如下圖所示:

微服務架構實戰篇(四):Spring boot2.0 集成Druid監控數據庫

輸入用戶名和密碼:admin/123456

微服務架構實戰篇(四):Spring boot2.0 集成Druid監控數據庫

貢獻者

  • IT實戰聯盟-Line
  • IT實戰聯盟-咖啡

更多精彩內容可以關注“IT實戰聯盟”哦~~~


分享到:


相關文章: