1. 程式人生 > >微服務架構實戰篇(四):Spring boot2.0 + Mybatis +Druid監控資料庫訪問效能

微服務架構實戰篇(四):Spring boot2.0 + Mybatis +Druid監控資料庫訪問效能

簡介

該專案主要利用Spring boot2.0 + Mybatis +Druid 實現監控資料庫訪問效能。

  • Druid是一個非常優秀的資料庫連線池。在功能、效能、擴充套件性方面,都超過其他資料庫連線池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。
  • Druid已經在阿里巴巴部署了超過600個應用,經過一年多生產環境大規模部署的嚴苛考驗。
  • Druid是一個JDBC元件,它包括三個部分:
    基於Filter-Chain模式的外掛體系。
    DruidDataSource 高效可管理的資料庫連線池。
    SQLParser

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

版本基礎

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

操作步驟

第一步:下載Spring boot2.0 + Mybatis + PageHelper專案

第二步:新增maven依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

第三步: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 + Mybatis +Druid監控資料庫訪問效能.jpg

 

輸入使用者名稱和密碼:admin/123456

微服務架構實戰篇(四):Spring boot2.0 + Mybatis +Druid監控資料庫訪問效能.jpg

貢獻者

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