微服務架構實戰篇(四):Spring boot2.0 + Mybatis +Druid監控資料庫訪問效能
阿新 • • 發佈:2018-12-29
簡介
該專案主要利用Spring boot2.0 + Mybatis +Druid 實現監控資料庫訪問效能。
- Druid是一個非常優秀的資料庫連線池。在功能、效能、擴充套件性方面,都超過其他資料庫連線池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。
- Druid已經在阿里巴巴部署了超過600個應用,經過一年多生產環境大規模部署的嚴苛考驗。
- Druid是一個JDBC元件,它包括三個部分:
基於Filter-Chain模式的外掛體系。
DruidDataSource 高效可管理的資料庫連線池。
SQLParser
- 原始碼地址
- 聯盟公眾號: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依賴
<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實戰聯盟”公*眾*號哦~~~