JAVAEE高级工程师就业教程之SpringBoot学习进阶

Posted AAA教育张晨光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVAEE高级工程师就业教程之SpringBoot学习进阶相关的知识,希望对你有一定的参考价值。

1,课程回顾
1,springboot 简化springboot搭建和使用过程框架
2,@SpringBootApplication 复合注解
@Configuration 相当于过去xml @Bean
@EnableAutoConfiguration 自动整合第三方jar
@ComponentScan 同包或者子孙包所有有spring标识的类,都会交给IOC容器管理 @Controller @RestController @Service @Repository @Component
3,SpringApplication.run() 初始化ApplicationContext 初始化监听器listener 初始化Runners 把要所有Runners排序,按顺序执行
4,springboot整合mybatis
2,本章重点
springboot 连接池(监控功能)
springboot 日志配置
springboot整合PageHelper
springboot整合swagger(postman)
3,具体内容
3.1 整合连接池
https://github.com/alibaba/druid
添加支持


com.alibaba
druid-spring-boot-starter
1.1.9

如果是druid新版本,需要两个包:

com.alibaba
druid
1.2.8


com.alibaba
druid-spring-boot-starter
1.2.8

修改配置
#spring.datasource.druid.driver-class-name=oracle.jdbc.driver.OracleDriver 可配可不配,阿里的数据库连接池会通过url自动搜寻
spring.datasource.druid.url=jdbc:mysql://localhost:3306/db_qy141?useUnicode=true&characterEncoding=utf-8
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=10
spring.datasource.druid.max-wait=10
#是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。
#在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。
#spring.datasource.druid.pool-prepared-statements=true
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
#配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
#配置扩展插件:监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
spring.datasource.druid.filters=stat,wall
#spring.datasource.druid.filter.stat.log-slow-sql=true
#spring.datasource.druid.filter.stat.slow-sql-millis=2000

合并多个DruidDataSource的监控数据

spring.datasource.druid.use-global-data-source-stat=true

           监控配置:
            package com.aaa.sbm.controller;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**

  • @ fileName:DruidConfig

  • @ description:

  • @ author:zhz

  • @ createTime:2021/7/14 20:33

  • @ version:1.0.0
    /
    @Configuration
    public class DruidConfig
    /
    *

    • 主要实现WEB监控的配置处理
      /
      @Bean
      public ServletRegistrationBean druidServlet()
      // 现在要进行druid监控的配置处理操作
      ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
      new StatViewServlet(), "/druid/
      ");
      // 白名单,多个用逗号分割, 如果allow没有配置或者为空,则允许所有访问
      servletRegistrationBean.addInitParameter(“allow”, “127.0.0.1,192.168.1.110”);
      // 黑名单,多个用逗号分割 (共同存在时,deny优先于allow)
      servletRegistrationBean.addInitParameter(“deny”, “192.168.1.120”);
      // 控制台管理用户名
      servletRegistrationBean.addInitParameter(“loginUsername”, “admin”);
      // 控制台管理密码
      servletRegistrationBean.addInitParameter(“loginPassword”, “tiger”);
      // 是否可以重置数据源,禁用html页面上的“Reset All”功能
      servletRegistrationBean.addInitParameter(“resetEnable”, “false”);
      return servletRegistrationBean ;

    /**
    *配置过滤器WebStatFilter完成所有url请求的统计

    • @return
      /
      @Bean
      public FilterRegistrationBean filterRegistrationBean()
      FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean() ;
      filterRegistrationBean.setFilter(new WebStatFilter());
      //所有请求进行监控处理
      filterRegistrationBean.addUrlPatterns("/
      ");
      //添加不需要忽略的格式信息
      filterRegistrationBean.addInitParameter(“exclusions”, “.js,.gif,.jpg,.css,/druid/*”);
      return filterRegistrationBean ;

    /**

    • 加载druidDataSource
    • @return
      */
      @Bean
      @ConfigurationProperties(prefix = “spring.datasource.druid”)
      public DataSource druidDataSource()
      return new DruidDataSource();


请求地址:
http://127.0.0.1:9999/druid/login.html

3.2 springboot日志配置:
springboot日志地址:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.logging
常用日志介绍:
Log4j
是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、数据库等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
Log4j有7种不同的log级别,按照等级从低到高依次为:TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF。如果配置为OFF级别,表示关闭log。
Log4j支持两种格式的配置文件:properties和xml。包含三个主要的组件:Logger、appender、Layout。
详细配置:
https://blog.csdn.net/yanweihpu/article/details/80090839
Log4j2
Spring Boot1.4以及之后的版本已经不支持log4j,log4j也很久没有更新了,现在已经有很多其他的日志框架对Log4j进行了改良,比如说SLF4J、Logback等
https://logging.apache.org/log4j/2.x/
详细配置:
https://blog.csdn.net/qq_41071876/article/details/105376862
SLF4J
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,而是通过Facade Pattern提供一些Java logging API,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
http://www.slf4j.org/
Logback
Logback,一个“可靠、通用、快速而又灵活的Java日志框架”,logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK Logging。
http://logback.qos.ch/
springboot默认使用了logback配置.
Apache Commons Logging
Apache Commons Logging ,之前叫 Jakarta Commons Logging(JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。JCL提供的接口,对其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4+等,进行了简单的包装,此接口更接近于Log4J和LogKit的实现。
https://commons.apache.org/proper/commons-logging/guide.html

springboot项目类中日志使用
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private Logger log = LoggerFactory.getLogger(DeptController.class);
springboot在properties直接配置日志:
#日志相关配置
#配置日志文件的路径
logging.file.path=d:/springboot-log
#配置日志文件名,如果该属性不配置,默认文件名为spring.log windows下:path和name不可以同时配置,通知配置只有name起效
#logging.file.name=cc.log
#配置日志级别
logging.level.root=info
#定制控制台日志输出格式
#%dHH:mm:ss.SSS——日志输出时间
#%thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
#%-5level——日志级别,并且使用5个字符靠左对齐
#%logger- ——日志输出者的名字
#%msg——日志消息
#%n——平台的换行符
logging.pattern.console=%dyyyy/MM/dd [%thread] %-5level %logger- %msg%n
#定制文件日志输出格式
logging.pattern.file=%dyyyy/MM/dd-HH:mm [%thread] %-5level %logger- %msg%n
#mybatis配置日志
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
springboot的logback配置
配置日志不需要导入jar,日志包在父项目中已经引入,具体位置如下:
spring-boot-starter-parent ----父包—> spring-boot-dependencies ----父包—>spring-boot-dependencies -----查找----> spring-boot-starter-logging —点击进去----> 能看到日志包:logback-classic,log4j-to-slf4j…
在resources下创建logback.xml或者logback-spring.xml,复制配置进去

<?xml version="1.0" encoding="UTF-8"?> %dyyyy-MM-dd HH:mm:ss.SSS [%thread] %-5level %logger50 - %msg%n $LOG_HOME/springbootdemo.log.%dyyyy-MM-dd.log 30 %dyyyy-MM-dd HH:mm:ss.SSS [%thread] %-5level %logger50 - %msg%n 10MB
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="DEBUG"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>

<!-- 日志输出级别
  trace<debug<info<warn<error<fatal
级别之间是包含的关系,意思是如果你设置日志级别是trace,则大于等于这个级别的日志都会输出。
trace: 是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。
debug: 调试么,我一般就只用这个作为最低级别,trace压根不用。是在没办法就用eclipse或者idea的debug功能就好了么。
info: 输出一下你感兴趣的或者重要的信息,这个用的最多了。
warn: 有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有error 和warn(不算错误但是也请注意,比如以下depressed的方法)。
error: 错误信息。用的也比较多。
fatal: 级别比较高了。重大错误,这种级别你可以直接停止程序了,是不应该出现的错误么!不用那么紧张,其实就是一个程度的问题。

–>


















3.3 springboot整合shiro
springboot 的application.properties配置
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
springboot访问templates配置(或者创建resources放置HTML)
spring.resources.static-locations=classpath:/templates/
整合前需要先讲解讲解@Configuration和@Bean用法,否则整合代码看不懂。

@Configuration 可理解为用spring的时候xml里面的标签,注解标记在类上,就像之前我们声明的一个spring的xml配置文件,该类我们称为配置类.
@Bean 可理解为用spring的时候xml里面的标签,标记在方法之上,方法的返回值为向springIOC容器之中注入一个Bean.其中,返回值相当于xml文件bean标签的class属性.如果@Bean配置value相当于id属性,如果没有配置,方法的名称相当于id属性
package com.aaa.sbms.config;

import com.aaa.sbms.entity.Dept;
import com.aaa.sbms.entity.Emp;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**

  • fileName:MyConfig

  • description:

  • author:zz

  • createTime:2019/11/26 15:48

  • version:1.0.0
    */
    @Configuration
    public class MyConfig

    /**

    • 相当于过去的
    • @return
      */
      @Bean
      public Emp emp(@Qualifier(“d1”) Dept d)
      Emp emp = new Emp();
      emp.setEname(“zhangsan”);
      emp.setSal(10000);
      emp.setDept(d);
      return emp;

    @Bean(“d1”)
    public Dept dept()
    Dept dept =new Dept();
    dept.setDname(“kaifa1”);
    dept.setLoc(“1lou”);
    return dept;


    package com.aaa.sbms;

import com.aaa.sbms.entity.Emp;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication
@MapperScan(“com.aaa.sbms.dao”)
@EnableTransactionManagement //开启注解式事务
public class SbmShiroApplication

public static void main(String[] args) 
	ConfigurableApplicationContext applicationContext = SpringApplication.run(SbmShiroApplication.class, args);
	Emp emp =(Emp)applicationContext.getBean("emp");
	System.out.println(emp.getEname()+","+emp.getSal());
	System.out.println(emp.getDept().getDname()+","+emp.getDept().getLoc());

上面知识点熟悉后,整合shiro
1,引入包:

org.apache.shiro
shiro-core
1.4.0


org.apache.shiro
shiro-ehcache
1.4.0


org.apache.shiro
shiro-spring
1.4.0


org.apache.shiro
shiro-web
1.4.0

或者使用:

org.apache.shiro
shiro-spring
1.7.1

2,编写ShiroConfig
package com.aaa.sbm.configuration;

import com.aaa.sbm.util.MyRealm;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**

  • fileName:ShiroConfiguration

  • description:

  • author:zz

  • createTime:2020/10/13 10:39

  • version:1.0.0
    */
    @Configuration // 相当于spring-shiro-config.xml
    public class ShiroConfiguration

    /**

    • shiro过滤器工厂实例 配置拦截到所有请求进行处理
    • @return
      */
      @Bean //
      public ShiroFilterFactoryBean shiroFilter()
      //实例化对象
      ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
      //让securityManager生效
      shiroFilterFactoryBean.setSecurityManager(securityManager());
      //设置未认证跳转的登录路径
      shiroFilterFactoryBean.setLoginUrl(“/html/login.html”);
      //定义放开或者拦截的请求路径
      Map<String, String> urlMap = new LinkedHashMap<>(); //按照添加的先后顺序
      //免过滤地址
      urlMap.put(“/css/“,“anon”);
      urlMap.put(”/js/
      ”,“anon”);
      urlMap.put(“/images/“,“anon”);
      urlMap.put(”/html/login.html",“anon”);
      urlMap.put(“/html/register.html”,“anon”);
      urlMap.put(“/user/login”,“anon”);
      urlMap.put(“/user/register”,“anon”);
      //注销
      urlMap.put(“/logout”,“logout”);
      //过滤地址
      urlMap.put("/
      ”,“authc”);
      shiroFilterFactoryBean.setFilterChainDefinitionMap(urlMap);
      return shiroFilterFactoryBean;

    /**

    • 实例化SecurityManager
    • @return
      */
      @Bean
      public SecurityManager securityManager()
      DefaultWebSecurityManager securityManager =new DefaultWebSecurityManager();
      securityManager.setRealm(myRealm());
      return securityManager;

    /**
    *实例化自定义Realm类

    • @return
      */
      @Bean
      public MyRealm myRealm()
      MyRealm myRealm =new MyRealm();
      //设值算法类
      myRealm.setCredentialsMatcher(credentialsMatcher());
      return myRealm;

    /**
    *实例化加密算法类

    • @return
      */
      @Bean
      public HashedCredentialsMatcher credentialsMatcher()
      HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
      //设值加密算法名称
      hashedCredentialsMatcher.setHashAlgorithmName(“SHA-512”);
      //设置hash次数
      hashedCredentialsMatcher.setHashIterations(1024);
      return hashedCredentialsMatcher;

    /**

    • 主要实现的功能为使用bean后处理器的回调函数,根据ioc容器配置的advisor,来对ioc 容器中的其他bean生成相应代理
    • @return
      */
      @Bean
      @ConditionalOnMissingBean //保证该 bean在底层注册一次
      public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator()
      DefaultAdvisorAutoProxyCreator defaultAAP = new DefaultAdvisorAutoProxyCreator();
      defaultAAP.setProxyTargetClass(true);
      return defaultAAP;

    /**

    • 方法层面的权限过滤,用于支持shiro注解,配置后shiro识别@RequiresPermissions
    • @param securityManager
    • @return
      */
      @Bean
      public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager)
      AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
      authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
      return authorizationAttributeSourceAdvisor;

3.myrealm
package com.aaa.sm.config;

import com.aaa.sm.service.UserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**

  • fileName:MyShiroRealm

  • description:

  • author:zz

  • createTime:2019/11/14 10:38

  • version:1.0.0
    */
    public class MyShiroRealm extends AuthorizingRealm

    @Autowired
    private UserService userService;

    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection)
    //添加角色和权限
    SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
    for (Role role : user.getRoles())
    //添加角色
    simpleAuthorizationInfo.addRole(role.getRoleName());
    //添加权限
    for (Permissions permissions : role.getPermissions())
    simpleAuthorizationInfo.addStringPermission(permissions.getPermissionsName());


    return simpleAuthorizationInfo;

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException
    //获取用户名
    Object userName = authenticationToken.getPrincipal();
    Map map = new HashMap();
    map.put(“userName”,userName);
    //根据用户名查询列表
    List userMapList = userService.getListByParam(map);
    //判断
    if(userMapList!=null&&userMapList.size()>0)
    Map userMap = userMapList.get(0);
    //SecurityUtils.getSubject().getSession().setAttribute(“userInfo”,userMap);
    return new SimpleAuthenticationInfo(userMap.get(“USER_NAME”)+“”,
    userMap.get(“PASSWORD”)+“”,getName());
    else
    throw new AccountException();


方法配置:
@RequiresRoles(“admin”)
@GetMapping(“/admin”)
public String admin()
return “admin success!”;

@RequiresPermissions("query")
@GetMapping("/index")
public String index() 
    return "index success!";


@RequiresPermissions("add")
@GetMapping("/add")
public String add() 
    return "add success!";

4,编写登录页面和功能,进行测试

用户登录 用户名: 密码:

3.4mybatis分页插件 pageHelper
https://pagehelper.github.io/
https://gitee.com/free/Mybatis_PageHelper
1,添加jar包

com.github.pagehelper pagehelper-spring-boot-starter 1.3.0 2,添加springboot配置 https://github.com/abel533/MyBatis-Spring-Boot #分页插件 #helperDialect属性来指定分页插件使用哪种方言 pagehelper.helper-dialect=oracle #当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。 pagehelper.reasonable=true #支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。 pagehelper.support-methods-arguments=true #增加了该参数来配置参数映射,用于从对象中根据属性名取值 pagehelper.params=count=countSql 3,具体使用 与以前controller区别 //设置当前第几页和每页显示数量 PageHelper.startPage(Integer.valueOf(map.get("pageNo")+""),Integer.valueOf(map.get("pageSize")+"")); //用PageInfo对结果进行包装 PageInfo pageInfo =new PageInfo (newsService.getList());

/**
* 分页部门查询
* @param map
* @return
*/
@ResponseBody
@RequestMapping(“page”)
public Object page(@RequestParam Map map)
int pageNo = Integer.valueOf(map.get(“pageNo”)+“”);
int pageSize = Integer.valueOf(map.get(“pageSize”)+“”);
//初始化配置
PageHelper.startPage(pageNo,pageSize);
PageInfo pageInfo = new PageInfo(deptService.getList());
//如果使用easyui可以这样封装,其他框架,自己根据pageInfo解析
Map tmap = new HashMap();
tmap.put(“total”,pageInfo.getTotal());
tmap.put(“rows”,pageInfo.getList());
return tmap;

3.5 springboot整合thymeleaf (类似jsp模板)
https://www.thymeleaf.org/
Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎。
Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板-HTML可以在浏览器中正确显示,也可以作为静态原型工作,从而可以在开发团队中加强协作。
Thymeleaf拥有用于Spring Framework的模块,与您喜欢的工具的大量集成以及插入您自己的功能的能力,对于现代HTML5 JVM Web开发而言,Thymeleaf是理想的选择-尽管它还有很多工作要做。
3.5.1 引入jar:


org.springframework.boot
spring-boot-starter-thymeleaf

3.5.2 application.properties添加配置

thymeleaf

#配置thymeleaf模板所在的位置
spring.thymeleaf.prefix=classpath:/templates/
#配置thymeleaf模板后缀
spring.thymeleaf.suffix=.html
#配置thymeleaf文档的编码
spring.thymeleaf.encoding=utf-8
#内容类型
spring.thymeleaf.content-type=text/html
#模板格式
spring.thymeleaf.mode=HTML
#cache这一行是将页面的缓存关闭,不然我们改变页面之后可能不能及时看到更改的内容,默认是true
spring.thymeleaf.cache=false

   3.5.3 后台绑定值
               org.springframework.ui.Model   + String 
                或者
               org.springframework.web.servlet.ModelAndView
   3.5.4 页面thymeleaf标签的使用
               https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#reformatting-dates-in-our-home-page
               引入:
<html lang="en" xmlns:th="http://www.thymeleaf.org">
     标签:
           <tr th:each="dept:$deptList">
           <td th:text="$dept.deptNo"> </td>
          <a th:href="@/deptTh/toUpdate(deptNo=$dept.deptNo)">修改</a>
          <a th:href="'javascript:del('+$dept.deptNo+')'">删除</a>
          <input type="hidden" name="deptNo" value="deptNo" th:value="$dept.deptNo"/>
   <input type="text" name="dname"   th:value="$dept.dname"  >

https://www.mk2048.com/blog/blog_1ai12ja20b2j.html

3.6 springboot整合swagger
简介:
借助Swagger开源和专业工具集,为用户,团队和企业简化API开发。了解Swagger如何帮助您大规模设计和记录API。
Swagger工具的强大功能始于OpenAPI规范— RESTful API设计的行业标准
特点:
开源 免费,专业
使用:
1,jar依赖


io.springfox
springfox-swagger2
2.9.2



io.springfox
springfox-swagger-ui
2.9.2

2,springboot整合swagger配置
package com.aaa.sbm.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**

  • fileName:SwaggerConfig

  • description:

  • author:zz

  • createTime:2020/1/11 14:50

  • version:1.0.0
    */
    @Configuration
    public class SwaggerConfig

    /**

    • 创建一个docket
    • @return
      */
      @Bean
      public Docket docket()
      return new Docket(DocumentationType.SWAGGER_2)
      .apiInfo(apiInfo())
      //.enable(false) //swagger不能访问
      .select()
      //配置要扫描接口的方式
      .apis(RequestHandlerSelectors.basePackage(“com.aaa.sbm.controller”))
      //路径过滤
      .paths(PathSelectors.any())
      .build();

    /**

    • apiInfo
    • @return
      */
      private ApiInfo apiInfo()
      return new ApiInfoBuilder()
      .title(“Spring Boot中使用Swagger2构建RESTful APIs”)
      .description(“更多请关注http://www.baidu.com”)
      .termsOfServiceUrl(“http://www.baidu.com”)
      .contact(“aaa”)
      .version(“1.0”)
      .build();


      3,开启swagger
      @EnableSwagger2
      4, 可选配置
      方法:
      @ApiOperation(“部门删除”)
      参数:
      @ApiParam(“部门删除参数”)
      5,测试
      http://localhost:8888/swagger-ui.html
      #解决swagger和springboot冲突
      spring.mvc.pathmatch.matching-strategy=ant_path_matcher

3.7 统一返回值处理

3.8 统一返回异常处理(包含自定义异常)

4,知识点总结
5,本章面试题

以上是关于JAVAEE高级工程师就业教程之SpringBoot学习进阶的主要内容,如果未能解决你的问题,请参考以下文章

JAVAEE高级工程师就业教程之代理模式.适配器模式.策略模式.观察者模式

传智播客JavaEE 第168期就业班视频教程 02-ERP简介

传智播客JavaEE 第168期就业班视频教程03-ERP简介

传智播客JavaEE 第168期就业班视频教程day38-SSH综合案例-1

2017最新整理传智播客JavaEE第49期 基础就业班

传智播客JavaEE 第168期就业班视频教程16-框架结构测试(加载全spring配置文件)+struts2属性驱动测试