springboot系列七:springboot 集成 MyBatis、事物配置及使用、druid 數據源、druid 監控使用


一、MyBatis和druid簡介

  MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。國內最近流行的還有MyBatis-Plus,對Mybatis進行了增強,單表的增刪改查可以省略xml文件,本文不作MyBatis-Plus使用介紹。

  Druid首先是一個數據庫連接池,但它不僅僅是一個數據庫連接池,它還包含一個ProxyDriver,一系列內置的JDBC組件庫,一個SQLParser。Druid支持所有JDBC兼容的數據庫,包括Oracle、MySql、Derby、Postgresql、SQLServer、H2等等。 

  Druid針對Oracle和MySql做了特別優化,比如Oracle的PSCache內存占用優化,MySql的ping檢測優化。Druid在監控、可擴展性、穩定性和性能方面都有明顯的優勢。Druid提供了Filter-Chain模式的擴展API,可以自己編寫Filter攔截JDBC中的任何方法,可以在上面做任何事情,比如說性能監控、SQL審計、用戶名密碼加密、日志等等。

二、准備數據庫

DROP DATBASE IF EXISTS test ;
CREATE DATBASE test CHARACTER SET UTF8 ;
CREATE TABLE user (
    uid        BIGINT      AUTO_INCREMENT ,
    `name`     VARCHAR(50) not NULL,
    age        TINYINT not NULL,
    PRIMARY KEY(uid)
) ;
INSERT INTO user(`name`,age) VALUES ('小明',23) ;
INSERT INTO user(`name`,age) VALUES ('小李',25) ;
INSERT INTO user(`name`,age) VALUES ('小偉',26) ;

三、配置druid

1、添加依賴,修改pom.xml

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.0.4</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.5</version>
</dependency>

2、配置yml

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource    # 配置當前要使用的數據源的操作類型
    driver-class-name: org.gjt.mm.mysql.Driver     # 配置MySQL的驅動程序類
    url: jdbc:mysql://47.52.199.52:3306/test?useUnicode=true&amp;characterEncoding=utf8# 數據庫連接地址  
username: test # 數據庫用戶名
password: Zhuxing520@ # 數據庫連接密碼
    filer: wall,stat
    dbcp2:                                          # 進行數據庫連接池的配置
      min-idle: 5                                   # 數據庫連接池的最小維持連接數
      initial-size: 5                               # 初始化提供的連接數
      max-total: 5                                  # 最大的連接數
      max-wait-millis: 200                          # 等待連接獲取的最大超時時間

3、測試類

@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class DemoApplicationTests {
@Resource
private DataSource dataSource;

@Test
public void testConnection() throws Exception {
System.out.println(this.dataSource);
}
}

四、配置Mybatis

1、添加mybatis依賴

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

 2、配置yml

mybatis:
  config-location: classpath:mapper/mybatis.cfg.xml    # mybatis配置文件所在路徑
  type-aliases-package: com.example.demo.po            # 定義所有實體類的別名所在包
  mapper-locations:  classpath:mapper/*Mapper.xml      # 所有的mapper映射文件

3、Mybatis配置文件

mybatis.cfg.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 進行Mybatis的相應的環境的屬性定義 -->
    <settings>    <!-- 在本項目之中開啟二級緩存 -->
        <setting name="cacheEnabled" value="true"/>
    </settings>
</configuration>

4、UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.UserDao">
    <select id="findAll" resultType="UserPO">
        SELECT * FROM user;
    </select>
</mapper>

5、實體類UserPO.java

package com.example.demo.po;

public class UserPO {
    private Long uid;
    private String name;
    private Integer age;

    public Long getUid() {
        return uid;
    }

    public void setUid(Long uid) {
        this.uid = uid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "UserPO{" +
                "uid=" + uid +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
View Code

6、mapp對應的接口Dao文件

package com.example.demo.dao;

import com.example.demo.po.UserPO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
@Mapper
public interface UserDao {
    public List<UserPO> findAll() ;
}
View Code

7、測試類

@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class DemoApplicationTests {
    @Resource
    private UserDao userDao;

    @Test
    public void getAllUser(){
        System.out.println(userDao.findAll());
    }
}

五、mybatis配置sql日志

1、引入依賴

在項目之中去引入 logback 的依賴程序文件:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
</dependency>

2、添加配置文件

將 logback.xml 配置文件拷貝到 src/main/resources 目錄之中

<?xml version="1.0" encoding="UTF-8" ?>

<configuration scan="true">
    <property name="APP" value="${project.artifactId}" />
    <property name="LOG_HOME" value="/data/www/log/${APP}" />
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yy-MM-dd.HH:mm:ss.SSS} [%-16t] %-5p %-22c{0} %X{ServiceId} - %m%n</pattern>
        </encoder>
    </appender>
    <appender name="DETAIL"
              class="ch.qos.logback.core.rolling.RollingFileAppender" additivity="false">
        <File>${LOG_HOME}/${APP}_detail.log</File>
        <encoder>
            <pattern>%d{yy-MM-dd.HH:mm:ss.SSS} [%-16t] %-5p %-22c{0} %X{ServiceId} - %m%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${APP}_detail.log.%d{yyyyMMdd}</fileNamePattern>
        </rollingPolicy>
    </appender>
    <appender name="ACCESS"
              class="ch.qos.logback.core.rolling.RollingFileAppender" additivity="false">
        <File>${LOG_HOME}/${APP}_access.log</File>
        <encoder>
            <pattern>%d{yy-MM-dd.HH:mm:ss.SSS};%X{ServiceId};%m%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${APP}_access.log.%d{yyyyMMdd}</fileNamePattern>
        </rollingPolicy>
    </appender>

    <logger name="ACCESS">
        <appender-ref ref="ACCESS" />
    </logger>

    <logger name="druid.sql.Statement" level="DEBUG" />
    <logger name="com.example.demo.dao" level="TRACE" />

    <root level="INFO">
        <appender-ref ref="DETAIL" />
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

添加sql打印:

<logger name="druid.sql.Statement" level="DEBUG" />
<logger name="com.example.demo.dao" level="TRACE" />

六、事務配置及用法

在需要的配置事務的方法上配置@Transactional

@Transactional
public void addUser(){
    UserPO userPO1 = new UserPO();
    userPO1.setName("王小飛");
    userPO1.setAge(24);
    userDao.save(userPO1);
    
    UserPO userPO2 = new UserPO();
    userPO1.setName("王小飛1");
    userPO1.setAge(24);
    userDao.save(userPO1);
    addUser1();
}

七、druid 監控

druid 數據庫連接池之所以使用非常廣泛,其最主要的原因在於它可以直接提供性能監控。那么本次來針對於當前已經實現好 的 druid 配置來進行性能監控的處理配置。

如果要想進行 Druid 的性能的監控操作,則需要做一些基礎配置,例如:你訪問的 IP 地址是否是白名單。

1、基礎配置類DruidConfig.java

package com.example.demo.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class DruidConfig {
    @Bean
    public ServletRegistrationBean druidServlet() { // 主要實現WEB監控的配置處理
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
                new StatViewServlet(), "/druid/*"); // 現在要進行druid監控的配置處理操作
        servletRegistrationBean.addInitParameter("allow",
                "127.0.0.1,192.168.1.159"); // 白名單
        servletRegistrationBean.addInitParameter("deny", "192.168.1.200"); // 黑名單
        servletRegistrationBean.addInitParameter("loginUsername", "admin"); // 用戶名
        servletRegistrationBean.addInitParameter("loginPassword", "123456"); // 密碼
        servletRegistrationBean.addInitParameter("resetEnable", "false"); // 是否可以重置數據源
        return servletRegistrationBean ;
    }
    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean() ;
        filterRegistrationBean.setFilter(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*"); // 所有請求進行監控處理
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.css,/druid/*");
        return filterRegistrationBean ;
    }
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }
}

2、運行測試

訪問http://localhost:8080/druid,使用admin,123456賬號密碼登陸

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM