发表于: 2017-08-04 21:40:11
2 984
今天完成的事情:springboot整合mybatis(XML),使用log42输出日志,hikariCP连接池,任务一代码重构基本完成。
项目结构
引入依赖
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.6.3</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>
MyBatis-Spring-Boot-Starter依赖将会提供如下:
自动检测现有的DataSource
将创建并注册SqlSessionFactory的实例,该实例使用SqlSessionFactoryBean将该DataSource作为输入进行传递
将创建并注册从SqlSessionFactory中获取的SqlSessionTemplate的实例。
自动扫描您的mappers,将它们链接到SqlSessionTemplate并将其注册到Spring上下文,以便将它们注入到您的bean中。
就是说,使用了该Starter之后,只需要定义一个DataSource即可(application.properties中可配置),它会自动创建使用该DataSource的SqlSessionFactoryBean以及SqlSessionTemplate。会自动扫描你的Mappers,连接到SqlSessionTemplate,并注册到Spring上下文中。
配置使用log4j2,需要排除spring-boot-starter-logging,具体看上文。引入hikariCP依赖。
spring-boot-starter-web可以删除因为任务一中没有WEB任务
application.properties配置文件
#配置数据库连接信息
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/test
spring.datasource.hikari.username=root
spring.datasource.hikari.password=!Wyc!19960210
spring.datasource.hikari.driver-class-name=com.mysql.jdbc.Driver
#指定hikari连接池
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
#连接池配置信息
#<!-- 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count) -->
spring.datasource.hikari.maximum-pool-size=10
#<!-- 连接池中允许的最小连接数。缺省值:10;官方建议与最大连接数保持一致 -->
spring.datasource.hikari.minimum-idle=10
#<!-- 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 -->
spring.datasource.hikari.connection-timeout=30000
#<!-- 控制从池返回的连接的默认自动提交行为。它是一个布尔值。默认值:true -->
spring.datasource.hikari.auto-commit=true
#<!-- 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒, -->
spring.datasource.hikari.max-lifetime=180000
#<!-- 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 -->
spring.datasource.hikari.idle-timeout=600000
#mybatis
#entity扫描的包名
mybatis.type-aliases-package=com.wyc.domain
#Mapper.xml所在的位置
mybatis.mapper-locations=classpath:mapper/*.xml
#log4j2配置文件地址
logging.config=classpath:log4j2.xml
实体对象
public class User {
private Long id;
private String name;
private String qq;
private String type;
private String regeneration;
private String school;
private String link;
private String declaration;
private String senior;
private Long createTime;private Long updateTime;
省略SET GET方法
service层
package com.wyc.service;
import com.wyc.domain.User;
public interface UserService {
public User getUserByName(String name);
public User getUserById(Long id);
}
实现类
import com.wyc.dao.UserMapper;
import com.wyc.domain.User;
import com.wyc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
public class UserServiceImpl implements UserService{
@Autowired
UserMapper userMapper;
@Override
public User getUserByName(String name) {
return this.userMapper.findUserByName(name);
}
@Override
public User getUserById(Long id) {
return this.userMapper.selectByPrimaryKey(id);
}
}
Mapper和Mapper.xml通过mybatis generator工具生成,具体步骤请参照上篇文章
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,
你会看到log4j2内部各种详细输出。可以设置成OFF(关闭)或Error(只输出错误信息)
-->
<Configuration status="OFF">
<!-- 日志文件目录和压缩文件目录配置 -->
<Properties>
<Property name="fileName">/workspace/log</Property>
<Property name="fileGz">/workspace/log/7z</Property>
</Properties>
<Appenders>
<!-- 输出控制台日志的配置 -->
<Console name="console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 输出日志的格式 -->
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<!-- 打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
<RollingRandomAccessFile name="infoFile" fileName="${fileName}/web-info.log" immediateFlush="false"
filePattern="${fileGz}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.web-info.gz">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} [%t] %-5level %logger{36} %L %M - %msg%xEx%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="6" modulate="true" />
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<Filters>
<!-- 只记录info和warn级别信息 -->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
<!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
<DefaultRolloverStrategy max="50"/>
</RollingRandomAccessFile>
<!-- 存储所有error信息 -->
<RollingRandomAccessFile name="errorFile" fileName="${fileName}/web-error.log" immediateFlush="false"
filePattern="${fileGz}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.web-error.gz">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} [%t] %-5level %logger{36} %L %M - %msg%xEx%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="6" modulate="true" />
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<Filters>
<!-- 只记录error级别信息 -->
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
<!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
<DefaultRolloverStrategy max="50"/>
</RollingRandomAccessFile>
</Appenders>
<!-- 全局配置,默认所有的Logger都继承此配置 -->
<Loggers>
<!-- AsyncRoot - 异步记录日志 - 需要LMAX Disruptor的支持 -->
<AsyncRoot level="info" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="infoFile"/>
<AppenderRef ref="errorFile"/>
</AsyncRoot>
</Loggers>
</Configuration>
测试写的时候出了点问题,正在调试中
明天计划的事情:搞定测试类,改下日志配置
遇到的问题:之前做任务的时候,测试类写少了,没感觉需要多写加强。
收获:springboot学以致用
评论