(二期)5、springboot框架集成与lombok

【课程五】springb...mbok.xmind0.1MB

【课程五预习】spr...mbok.xmind0.1MB

springboot的版本!!!2.0.1.RELEASE

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
springboot集成mybatis plus
mybatis plus官网

http://mp.baomidou.com/

集成步骤

第一步、导入mybatis plus的pom坐标,驱动包

<!-- mybatis plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

第二步、配置数据库连接信息

# DataSource Config
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/homework
    username: root
    password: admin

集成完毕~

代码生成工具MyGenerator.java,用于生成代表的增删改查

MyGenerator.java4.1KB

springboot的异常处理

在日常web开发中发生了异常,往往是需要通过一个统一的异常处理来保证客户端能够收到友好的提示。

单个控制器异常

@ExceptionHandler可用于控制器中,表示处理当前类的异常。

@ExceptionHandler(Exception.class)
public String exceptionHandler(Exception e) {
    log.error("---------------->捕获到局部异常", e);
    return "index";
}
全局异常

如果单使用@ExceptionHandler,只能在当前Controller中处理异常。但当配合@ControllerAdvice一起使用的时候,就可以摆脱那个限制了。

可通过@ExceptionHandler的参数进行异常分类处理。

步骤:

第一步、自定义异常

public class MyException extends Exception {

    public MyException(String message) {
        super(message);
    }
}

第二步、定义全局处理器,主要是@ControllerAdvice和@ExceptionHandler注解的运用

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {

        log.error("------------------>捕捉到全局异常", e);

        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", e);
        mav.addObject("url", req.getRequestURL());
        mav.setViewName("error");
        return mav;
    }

    @ExceptionHandler(value = MyException.class)
    @ResponseBody
    public R jsonErrorHandler(HttpServletRequest req, MyException e) throws Exception {

        //TODO 错误日志处理
        
        return R.fail(e.getMessage(), "some data");
    }

}
springboot的打包方式
第一种、打包jar

直接运行命令 mvn clean install

第二种、打包成war,运行在tomcat中

第一步、修改packing,从jar改成war

<packaging>war</packaging>

第二步、springboot的web模块移除内嵌的tomcat

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 移除嵌入式tomcat插件 -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>

</dependency>

第三步、添加tomcat的servlet-api的依赖

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>8.0.36</version>
    <scope>provided</scope>
</dependency>

第四步、修改启动方法,继承SpringBootServletInitializer 并重写configure方法。

@SpringBootApplication
public class SpringBootFrameApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootFrameApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意这里要指向原先用main方法执行的Application启动类
        return builder.sources(SpringBootFrameApplication.class);
    }
}

第五步、mvn clean package打包部署即可。

lombok的使用
  1. 什么是lombok

连官网都懒得废话,只给出了一句广告词:给你的java加点料(spice up your java)。

我们自己来总结一下:

lombok是一个ide插件,它可以让我们写更少的代码,而编译出更多的字节码。

我们可以让我们编译出一个复杂的.class文件,而我们的.java文件很干净清爽。

lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过通用对应的注解,在编译源码的时候生成对应的方法。

  1. lombok有点和缺点

优点

  • 省事,少些写很多模板代码;减少修改属性带来的错误。

缺点

  • 可读性差;不支持多种参数构造器的重载。
  1. lombok安装
  1. 先装插件

IDEA

eclipse

由于eclipse的默认编译器并不是javac,所以,需要额外安装,基本就是改下引导参数,可以直接运行jar包,或者手动在eclipse.ini里加上参数

-Xbootclasspath/a:lombok.jar

-javaagent:lombok.jar

maven使用步骤

  1. 导入pom包
<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
 
  1. lombok常用注解

@Slf4j

Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);

@Log4j

Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);

@Data :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法

@Setter:注解在属性上;为属性提供 setting 方法

@Getter:注解在属性上;为属性提供 getting 方法

样例::

http://codepub.cn/2015/07/30/Lombok-development-guidelines/

  1. lombok使用场景
  • 尤其适合pojo类,如普通的javabean、orm的实体类、json的实体类等。
  • 有些功能如Log相关,适用于任意类。
原理解析

而且由于他相当于是在编译期对代码进行了修改,因此从直观上看,源代码甚至是语法有问题的。

一个更直接的体现就是,普通的包在引用之后一般的IDE都能够自动识别语法,但是Lombok的这些注解,一般的IDE都无法自动识别。

像spring那种注解是通过反射来获得注解对应的元素并实现业务逻辑,但是我们显然不希望在使用Lombok这种功能的时候还要编写其他的调用代码,况且用反射也获取不到编译期才存在的注解。

幸运的是Java早已支持了JSR269的规范,允许在编译时指定一个processor类来对编译阶段的注解进行干预。

public abstract class AbstractProcessor implements Processor{

#通过ProcessingEnvironment来获取编译阶段的一些环境信息
  public synchronized void init(ProcessingEnvironment var1){}
  
  #实现具体逻辑的地方,也就是对AST进行处理的地方
  public abstract boolean process(Set<? extends TypeElement> var1, RoundEnvironment var2);

}

init的主要用途是通过ProcessingEnvironment来获取编译阶段的一些环境信息;process主要是实现具体逻辑的地方,也就是对AST进行处理的地方。

https://juejin.im/entry/5a390ba76fb9a0451e3fed7c

http://blog.didispace.com/java-lombok-how-to-use/

作业布置
 

(转)Spring Boot(二) & lombok的更多相关文章

  1. Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控

    Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控 Spring Boot Actuator提供了对单个Spring Boot的监控,信息包含: ...

  2. Spring Boot 二十个注解

    Spring Boot 二十个注解 占据无力拥有的东西是一种悲哀. Cold on the outside passionate on the insede. 背景:Spring Boot 注解的强大 ...

  3. Lombok安装及Spring Boot集成Lombok

    文章目录 Lombok有什么用 使用Lombok时需要注意的点 Lombok的安装 spring boot集成Lombok Lombok常用注解 @NonNull @Cleanup @Getter/@ ...

  4. spring boot(二):启动原理解析

    我们开发任何一个Spring Boot项目,都会用到如下的启动类 @SpringBootApplication public class Application { public static voi ...

  5. Spring Boot(二):数据库操作

    本文主要讲解如何通过spring boot来访问数据库,本文会演示三种方式来访问数据库,第一种是JdbcTemplate,第二种是JPA,第三种是Mybatis.之前已经提到过,本系列会以一个博客系统 ...

  6. spring boot(二十)使用spring-boot-admin对服务进行监控

    上一篇文章<springboot(十九):使用Spring Boot Actuator监控应用>介绍了Spring Boot Actuator的使用,Spring Boot Actuato ...

  7. Spring Boot(二) 配置文件

    文章导航-readme 一.配置Spring Boot热部署     技术的发展总是因为人们想偷懒的心理,如果我们不想每次修改了代码,都必须重启一下服务器,并重新运行代码.那么可以配置一下热部署.有了 ...

  8. spring boot(二):web综合开发

    上篇文章介绍了Spring boot初级教程:spring boot(一):入门篇,方便大家快速入门.了解实践Spring boot特性:本篇文章接着上篇内容继续为大家介绍spring boot的其它 ...

  9. (转)Spring Boot(二十):使用 spring-boot-admin 对 Spring Boot 服务进行监控

    http://www.ityouknow.com/springboot/2018/02/11/spring-boot-admin.html 上一篇文章<Spring Boot(十九):使用 Sp ...

  10. (转)Spring Boot(二):Web 综合开发

    http://www.ityouknow.com/springboot/2016/02/03/spring-boot-web.html 上篇文章介绍了 Spring Boot 初级教程:Spring ...

随机推荐

  1. callback源码分析——callbacks

    uvm的callback必须是提供者有预见性的留一些方法在function前后,这样在使用的时候,进行遍历调度即可 设计者,需要从uvm_callback定义一个基类,只定义function原型,定义 ...

  2. linux常见运维题

    linux运维题 一.填空题 1. 在Linux 系统 中,以文件方式访问设备 . (linux下一切都是文件) 2. Linux 内核引导时,从文件/etc/fstab中读取要加载的文件系统 . ( ...

  3. 10 enumerate()在字典,列表中的用法详解

    1.字典 li = {"alex"," aric","Alex","Tony","rain"}for ...

  4. uva11990 动态逆序对

    这题说的是给了一个数组,按照他给的顺序依次删除数,在删除之前输出此时的逆序对个数 我们用Fenwick树 维护这整个数列, C[i]是一个 treap的头, 管理了在树状数组中 能影响他的点,然后我们 ...

  5. 【Hadoop学习之九】MapReduce案例分析一-天气

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 找出每个月气温最高的2天 1949 ...

  6. Qt信号之自定义数据类型

    [1]为什么需要自定义数据类型? 内置类型毕竟很有局限性,否则为什么还需要类呢.总之,有时候,我们多么希望信号能发送自定义数据类型. 幸哉~ Qt是支持自定义信号,且自定义信号可以发送自定义数据类型的 ...

  7. (Review cs231n) Backpropagation and Neural Network

    损失由两部分组成: 数据损失+正则化损失(data loss + regularization) 想得到损失函数关于权值矩阵W的梯度表达式,然后进性优化操作(损失相当于海拔,你在山上的位置相当于W,你 ...

  8. 【Alpha版本】冲刺阶段——Day2

    [Alpha版本]冲刺阶段--Day2 阅读目录 今日进展 问题困难 明日任务 今日贡献量 站立式会议 TODOlist [今日进展] 密码算法方面: 存储密码的步骤 使用CSPRNG生成一个长度足够 ...

  9. 通过百度api 获取当前城市3种方法

    方法一:function showLocation(data) { console.log(data.content); //alert(data.content.address_detail.cit ...

  10. bzoj3196 二逼平衡树

    题目链接 平衡树系列最后一题 坑啊 10s时间限制跑了9764ms...还是要学一学bit套主席树啦... 经典的线段树套treap...至于第一发为什么要TLE(我不会告诉你treap插入的时候忘了 ...