(转)Spring Boot(二) & lombok

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

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

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

 

 

springboot的版本!!!2.0.1.RELEASEreact

<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/web

集成步骤

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

<!-- 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>

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

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

集成完毕~数据库

 

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

MyGenerator.java4.1KBjson

springboot的异常处理

在平常web开发中发生了异常,每每是须要经过一个统一的异常处理来保证客户端可以收到友好的提示。api

单个控制器异常

@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/

做业布置
相关文章
相关标签/搜索