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 监控)相关推荐

  1. springboot中druid数据源配置无效的问题和jar包找不到问题

    springboot中druid数据源配置无效的问题 阿里云的仓库 链接: 阿里云仓库. 自己在springboot项目中,引入druid的依赖,希望引入druid数据源. 但是idea中,虽然在这个 ...

  2. springboot动态多数据源配置和使用(二)

    很久之前写一篇静态的springboot多数据源配置,一直没写下篇,这里补充一下自己用动态多数据源的场景和开发逻辑. 之前说的静态多数据源是每个数据源配置一套mapper,现在说说如何动态多数据源共用 ...

  3. springboot动态多数据源配置和使用(从数据库读取数据源配置)(三)

    上两遍已经描述了动态多数据源的原理和基础实现了,前面的数据源配置都是从application.yml中配置多数据源的,这里再拓展补充一下其他场景,如何读取数据源不从application.yml中配置 ...

  4. springboot+dynamic多数据源配置

    springboot+dynamic多数据源配置 配置 使用 springboot+dynamic多数据源配置 来源:https://mp.baomidou.com/guide/dynamic-dat ...

  5. 使用Druid数据源配置方法

    使用Druid数据源 创建Druid数据源步骤: 1.Druid数据源官方文档 https://github.com/alibaba/druid 2.使用自定义方式 (1)在maven中引入数据源 & ...

  6. SpringBoot Redis多数据源配置

    个人博客纯净版 SpringBoot Redis多数据源配置 | 代码搬运工 此处提供了一个SpringBoot starter插件 gitee地址 spring-boot-starter-dynam ...

  7. mybatis配置mysql数据源_springboot+mybatis+Druid配置多数据源(mysql+postgre)

    springboot+mybatis+Druid配置多数据源(mysql+postgre) 引入pom依赖 org.mybatis.spring.boot mybatis-spring-boot-st ...

  8. Springboot环境下mybatis配置多数据源配置

    mybatis多数据源配置(本文示例为两个),方便实现数据库的读写分离,分库分表功能 本文基于springboot2进行的配置,如版本为springboot1系列则需修改yml的配置(在文末附带) m ...

  9. SpringBoot2/SpringBoot/Java动态数据源配置、动态连接池配置、多数据源负载均衡

    Java动态数据源配置.动态连接池配置.多数据源负载均衡 大家好,今天给大家推荐一个自产的连接池插件.废话不多说,本文接口分为以下主题: 1. 插件开发背景: 2. 插件提供的能力: 3. 插件的使用 ...

  10. maven中druid数据源配置无效的问题和jar包找不到问题(DruidDataSourceFactory爆红问题)

    自己在maven项目中,引入druid的依赖,希望引入druid数据源. 出现DruidDataSourceFactory爆红问题,找了好久百度才发现其中的问题是setting中maven设置的问题, ...

最新文章

  1. Mysql加锁过程详解(3)-关于mysql 幻读理解
  2. JavaScript text highlighting JQuery plugin
  3. 沙场秋点兵---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十七)...
  4. 浅谈人性 - 讲讲人性丑恶的一面
  5. linux nfs 无法写入,无法写入挂载点(nfs-server),获得“权限被拒绝”
  6. Codeforces Round #603 (Div. 2) E. Editor 线段树维护括号序列
  7. android studio列模式,在Android studio 中使用单例模式
  8. Hive窗口函数(over/partition by/order by/window/序列函数)总结与实践
  9. JS 中对象的简单创建和继承
  10. sql 2008 清空数据库日志
  11. php--获取用户ip
  12. 45:十进制到八进制
  13. MTK手机 获取 Serial Number(barcode)
  14. 计算机操作系统实验之模拟进程管理(C语言)
  15. 求会议安排的时间最大化(回溯法)
  16. python身份证号码共18位_Python实现身份证号码解析
  17. C语言show用法,show的用法和短语例句
  18. python数据可视化—WordCloud词云图
  19. WebRTC系列-Qos系列之发送NACK
  20. 4A服务按库拆分|组件、服务|合并打包、独立打包(进行中)

热门文章

  1. informatica中的workflow连接远程数据库
  2. 谨慎全面地对待“滞销”
  3. ie打开完成,网页显示空白
  4. 采访 | Dou. 愿你背着相机出行,归来仍是少年。
  5. MAC jupyter notebook
  6. ubuntu16定时任务crontab
  7. MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
  8. 知方可补不足~CSS中的几个伪元素
  9. Windows平台Eclipse配置Maven
  10. php 调用java webservice