當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot(配置druid数据源、配置MyBatis、事务控制、druid 监控)
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot(配置druid数据源、配置MyBatis、事务控制、druid 监控)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SpringBoot 得到最終效果是一個簡化到極致的 WEB 開發,但是只要牽扯到 WEB 開發,就絕對不可能缺少
數據層操作,所有的開發都一定秉持著 MVC 設計模式的原則,MVC 里面業務層不可少,數據層永遠要與業務層
綁定在一起,既然要進行數據層的操作,那么肯定首選的一定就是 MyBatis,因為 MyBatis 整合處理之后
尤其是與 Spring 整合里面可以直接避免掉 DAO 層的編寫, 同時 VO 類也是最干凈的,這一點上絕對要比
其它的 ORMapping 組件都方便。
2.1、配置 druid 數據源這個數據庫連接池的配置是由阿里提供的,并且由于其性能很高,同時具備有很好的監控性,在實際的開發之中
已經開始廣泛的使用了。1、 首先編寫一個數據庫創建腳本:drop database if exists study ;
create database if not exists study CHARACTER SET UTF8 ;
USE study ;
CREATE TABLE dept (deptno BIGINT AUTO_INCREMENT ,dname VARCHAR(50) ,CONSTRAINT pk_deptno PRIMARY KEY(deptno)
) ;
INSERT INTO dept(dname) VALUES ('開發部') ;
INSERT INTO dept(dname) VALUES ('財務部') ;
INSERT INTO dept(dname) VALUES ('市場部') ;
INSERT INTO dept(dname) VALUES ('后勤部') ;
INSERT INTO dept(dname) VALUES ('公關部') ;
2、 隨后要進行druid 的數據源的配置,如果要想使用druid 的數據源,那么首先一定要去修改 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.0.31</version>
</dependency>3、 如果要進行數據源的整合處理,直接修改 application.properties配置文件即可:server:port: 80
spring:messages:basename: i18n/Messages,i18n/Pagesdatasource:type: com.alibaba.druid.pool.DruidDataSource # 配置當前要使用的數據源的操作類型driver-class-name: org.gjt.mm.mysql.Driver # 配置MySQL的驅動程序類url: jdbc:mysql://localhost:3306/study # 數據庫連接地址username: root # 數據庫用戶名password: mysqladmin # 數據庫連接密碼dbcp2: # 進行數據庫連接池的配置min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化提供的連接數max-total: 5 # 最大的連接數max-wait-millis: 200 # 等待連接獲取的最大超時時間spring.datasource.url=jdbc:mysql://localhost:3306/study?
characterEncoding=utf-8&useSSL=false&useUnicode=true
spring.datasource.username=root
spring.datasource.password=密碼
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 連接池指定 springboot2.02版本默認使用HikariCP 此處要替換成Druid
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource## 初始化連接池的連接數量 大小,最小,最大
spring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=20
## 配置獲取連接等待超時的時間
spring.datasource.druid.maxWait=60000
4、 如果這個時候你需要進行 junit 代碼測試,則一定要將 mybatis 開發包配置過來,因為只有在
mybatis 開發包里面才會將 druid 的配置的數據庫連接池變為所需要的 DataSource 數據源對象。<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version></dependency>
5、 測試一下當前的連接池是否可用package com.microboot.test;import javax.annotation.Resource;
import javax.sql.DataSource;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;import com.microboot.StartSpringBootMain;@SpringBootTest(classes = StartSpringBootMain.class)
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class TestDataSource {@Resourceprivate DataSource dataSource;@Testpublic void testConnection() throws Exception {System.out.println(this.dataSource);}
}
2.2、配置 MyBatis如果要進行 mybatis 的配置一定要導入 spring-boot 所支持的 mybatis 開發包。<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version>
</dependency>1、 隨后要去修改 application.properties配置文件,追加 mybatis 的相關配置項:## Mybatis?
mybatis.config-location=classpath:mybatis/mybatis.cfg.xml
mybatis.mapper-locations=classpath:mybatis/mapper/**/*.xml
mybatis.typeAliasesPackage=com.microboot.vo
logging.level.TAlarmInformationMapper=debug## debug=true2、 建立一個 Dept 的 VO 類:package com.microboot.vo;public class Dept {private Long deptno ;private String dname ;public Long getDeptno() {return deptno;}public void setDeptno(Long deptno) {this.deptno = deptno;}public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}@Overridepublic String toString() {return "Dept [deptno=" + deptno + ", dname=" + dname + "]";}}
3、 在 src/main/resources 目錄下建立有一個 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、 src/main/resources/mybatis 下建立有一個 mapper 子目錄,而后在里面定義有 com/microboot/Dept.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.microboot.dao.IDeptDAO"><select id="findAll" resultType="Dept">SELECT deptno,dname FROM dept ;</select>
</mapper>
5、 建立 IDeptDAO 接口,注意接口所在的包:package com.microboot.dao;import java.util.List;import org.apache.ibatis.annotations.Mapper;import com.microboot.vo.Dept;@Mapper
public interface IDeptDAO {public List<Dept> findAll() ;
}在定義 DAO 接口的時候由于需要自動生成實現子類,所以在接口聲明處一定要編寫有一個“@Mapper”注解,否則你的 DAO 接口和*.xml 的 Mapper 文件無法整合在一起。
6、 建立一個 IDeptService 接口,作為服務使用:package com.microboot.service;import java.util.List;import com.microboot.vo.Dept;public interface IDeptService {public List<Dept> list() ;
}package com.microboot.service.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.microboot.dao.IDeptDAO;
import com.microboot.service.IDeptService;
import com.microboot.vo.Dept;@Service
public class DeptServiceImpl implements IDeptService {@Resourceprivate IDeptDAO deptDAO;@Overridepublic List<Dept> list() {return this.deptDAO.findAll();}}
7、 進行代碼測試類的編寫:package com.microboot.test;import javax.annotation.Resource;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;import com.microboot.StartSpringBootMain;
import com.microboot.service.IDeptService;@SpringBootTest(classes = StartSpringBootMain.class)
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class TestDeptService {@Resourceprivate IDeptService deptService;@Testpublic void testList() throws Exception {System.out.println(this.deptService.list());}
}此時測試通過,則 SpringBoot 與 MyBatis 已經可以成功的整合在一起進行項目開發,此時的配置要比之前使用 Spring + Mybatis 直接配置簡單 N 多倍。
2.3、事務控制如果現在要想在SpringBoot里面去啟用MyBatis事務(數據庫的事務),那么就可以通過如下的方式來完成1、修改IDeptDAO接口,追加一個只讀事務控制:@Mapper
public interface IDeptDAO {public List<Dept> findAll() ;public boolean doCreate(Dept vo) ;
}· 修改 Dept.xml 配置文件,追加一個方法的實現 SQL 語句:<insert id="doCreate" parameterType="Dept">INSERT INTO dept(dname) VALUES (#{dname}) ;</insert>package com.microboot.service.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import com.microboot.dao.IDeptDAO;
import com.microboot.service.IDeptService;
import com.microboot.vo.Dept;@Service
public class DeptServiceImpl implements IDeptService {@Resourceprivate IDeptDAO deptDAO;@Transactional(readOnly = true)public List<Dept> list() {return this.deptDAO.findAll();}}· 在 IDeptService 接口之中追加有一個業務方法:@Transactional(readOnly = true)public boolean add(Dept vo) ;@Service
public class DeptServiceImpl implements IDeptService {@Resourceprivate IDeptDAO deptDAO;public List<Dept> list() {return this.deptDAO.findAll();}@Overridepublic boolean add(Dept vo) {return this.deptDAO.doCreate(vo);}}· 編寫測試方法:@Testpublic void testAdd() throws Exception {Dept dept = new Dept();dept.setDname("測試部");System.out.println(this.deptService.add(dept));}·此時會報錯此時配置了一個只讀的事務操作,那么也就是說在這個業務方法只能夠采用讀的模式來進行操作。
2、 但是現在你配置了一個注解并不表示當前已經合理的支持了事務,如果要進行事務的啟用,還需要在程序啟動類上追加一個 新的注解配置:package com.microboot;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ImportResource;
import org.springframework.transaction.annotation.EnableTransactionManagement;//@EnableAutoConfiguration
// 定義一個掃描路徑
//@ComponentScan("com.microboot")
// 啟動SpringBoot程序,而后自帶子包掃描
@SpringBootApplication
@ImportResource(locations= {"classpath:spring-common.xml"})
@EnableTransactionManagement
public class StartSpringBootMain extends SpringBootServletInitializer { // 必須繼承指定的父類@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(StartSpringBootMain.class) ;}public static void main(String[] args) throws Exception {SpringApplication.run(StartSpringBootMain.class, args);}
}
3、 如果現在要想更好的觀察到事務的問題,最簡單的做法是編寫一個數據增加操作,而后為這個業務方法設置只讀配置。修改 IDeptDAO 接口追加一個新的方法:@Mapper
public interface IDeptDAO {public List<Dept> findAll() ;public boolean doCreate(Dept vo) ;
}· 修改 Dept.xml 配置文件,追加一個方法的實現 SQL 語句:<insert id="doCreate" parameterType="Dept">INSERT INTO dept(dname) VALUES (#{dname}) ;
</insert>· 在 IDeptService 接口之中追加有一個業務方法:public interface IDeptService {@Transactional(readOnly = true)public List<Dept> list() ;@Transactional(readOnly = true)public boolean add(Dept vo) ;
}
4、 如果在實際的工作之中,對于更新操作應該強制性的啟動一個事務控制才對:@Transactional(propagation=Propagation.REQUIRED)
public boolean add(Dept vo) ;package com.microboot.service;import java.util.List;import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import com.microboot.vo.Dept;public interface IDeptService {@Transactional(readOnly = true)public List<Dept> list() ;@Transactional(propagation=Propagation.REQUIRED)public boolean add(Dept vo) ;
}此時應該明確的表示該操作方法應該啟動有一個事務的配置項。5、 在使用Spring+MyBatis里面處理的時候應該考慮到信息顯示問題,所以此處建議使用logback日志組件來
進行日志信息的配置;5、 在使用Spring+MyBatis里面處理的時候應該考慮到信息顯示問題,所以此處建議使用logback日志組件來
進行日志信息的配置;<?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.microboot.dao" level="TRACE" /><root level="INFO"><appender-ref ref="DETAIL" /><appender-ref ref="CONSOLE" /></root>
</configuration>· 在項目之中去引入 logback 的依賴程序文件:<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId></dependency>· 在正常情況下 mybatis 中的日志信息的輸出操作必須設置其對應的命名空間,在 logback.xml 中追加
如下信息:<logger name="com.microboot.dao" level="TRACE" />
2.4、druid 監控druid 數據庫連接池之所以使用非常廣泛,其最主要的原因在于它可以直接提供性能監控。那么本次來針對于
當前已經實現好 的 druid 配置來進行性能監控的處理配置。1、 如果要想進行 Druid 的性能的監控操作,則需要做一些基礎配置,例如:你訪問的 IP 地址是否是白名單。package com.microboot.config;import javax.sql.DataSource;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 com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;@Configuration
public class DruidConfig {@Beanpublic ServletRegistrationBean druidServlet() { // 主要實現WEB監控的配置處理ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); // 現在要進行druid監控的配置處理操作servletRegistrationBean.addInitParameter("allow","127.0.0.1,10.40.8.144"); // 白名單servletRegistrationBean.addInitParameter("deny", "192.168.1.200"); // 黑名單servletRegistrationBean.addInitParameter("loginUsername", "studyjava"); // 用戶名servletRegistrationBean.addInitParameter("loginPassword", "hello"); // 密碼servletRegistrationBean.addInitParameter("resetEnable", "false"); // 是否可以重置數據源return servletRegistrationBean ;}@Beanpublic 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、 為了更好的說明問題,建議建立一個控制器進行業務層的調用;package com.microboot.controller;import javax.annotation.Resource;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import com.microboot.service.IDeptService;
import com.microboot.util.controller.AbstractBaseController;@RestController
public class DeptController extends AbstractBaseController{@Resourceprivate IDeptService deptService;@RequestMapping(value = "/list", method = RequestMethod.GET)public Object list() { return this.deptService.list();}}
3、 如果要想進行監控還需要開啟一個過濾配置,而這個過濾配置的開啟需要通過 application.yml 文件
配置;spring.datasource.filters=stat,wall,log4j啟動項目,在瀏覽器地址欄輸入http://localhost/druid,然后輸入用戶名studyjava,密碼hello就可以看到監控頁面了利用監控可以方便的進行程序的管理,這一點在企業開發之中至關重要。
?
總結
以上是生活随笔為你收集整理的SpringBoot(配置druid数据源、配置MyBatis、事务控制、druid 监控)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot AOP拦截器
- 下一篇: SpringBoot整合 ActiveM