发表于: 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学以致用


返回列表 返回列表
评论

    分享到