【精品】Spring Boot整合Mybatis,TkMybatis,Mybatis-Generator,PageHelper实际项目开发

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinosoft12345/article/details/87866396

近半年来,项目开发中一直使用Spring Boot、Spring Cloud等框架,开发工具由原来的eclispe转用Idea ,哈哈,感觉自己又高大尚了一下,其中项目一些技术内容,使我们在开发中提高了开发效率。我一直想自己来搭建一套这样的框架,可以工作之余研究技术的时候,当做自己的一个项目进行编写一些内容,来感受和学习技术在实际的项目中的应用。本文主要讲述Spring Boot集成持久层相关的内容。相关的技术的内容,网络上有很多讲解内容,我主要是来把自己搭建的项目的具体代码贴出来,方便大家参考,也能够在本地按我的文章内容进行搭建,主要是在本地能够把搭建的框架跑起来,好了,现在主要来贴一下相关的代码:

首先我们来看一下我的项目目录:

1、pom.xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<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>com.wzz</groupId>
    <artifactId>springbootpro</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- Spring Boot的核心启动器,包含了自动配置、日志和YAML -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!-- 支持全栈式Web开发,包括Tomcat和spring-webmvc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 支持面向方面的编程即AOP,包括spring-aop和AspectJ -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <!-- Mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>

        <!-- TkMybatis -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>1.2.0</version>
        </dependency>

        <!-- 支持JDBC数据库 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!-- 支持Redis键值存储数据库,包括spring-redis -->
<!--        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
        </dependency>-->

        <!-- 微信 -->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-mp</artifactId>
            <version>3.1.0</version>
        </dependency>

        <!-- 企业微信 -->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-cp</artifactId>
            <version>3.1.0</version>
        </dependency>

        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.12</version>
            <scope>provided</scope>
        </dependency>

        <!-- FastJson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.56</version>
        </dependency>

        <!-- 图形验证码生成工具 -->
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>

        <!-- MySql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>5.1.47</version>
        </dependency>

        <!-- Mybatis分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.1.1</version>
        </dependency>

    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <configuration>
                    <configurationFile>${basedir}/src/main/resources/conf/generatorConfig.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.47</version>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>3.5.0</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

2、application.properties 暂无配置内容

3、application.yml文件配置

#默认使用配置
spring:
  profiles:
    active: dev

mybatis:
  typeAliasesPackage: com.wzz.dao.model
  mapperLocations: classpath:com/wzz/dao/mapper/**/*.xml

mapper:
  mappers: com.wzz.dao.CommonMapper
  not-empty: false
  identity: MYSQL

#开发环境
---
spring:
  profiles: dev
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/site_web?useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
    username: admin
    password: admin

server:
  port: 9081
  servlet:
    context-path: /

wechat:
  openAppId: 
  openAppSecret: 

corpwechat:
  corpId: 
  corpSecret: 
  agentId: 

projecturl:
  wechatOpenAuthorize: 0.0.0.0:8080    
  cpwechatOpenAuthorize:

#测试环境
---
spring:
  profiles: test
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/site_web?useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
    username: admin
    password: admin

server:
  port: 9081
  servlet:
    context-path: /

wechat:
  openAppId: 
  openAppSecret: 

corpwechat:
  corpId: 
  corpSecret:
  agentId:

projecturl:
  wechatOpenAuthorize: 
  cpwechatOpenAuthorize:

4、generatorConfig.xml文件配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>

    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="javaFileEncoding" value="UTF-8"/>
        <!-- 格式化java代码 -->
        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
        <!-- 格式化XML代码 -->
        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>

        <!-- TKmybatis配置 -->
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="com.wzz.dao.CommonMapper"/>
        </plugin>

        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="false"/>
        </commentGenerator>

        <!-- 数据库链接URL、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://10.3.2.17:3306/site_web"
                        userId="fof" password="JZ5]96qu8h59"/>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成模型的包名和位置 -->
        <javaModelGenerator targetPackage="com.wzz.dao.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成的映射文件包名和位置 -->
        <sqlMapGenerator targetPackage="com.wzz.dao.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成service的包名和位置 -->
        <javaClientGenerator targetPackage="com.wzz.dao.mapper" targetProject="src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 要生成的那些表 -->
        <table tableName="tb_dictionary">
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        </table>
    </context>

</generatorConfiguration>

5、MybatisConfig.java

package com.wzz.config;

import com.github.pagehelper.PageHelper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

/**
 * @Author wangzz
 * @Date 2019/2/21 18:21
 * @Description
 */
@Configuration
public class MybatisConfig {

    @Bean
    public PageHelper pageHelper(){
        PageHelper pageHelper = new PageHelper();
        Properties properties = new Properties();
        properties.setProperty("offsetAsPageNum","true");
        properties.setProperty("rowBoundsWithCount","true");
        properties.setProperty("reasonable","true");
        properties.setProperty("dialect","mysql");    //配置mysql数据库的方言
        pageHelper.setProperties(properties);
        return pageHelper;
    }
}
6、Dao层目录结构

CommonMapper.java
package com.wzz.dao;

import tk.mybatis.mapper.common.*;

/**
 * @Author wangzz
 * @Date 2019/2/21 16:27
 * @Description
 */
public interface CommonMapper<T> extends Mapper<T>, MySqlMapper<T>, IdsMapper<T>,ConditionMapper<T> {
}

我们使用mybatis-generator生成相关的dao层文件,示例如下:

TbDictionary.java
package com.wzz.dao.model;

import javax.persistence.*;

@Table(name = "tb_dictionary")
public class TbDictionary {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    /**
     * 字典编码
     */
    private String code;

    /**
     * 名称
     */
    private String name;

    /**
     * 类型
     */
    private String type;

    /**
     * 属性标记
     */
    private String field;

    /**
     * 字典值
     */
    private String value;

    /**
     * 排序号
     */
    @Column(name = "sortCode")
    private Short sortcode;

    /**
     * 状态:1可用,非1,不可用
     */
    private Byte status;

    /**
     * 备注
     */
    private String remark;

    /**
     * @return id
     */
    public Integer getId() {
        return id;
    }

    /**
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 获取字典编码
     *
     * @return code - 字典编码
     */
    public String getCode() {
        return code;
    }

    /**
     * 设置字典编码
     *
     * @param code 字典编码
     */
    public void setCode(String code) {
        this.code = code;
    }

    /**
     * 获取名称
     *
     * @return name - 名称
     */
    public String getName() {
        return name;
    }

    /**
     * 设置名称
     *
     * @param name 名称
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取类型
     *
     * @return type - 类型
     */
    public String getType() {
        return type;
    }

    /**
     * 设置类型
     *
     * @param type 类型
     */
    public void setType(String type) {
        this.type = type;
    }

    /**
     * 获取属性标记
     *
     * @return field - 属性标记
     */
    public String getField() {
        return field;
    }

    /**
     * 设置属性标记
     *
     * @param field 属性标记
     */
    public void setField(String field) {
        this.field = field;
    }

    /**
     * 获取字典值
     *
     * @return value - 字典值
     */
    public String getValue() {
        return value;
    }

    /**
     * 设置字典值
     *
     * @param value 字典值
     */
    public void setValue(String value) {
        this.value = value;
    }

    /**
     * 获取排序号
     *
     * @return sortCode - 排序号
     */
    public Short getSortcode() {
        return sortcode;
    }

    /**
     * 设置排序号
     *
     * @param sortcode 排序号
     */
    public void setSortcode(Short sortcode) {
        this.sortcode = sortcode;
    }

    /**
     * 获取状态:1可用,非1,不可用
     *
     * @return status - 状态:1可用,非1,不可用
     */
    public Byte getStatus() {
        return status;
    }

    /**
     * 设置状态:1可用,非1,不可用
     *
     * @param status 状态:1可用,非1,不可用
     */
    public void setStatus(Byte status) {
        this.status = status;
    }

    /**
     * 获取备注
     *
     * @return remark - 备注
     */
    public String getRemark() {
        return remark;
    }

    /**
     * 设置备注
     *
     * @param remark 备注
     */
    public void setRemark(String remark) {
        this.remark = remark;
    }
}
TbDictionaryMapper.java
package com.wzz.dao.mapper;

import com.wzz.dao.CommonMapper;
import com.wzz.dao.model.TbDictionary;

public interface TbDictionaryMapper extends CommonMapper<TbDictionary> {
}

TbDictionaryMapper.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.wzz.dao.mapper.TbDictionaryMapper">
  <resultMap id="BaseResultMap" type="com.wzz.dao.model.TbDictionary">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="code" jdbcType="VARCHAR" property="code" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="type" jdbcType="VARCHAR" property="type" />
    <result column="field" jdbcType="VARCHAR" property="field" />
    <result column="value" jdbcType="VARCHAR" property="value" />
    <result column="sortCode" jdbcType="SMALLINT" property="sortcode" />
    <result column="status" jdbcType="TINYINT" property="status" />
    <result column="remark" jdbcType="VARCHAR" property="remark" />
  </resultMap>

</mapper>

7、程序进行调用看是否可以运行成功

首先看下启动类

Application.java
package com.wzz;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan("com.wzz.dao.mapper")
@Slf4j
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        log.info("------------------ SpringBoot应用启动完成 ------------------");
    }
}
DictionaryService.java
package com.wzz.service;

import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wzz.dao.mapper.TbDictionaryMapper;
import com.wzz.dao.model.TbDictionary;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Author wangzz
 * @Date 2019/2/21 17:33
 * @Description
 */
@Service
@Slf4j
public class DictionaryService {

    @Resource
    private TbDictionaryMapper tbDictionaryMapper;

    public List<TbDictionary>  queryList(){

        PageHelper.startPage(1,10);

        List<TbDictionary> dictList = tbDictionaryMapper.selectAll();

        log.info("---查询结果---:{}",JSON.toJSON(dictList).toString());

        PageInfo<TbDictionary> pageInfo = new PageInfo<>(dictList);

        return pageInfo.getList();
    }


}
DictController.java
package com.wzz.controller;

import com.wzz.dao.model.TbDictionary;
import com.wzz.service.DictionaryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @Author wangzz
 * @Date 2019/2/21 17:36
 * @Description
 */
@RestController
@RequestMapping("/dict")
@Slf4j
public class DictController {

    @Autowired
    private DictionaryService dictionaryService;

    @GetMapping("/queryAll")
    @ResponseBody
    public List<TbDictionary> queryAll(){

        List<TbDictionary> dictList = dictionaryService.queryList();

        return  dictList;
    }
}

启动程序日志如下:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.2.RELEASE)

2019-02-21 18:59:33.163 [main] INFO  com.wzz.Application - Starting Application on DESKTOP-U2O7KPS with PID 11076 (F:\promotion\springbootpro\target\classes started by wangzhizhong in F:\promotion\springbootpro)
2019-02-21 18:59:33.163 [main] INFO  com.wzz.Application - The following profiles are active: dev
2019-02-21 18:59:33.883 [main] INFO  o.s.d.r.config.RepositoryConfigurationDelegate - Bootstrapping Spring Data repositories in DEFAULT mode.
2019-02-21 18:59:33.909 [main] INFO  o.s.d.r.config.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 23ms. Found 0 repository interfaces.
2019-02-21 18:59:34.318 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$2dfc831] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-02-21 18:59:34.666 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9081 (http)
2019-02-21 18:59:34.688 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9081"]
2019-02-21 18:59:34.704 [main] INFO  org.apache.catalina.core.StandardService - Starting service [Tomcat]
2019-02-21 18:59:34.704 [main] INFO  org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.14]
2019-02-21 18:59:34.719 [main] INFO  org.apache.catalina.core.AprLifecycleListener - The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [D:\Program Files\Java\jdk1.8.0_65\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:\Program Files\Java\jdk1.7.0_17\bin;D:\Program Files\Java\jdk1.7.0_17\jre\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;D:\Program Files\IDM Computer Solutions\UltraEdit;D:\Program Files\OpenVPN\bin;D:\apache-maven-3.5.3\bin;D:\Program Files\nodejs\;D:\Program Files\erl10.1\bin;D:\Program Files\TortoiseSVN\bin;D:\Program Files\Python\Python36;C:\Users\wangzhizhong\AppData\Local\Microsoft\WindowsApps;C:\Users\wangzhizhong\AppData\Roaming\npm;D:\Program Files\nodejs\node_global;D:\Program Files\Fiddler;D:\Program Files\Microsoft VS Code Insiders\bin;.]
2019-02-21 18:59:34.936 [main] INFO  o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
2019-02-21 18:59:34.936 [main] INFO  org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 1704 ms
2019-02-21 18:59:35.105 [main] INFO  com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
2019-02-21 18:59:35.437 [main] INFO  com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
2019-02-21 18:59:35.521 [main] INFO  org.hibernate.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [
	name: default
	...]
2019-02-21 18:59:35.622 [main] INFO  org.hibernate.Version - HHH000412: Hibernate Core {5.3.7.Final}
2019-02-21 18:59:35.622 [main] INFO  org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
2019-02-21 18:59:35.769 [main] INFO  org.hibernate.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
2019-02-21 18:59:35.891 [main] INFO  org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2019-02-21 18:59:36.053 [main] INFO  o.s.orm.jpa.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-02-21 18:59:36.553 [main] INFO  com.wzz.service.InitService - -----------PostConstruct执行初始化完成-----------
2019-02-21 18:59:36.753 [main] INFO  o.s.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
2019-02-21 18:59:36.791 [main] WARN  o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration$JpaWebMvcConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2019-02-21 18:59:36.991 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9081"]
2019-02-21 18:59:37.022 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 9081 (http) with context path ''
2019-02-21 18:59:37.022 [main] INFO  com.wzz.Application - Started Application in 4.307 seconds (JVM running for 5.265)
2019-02-21 18:59:37.091 [main] INFO  com.wzz.listener.CacheLoadExtExecutor - ---CacheLoadExtExecutor---:{"sourceArgs":[],"optionNames":[],"nonOptionArgs":[]}
2019-02-21 18:59:37.091 [main] INFO  com.wzz.listener.CacheLoadExtExecutor - -----------------ApplicationRunner开始执行初始化任务开始-----------------
2019-02-21 18:59:37.091 [main] INFO  com.wzz.listener.CacheLoadExtExecutor - -----------------ApplicationRunner开始执行初始化任务结束-----------------
2019-02-21 18:59:37.091 [main] INFO  com.wzz.listener.CacheLoadExecutor - ------------------CommandLineRunner开始执行初始化任务开始-------------------
2019-02-21 18:59:37.091 [main] INFO  com.wzz.listener.CacheLoadExecutor - ------------------CommandLineRunner开始执行初始化任务结束-------------------
2019-02-21 18:59:37.091 [main] INFO  com.wzz.Application - ------------------ SpringBoot应用启动完成 ------------------

可以用postman进行调用接口,可以成功,接下来介绍点其他的小内容,在项目容器启动完成后,可以进行初始化一些内容,可以借助ApplicationRunner、CommandLineRunner来初始化。   PostConstruct是在Bean初始化完成后就进行执行了,一般使用前两个更好一些。

来看一下代码示例:

CacheLoadExecutor.java
package com.wzz.listener;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

/**
 * @Author wangzz
 * @Date 2019/2/21 9:14
 * @Description
 */
@Component
@Slf4j
public class CacheLoadExecutor implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        log.info("------------------CommandLineRunner开始执行初始化任务开始-------------------");
//        TimeUnit.SECONDS.sleep(3);
        log.info("------------------CommandLineRunner开始执行初始化任务结束-------------------");
    }
}
CacheLoadExtExecutor.java
package com.wzz.listener;

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

/**
 * @Author wangzz
 * @Date 2019/2/21 9:28
 * @Description
 */
@Component
@Slf4j
public class CacheLoadExtExecutor implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.info("---CacheLoadExtExecutor---:{}", JSON.toJSON(args));
        log.info("-----------------ApplicationRunner开始执行初始化任务开始-----------------");
//        TimeUnit.SECONDS.sleep(3);
        log.info("-----------------ApplicationRunner开始执行初始化任务结束-----------------");

    }
}
package com.wzz.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;

/**
 * @Author wangzz
 * @Date 2019/2/21 9:26
 * @Description
 */
@Service
@Slf4j
public class InitService {

    @PostConstruct
    public void init(){
        log.info("-----------PostConstruct执行初始化完成-----------");
    }
}

项目中,我们也可以配置一些AOP切面,来做一些打印日志等一些操作,这个根据自己的项目需求来定,技术在此不讲解,主要是贴代码:

package com.wzz.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;

/**
 * 切面
 */
@Slf4j
@Aspect
@Component
public class AppLogAspect {

    // 定义一个切入点表达式,用来确定哪些类需要代理
    @Pointcut("execution(* com.wzz.controller..*.*(..))")
    public void cutMethod(){}

    // 环绕方法,可自定义目标方法执行的时机
    @Around("cutMethod()")
    public void around(ProceedingJoinPoint joinPoint){
        log.info("请求前 @Around :" + joinPoint.getSignature());
        try {
            joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        log.info("请求后 @Around :" + joinPoint.getSignature());

    }

    // 前置方法,在目标方法执行前执行
    @Before("cutMethod()")
    public void before(JoinPoint joinPoint) {
        log.info("请求前 @Before :" + joinPoint.getTarget());
    }

    // 定义通知类型
    @AfterReturning("cutMethod()")
    public void afterReturning(JoinPoint joinPoint) {
        log.info("请求后 @AfterReturning:" + joinPoint.getSignature());
    }

}

还有很多技术细节点,我们后面慢慢聊一下,感谢你的阅读,大家一起努力,一起进步。

猜你喜欢

转载自blog.csdn.net/sinosoft12345/article/details/87866396
今日推荐