关键词:
本次演示的代码结构如下,基于maven,整合SpringBoot、Spring、Mybaits的SSM框架。同时测试logback日志框架的使用及配置。
1.创建maven工程,修改pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>yan.li</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<!-- 使用UTF-8编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 使用jdk1.8版本 -->
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!--整合mybatis所需的jar -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--热启动:每自修改后, 程序自动启动spring Application上下文。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- 阿里json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
2
.创建com.liyan.model包,同时创建两个PO类
(1)User.java类
package com.liyan.model;
import java.io.Serializable;
/**
* 员工实体类
* <p>Title: User</p>
* @author Liyan
* @date 2018年1月11日 上午10:45:20
*/
public class User implements Serializable
private static final long serialVersionUID = 1L;
/** 自增主键 */
private Integer id;
/** 员工工号 */
private String userId;
/** 员工姓名 */
private String userName;
public Integer getId()
return id;
public void setId(Integer id)
this.id = id;
public String getUserId()
return userId;
public void setUserId(String userId)
this.userId = userId;
public String getUserName()
return userName;
public void setUserName(String userName)
this.userName = userName;
(
2)ResponseResult.java类
package com.liyan.model;
/**
* 返回值实体类
* <p>Title: ResponseResult</p>
* @author Liyan
* @date 2018年1月11日 下午5:23:41
*/
public class ResponseResult
private Integer code;
private String msg;
private Object data;
public Integer getCode()
return code;
public void setCode(Integer code)
this.code = code;
public String getMsg()
return msg;
public void setMsg(String msg)
this.msg = msg;
public Object getData()
return data;
public void setData(Object data)
this.data = data;
public ResponseResult(Integer code, String msg, Object data)
super();
this.code = code;
this.msg = msg;
this.data = data;
3.在com.liyan.mapper包下创建UserMapper.java接口
package com.liyan.mapper;
import org.apache.ibatis.annotations.ResultType;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import com.liyan.model.User;
//这里可以使用@Mapper注解,但是每个mapper都加注解比较麻烦,所以统一配置@MapperScan在扫描路径在application类中
//@Mapper //声明是一个Mapper,与springbootApplication中的@MapperScan二选一写上即可
@Repository
public interface UserMapper
@Select("SELECT id, user_id userId, user_name userName FROM user_tab WHERE user_id = #userId")
@ResultType(User.class)
User selectUser(String userId);
4.在com.liyan.service包下创建UserService.java接口
package com.liyan.service;
import com.liyan.model.User;
public interface UserService
/**
* 根据员工工号,查询员工
* <p>Title: selectUser</p>
* @author Liyan
* @date 2018年1月11日 上午10:50:34
* @param userId 员工工号
* @return List<User>
*/
public User selectUser(String userId);
5.在com.liyan.service.impl包下创建UserServiceImpl.java类
package com.liyan.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.liyan.mapper.UserMapper;
import com.liyan.model.User;
import com.liyan.service.UserService;
@Service
public class UserServiceImpl implements UserService
@Autowired
private UserMapper userMapper;
@Override
public User selectUser(String userId)
return userMapper.selectUser(userId);
6.在com.liyan.exception包下创建三个自定义异常相关的类
(1)ExceptionEnum.java类
package com.liyan.exception;
/**
* 异常枚举类
* <p>Title: ExceptionEnum</p>
* @author Liyan
* @date 2018年1月11日 下午3:54:48
*/
public enum ExceptionEnum
ERROR_NOFOUND("无法找到相应的数据");
private String value;
public String getValue()
return value;
ExceptionEnum(String value)
this.value = value;
public String toString()
return value;
(2)NoFoundExcepiton.java类
package com.liyan.exception;
/**
* 自定义No Found异常
* <p>Title: NoFoundExcepiton</p>
* @author Liyan
* @date 2018年1月11日 下午3:36:13
*/
public class NoFoundExcepiton extends Exception
private static final long serialVersionUID = -5955607821816077172L;
public NoFoundExcepiton(String errorInfo)
super(errorInfo);
(3)GlobalExceptionHandler.java全局异常类
package com.liyan.exception;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import com.liyan.model.ResponseResult;
@CrossOrigin
@RestControllerAdvice
public class GlobalExceptionHandler
private static Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler
public ResponseResult processException(Exception ex, HttpServletRequest request, HttpServletResponse response)
ex.printStackTrace();
if(ex instanceof MissingServletRequestParameterException)
return new ResponseResult(400, ex.getMessage(), null);
if(ex instanceof NoFoundExcepiton)
LOGGER.error("======="+ex.getMessage()+"=======");
return new ResponseResult(401, "无法找到相应数据!", null);
return new ResponseResult(500, ex.getMessage(), null);
7.在com.liyan.controller包下创建
(1)创建UserController.java类
package com.liyan.controller;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.liyan.exception.ExceptionEnum;
import com.liyan.exception.NoFoundExcepiton;
import com.liyan.model.User;
import com.liyan.service.UserService;
@RestController
@EnableAutoConfiguration
@ComponentScan(basePackages="com.liyan.model")//添加的注解
public class UserController
@Autowired
private UserService userService;
/**
* 引入日志,注意都是"org.slf4j"包下
*/
private final static Logger logger = LoggerFactory.getLogger(UserController.class);
/**
* 根据员工工号,查询员工
* <p>Title: selectUser</p>
* @author Liyan
* @date 2018年1月11日 上午11:37:46
* @param userId 员工工号
* @param httpServletResponse
* @return User
* @throws Exception
*/
@RequestMapping(value = "selectUser/userId",method = RequestMethod.GET)
public User selectUser(@PathVariable String userId, HttpServletResponse httpServletResponse) throws Exception
User user = userService.selectUser(userId);
logger.info("访问selectUser/userId接口,参数userId = " + "userId");
if (user == null)
logger.error("根据员工工号,查询员工异常:e=" + ExceptionEnum.ERROR_NOFOUND.getValue());
throw new NoFoundExcepiton(ExceptionEnum.ERROR_NOFOUND.getValue());
return user;
(2)创建UserController.java启动类
package com.liyan.controller;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* 启动类
* <p>Title: SpringbootApplication</p>
* @author Liyan
* @date 2018年1月11日 上午11:36:48
*/
@SpringBootApplication(scanBasePackages = "com.liyan")
@MapperScan("com.liyan.mapper")
@EnableTransactionManagement//开启事务管理
public class SpringbootApplication
public static void main(String[] args)
SpringApplication.run(SpringbootApplication.class, args);
8.配置文件相关
(1)application.properties
#============ 数据库配置#======================================
spring.datasource.url=jdbc:mysql://127.0.0.1:3306?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
#用户名和密码
spring.datasource.username=记得换成自己的
spring.datasource.password=记得换成自己的
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.database=记得换成自己的
#============ tomcat配置#====================================
server.port=80
#============ mybatis配置 ====================================
#起别名。可省略写mybatis的xml中的resultType的全路径
mybatis.type-aliases-package=com.liyan.model
#Mybatis扫描(配置xml模式使用)
mybatis.mapper-locations=classpath*:mapper/*.xml
#=========== 日志配置·简易(spring boot已经集成logback日志)=========
#controller层日志 WARN级别输出
#logging.level.com.liyan.controller=WARN
#mapper层 sql日志 DEBUG级别输出
#logging.level.com.liyan.mapper=DEBUG
#logging.file=logs/spring-boot-logging.log
#logging.pattern.console=%dyyyy/MM/dd-HH:mm:ss [%thread] %-5level %logger- %msg%n
#logging.pattern.file=%dyyyy/MM/dd-HH:mm [%thread] %-5level %logger- %msg%n
#打印运行时sql语句到控制台
#spring.jpa.show-sql=true
#==================== 日志配合·标准 ============================
logging.config=classpath:logback-boot.xml
(2)logback-boot.xml 日志配置文件(重点)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->
<!-- appender是configuration的子节点,是负责写日志的组件。 -->
<!-- ConsoleAppender:把日志输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %p (%file:%line\\)- %m%n</pattern>
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是demo.log -->
<!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名-->
<appender name="demolog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>log/demo.log</File>
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
<!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
<!-- 文件名:log/demo.2017-12-05.0.log -->
<fileNamePattern>log/demo.%d.%i.log</fileNamePattern>
<!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成1KB看效果 -->
<maxFileSize>1KB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- pattern节点,用来设置日志的输入格式 -->
<pattern>
%d %p (%file:%line\\)- %m%n
</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 控制台输出日志级别 -->
<root level="info">
<appender-ref ref="STDOUT" />
</root>
<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
<!-- com.liyan为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
<!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
<logger name="com.liyan" level="DEBUG">
<appender-ref ref="demolog" />
</logger>
</configuration>
9.创建数据库表结构,建表语句如下,数据自己随便加吧
CREATE TABLE `user_tab` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`user_id` VARCHAR(10) NOT NULL,
`user_name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`) USING BTREE
) ENGINE=INNODB DEFAULT CHARSET=utf8
10.启动
11.访问:http://localhost/selectUser/G353 (多刷新几次,看日志效果)如下:
demo.log一旦大于刚刚配置的1kb,立即会被分割成按日期命名的各个小日志。
springboot2.x整合slf4j+logback日志框架(代码片段)
目录1、Slf4j及Logback简介2、日志级别3、maven依赖3.1springboot2maven配置文件3.2普通maven项目的配置文件4、logback、springboot配置说明4.1 logback.xml 和logback-spring.xml的区别4.2logback.xml配置文件的加载机制4.3SpringBoot结合logback配置说明4.3.1logb... 查看详情
springboot整合logback
日志包使用的是springboot内置的日志包,所以我们不许要再专门导入日志包1.logback-spring.xml配置<?xmlversion="1.0"encoding="UTF-8"?><!--日志级别从低到高分为TRACE<DEBUG<INFO<WARN<ERROR<FATAL,如果设置为WARN,则低于WARN的信息都... 查看详情
springboot整合logback,设置日志的输出路径
一logback配置相对路径1.1配置成logs/ 打成jar包:1.2 配置成/logs1.3 配置成../logs1.4 总结文件相对保存路径设置可分以下三种:1.value=“logs”–表示保存到程序运行目录,在tomcat中为bin目录2.value=“/logs”–表示保... 查看详情
springboot整合logback集成elk实现日志的汇总分析统计和检索功能(代码片段)
在SpringBoot当中,默认使用logback进行log操作。logback支持将日志数据通过提供IP地址、端口号,以Socket的方式远程发送。在SpringBoot中,通常使用logback-spring.xml来进行logback配置。首先、创建一个elk的springboot项目,然后先对logback... 查看详情
二十springboot2核心技术——整合logback(代码片段)
一、SpringBoot整合logback1.1、日志文件SpringBoot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命令为logback-spring.xml的日志配置文件。默认的命名规则,并且放... 查看详情
二十springboot2核心技术——整合logback(代码片段)
一、SpringBoot整合logback1.1、日志文件SpringBoot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命令为logback-spring.xml的日志配置文件。默认的命名规则,并且放... 查看详情
springboot2.x整合slf4j+logback日志框架(代码片段)
目录1、Slf4j及Logback简介2、日志级别3、maven依赖3.1springboot2maven配置文件3.2普通maven项目的配置文件4、logback、springboot配置说明4.1 logback.xml 和logback-spring.xml的区别4.2logback.xml配置文件的加载机制4.3SpringBoot结合logback配置说明4.3.1logb... 查看详情
springboot:springboot整合logback和pagehelper
文章目录SpringBoot整合Logback和PageHelper一、整合Logback二、整合PageHelperSpringBoot整合Logback和PageHelper一、整合LogbackSpringBoot默认使用Logback组件作为日志管理。Logback是由log4j创始人设计的一个开源日志组件。在SpringBoot项目中我们不需要... 查看详情
springboot应用系列5--springboot2整合logback
上一篇我们梳理了SpringBoot2整合log4j2的配置过程,其中讲到了SpringBoot2原装适配logback,并且在非异步环境下logback和log4j2的性能差别不大,所以对于那些日志量不算太高的项目来说,选择logback更简单方便。1.pom.xmlpom.xml不需要添加... 查看详情
springboot整合logback分文件输出sql,error等内容(代码片段)
一 sql分文件的输出1.1在配置文件中配置logback 1.2 logback配置文件说明:这里不需要在配置slf4j日志的输出 1.核心内容配置 2.完整配置<?xmlversion="1.0"encoding="UTF-8"?><configurationscan="true"scanP 查看详情
springboot整合slf4j+logback日志框架
一、Slf4j简单介绍与优势1、介绍 Slf4j的全称是SimpleLogingFacadeForJava(Java简单日志门面),它仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已。所以单独的Slf4j... 查看详情
springboot整合elk
...置生效。我们访问http://127.0.0.1:5601三、创建工程创建工程springboot-elk,并使用logback记录日志。1.pom.xml2.启动类3.logback-spring.xml启动工程,日志会存入elasticsearch中,通过Kibana的web界面,配置后,我们就可看到,下面我简单的修改下... 查看详情
springboot:日志配置-logback
一、简介支持日志框架:JavaUtilLogging,Log4J2andLogback,默认是使用logbacklogback配置方式springboot默认会加载classpath:logback-spring.xml或者classpath:logback-spring.groovy 使用自定义配置文件,配置方式为:logging.config=classpath:logback-ro 查看详情
springboot使用之三:springboot使用logback日志
springboot默认使用的日志就是logback,所以使用logback不需要添加日志相关依赖了,执行添加logback.xml配置文件,springboot这个聪明的框架便能识处理你的配置。做法:将logback.xml放在resources下(classpath)下即可。配置参考如下:<?xm... 查看详情
springboot配置logback日志
Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback-classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4JAPI使你可以... 查看详情
springboot系列一:默认日志logback配置解析
前言今天来介绍下SpringBoot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢如何引入日志?日志输出格式以及输出方式如何配置?代码中如何使用?正文SpringBoot在所有内部日志中使用CommonsLogging,但是... 查看详情
springboot实践:logback日志配置
...、logback是什么?工作中一直用的是log4j日志框架,接触了SpringBoot后,因为logback是默认框架,才开始进行了解。来看下官网的相关介绍。 可以看到,logback是log4j的进化版,是为了替代log4j的。logback分三个模块:logback-core:核... 查看详情
rocketmqclient日志整合logback
...目中设置系统属性启动参数添加:或者启动类添加:2、logback日志配置Rocketmqapppender3、Rocketmqlogger配置 查看详情