springboot知识点整理(2021)
springboot知识点整理
参考网址
https://mp.weixin.qq.com/s/GjjxJt8OauumW_J2ps7tow
Demo
脚手架项目地址:
https://github.com/Vip-Augus/springboot-note
Table of Contents generated with DocToc
SpringBoot 速记
- 一、引入依赖
- 二、配置 Swagger 参数
- 一、引入依赖
- 二、配置邮箱的参数
- 三、写模板和发送内容
- 一、引用 Redis 依赖
- 二、参数配置
- 三、代码使用
- 一、添加 mybatis 和 druid 依赖
- 二、配置数据库和连接池参数
- 三、其他 mybatis 配置
- @ExceptionHandler 错误处理
- @ModelAttribute 视图属性
- 常规配置
- HTTPS 配置
- 构建项目
- SpringBoot 基础配置
- Spring Boot Starters
- @SpringBootApplication
- Web 容器配置
- @ConfigurationProperties
- Profile
- @ControllerAdvice 用来处理全局数据
- CORS 支持,跨域资源共享
- 注册 MVC 拦截器
- 开启 AOP 切面控制
- 整合 Mybatis 和 Druid
- 整合 Redis
- 发送 HTML 样式的邮件
- 整合 Swagger (API 文档)
- 总结
- 参考资料
构建项目
相比于使用 IDEA
的模板创建项目,我更推荐的是在 Spring
官网上选择参数一步生成项目。
https://start.spring.io/
关于 IDEA 发布过很多文字,可以关注微信公众号 Java后端,关注后输入 666 命令下载 Spring Boot 和 IDEA 相关文字的 PDF。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NIGpGXJy-1611504815192)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
我们只需要做的事情,就是修改组织名和项目名,点击 Generate the project
,下载到本地,然后使用 IDEA
打开
这个时候,不需要任何配置,点击 Application
类的 run
方法就能直接启动项目。
SpringBoot 基础配置
Spring Boot Starters
引用自参考资料 1 描述:
“
starter的理念:starter 会把所有用到的依赖都给包含进来,避免了开发者自己去引入依赖所带来的麻烦。需要注意的是不同的 starter 是为了解决不同的依赖,所以它们内部的实现可能会有很大的差异,例如 jpa 的 starter 和 Redis 的 starter 可能实现就不一样,这是因为 starter 的本质在于 synthesize,这是一层在逻辑层面的抽象,也许这种理念有点类似于 Docker,因为它们都是在做一个“包装”的操作,如果你知道 Docker 是为了解决什么问题的,也许你可以用 Docker 和 starter 做一个类比。
”
我们知道在 SpringBoot
中很重要的一个概念就是,「约定优于配置」,通过特定方式的配置,可以减少很多步骤来实现想要的功能。
例如如果我们想要使用缓存 Redis
在之前的可能需要通过以下几个步骤:
- 在
pom
文件引入特定版本的redis
- 在
.properties
文件中配置参数 - 根据参数,新建一个又一个
jedis
连接 - 定义一个工具类,手动创建连接池来管理
经历了上面的步骤,我们才能正式使用 Redis
但在 Spring Boot
中,一切因为 Starter
变得简单
- 在
pom
文件中引入spring-boot-starter-data-redis
- 在
.properties
文件中配置参数
通过上面两个步骤,配置自动生效,具体生效的 bean
是 RedisAutoConfiguration
,自动配置类的名字都有一个特点,叫做 xxxAutoConfiguration
。
可以来简单看下这个类:
@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {@Bean@ConditionalOnMissingBean(name = "redisTemplate")public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {RedisTemplate<Object, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);return template;}@Bean@ConditionalOnMissingBeanpublic StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}}@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {...}
可以看到,Redis
自动配置类,读取了以 spring.redis
为前缀的配置,然后加载 redisTemplate
到容器中,然后我们在应用中就能使用 RedisTemplate
来对缓存进行操作~(还有很多细节没有细说,例如 @ConditionalOnMissingBean
先留个坑(●´∀`●)ノ)
@Autowired
private RedisTemplate redisTemplate;ValueOperations ops2 = redisTemplate.opsForValue();
Book book = (Book) ops2.get("b1");
@SpringBootApplication
该注解是加载项目的启动类上的,而且它是一个组合注解:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {...}
下面是这三个核心注解的解释:
注解名 | 解释 |
---|---|
@SpringBootConfiguration | 表明这是一个配置类,开发者可以在这个类中配置 Bean |
@EnableAutoConfiguration | 表示开启自动化配置 |
@ComponentScan | 完成包扫描,默认扫描的类位于当前类所在包的下面 |
通过该注解,我们执行 mian
方法:
SpringApplication.run(SpringBootLearnApplication.class, args);
就可以启动一个 SpringApplicaiton
应用了。
Web 容器配置
常规配置
配置名 | 解释 |
---|---|
server.port=8081 | 配置了容器的端口号,默认是 8080 |
server.error.path=/error | 配置了项目出错时跳转的页面 |
server.servlet.session.timeout=30m | session 失效时间,m 表示分钟,如果不写单位,默认是秒 s |
server.servlet.context-path=/ | 项目名称,不配置时默认为/。配置后,访问时需加上前缀 |
server.tomcat.uri-encoding=utf-8 | Tomcat 请求编码格式 |
server.tomcat.max-threads=500 | Tomcat 最大线程数 |
server.tomcat.basedir=/home/tmp | Tomcat 运行日志和临时文件的目录,如不配置,默认使用系统的临时目录 |
HTTPS 配置
配置名 | 解释 |
---|---|
server.ssl.key-store=xxx | 秘钥文件名 |
server.ssl.key-alias=xxx | 秘钥别名 |
server.ssl.key-store-password=123456 | 秘钥密码 |
想要详细了解如何配置 HTTPS
,可以参考这篇文章 Spring Boot 使用SSL-HTTPS
@ConfigurationProperties
这个注解可以放在类上或者 @Bean
注解所在方法上,这样 SpringBoot
就能够从配置文件中,读取特定前缀的配置,将属性值注入到对应的属性。
使用例子:
@Configuration
@ConfigurationProperties(prefix = "spring.datasource")
public class DruidConfigBean {private Integer initialSize;private Integer minIdle;private Integer maxActive;private List<String> customs;...
}
application.properties
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.customs=test1,test2,test3
其中,如果对象是列表结构,可以在配置文件中使用 , 逗号进行分割,然后注入到相应的属性中。
Profile
使用该属性,可以快速切换配置文件,在 SpringBoot
默认约定中,不同环境下配置文件名称规则为 application-{profile}.propertie
,profile
占位符表示当前环境的名称。
1、配置 application.properties
spring.profiles.active=dev
2、在代码中配置 在启动类的 main
方法上添加 setAdditionalProfiles("{profile}")
;
SpringApplicationBuilder builder = new SpringApplicationBuilder(SpringBootLearnApplication.class);
builder.application().setAdditionalProfiles("prod");
builder.run(args);
3、启动参数配置
java -jar demo.jar --spring.active.profile=dev
@ControllerAdvice 用来处理全局数据
@ControllerAdvice
是 @Controller
的增强版。主要用来处理全局数据,一般搭配 @ExceptionHandler
、@ModelAttribute
以及 @InitBinder
使用。
@ExceptionHandler 错误处理
/*** 加强版控制器,拦截自定义的异常处理**/
@ControllerAdvice
public class CustomExceptionHandler {// 指定全局拦截的异常类型,统一处理@ExceptionHandler(MaxUploadSizeExceededException.class)public void uploadException(MaxUploadSizeExceededException e, HttpServletResponse response) throws IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.write("上传文件大小超出限制");out.flush();out.close();}
}
@ModelAttribute 视图属性
@ControllerAdvice
public class CustomModelAttribute {// @ModelAttribute(value = "info")public Map<String, String> userInfo() throws IOException {Map<String, String> map = new HashMap<>();map.put("test", "testInfo");return map;}
}@GetMapping("/hello")
public String hello(Model model) {Map<String, Object> map = model.asMap();Map<String, String> infoMap = (Map<String, String>) map.get("info");return infoMap.get("test");
}
key : @ModelAttribute
注解中的value
属性- 使用场景:任何请求
controller
类,通过方法参数中的Model
都可以获取value
对应的属性 - 关注公众号Java后端编程,回复 Java 获取最新学习资料 。
CORS 支持,跨域资源共享
CORS(Cross-Origin Resource Sharing)
,跨域资源共享技术,目的是为了解决前端的跨域请求。
“
引用:当一个资源从与该资源本身所在服务器不同的域或端口请求一个资源时,资源会发起一个跨域HTTP请求
”
详细可以参考这篇文章-springboot系列文章之实现跨域请求(CORS),这里只是记录一下如何使用:
例如在我的前后端分离 demo
中,如果没有通过 Nginx
转发,那么将会提示如下信息:
“
Access to fetch at ‘http://localhost:8888/login‘ from origin ‘http://localhost:3000‘ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: The value of the ‘Access-Control-Allow-Credentials’ header in the response is ‘’ which must be ‘true’ when the request’s credentials mode is ‘include’
”
为了解决这个问题,在前端不修改的情况下,需要后端加上如下两行代码:
// 第一行,支持的域
@CrossOrigin(origins = "http://localhost:3000")
@RequestMapping(value = "/login", method = RequestMethod.GET)
@ResponseBody
public String login(HttpServletResponse response) {// 第二行,响应体添加头信息(这一行是解决上面的提示)response.setHeader("Access-Control-Allow-Credentials", "true");return HttpRequestUtils.login();
}
注册 MVC 拦截器
在 MVC
模块中,也提供了类似 AOP
切面管理的扩展,能够拥有更加精细的拦截处理能力。
核心在于该接口:HandlerInterceptor
,使用方式如下:
/*** 自定义 MVC 拦截器*/
public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在 controller 方法之前调用return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 在 controller 方法之后调用}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 在 postHandle 方法之后调用}
}
注册代码:
/*** 全局控制的 mvc 配置*/
@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor())// 表示拦截的 URL.addPathPatterns("/**")// 表示需要排除的路径.excludePathPatterns("/hello");}
}
拦截器执行顺序:preHandle
-> controller
-> postHandle
-> afterCompletion
,同时需要注意的是,只有 preHandle
方法返回 true
,后面的方法才会继续执行。
开启 AOP 切面控制
切面注入是老生常谈的技术,之前学习 Spring
时也有了解,可以参考我之前写过的文章参考一下:
Spring自定义注解实现AOP
Spring 源码学习(八) AOP 使用和实现原理
在 SpringBoot
中,使用起来更加简便,只需要加入该依赖,使用方法与上面一样。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
整合 Mybatis 和 Druid
SpringBoot
整合数据库操作,目前主流使用的是 Druid
连接池和 Mybatis
持久层,同样的,starter
提供了简洁的整合方案
项目结构如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rm7fNv0O-1611504815195)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
一、添加 mybatis 和 druid 依赖
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.18</version>
</dependency>
二、配置数据库和连接池参数
# 数据库配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=12345678# druid 配置
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-wait=60000
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.max-open-prepared-statements=20
spring.datasource.druid.validation-query=SELECT 1
spring.datasource.druid.validation-query-timeout=30000
spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=false
#spring.datasource.druid.time-between-eviction-runs-millis=
#spring.datasource.druid.min-evictable-idle-time-millis=
#spring.datasource.druid.max-evictable-idle-time-millis=10000# Druid stat filter config
spring.datasource.druid.filters=stat,wall
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
# session 监控
spring.datasource.druid.web-stat-filter.session-stat-enable=true
spring.datasource.druid.web-stat-filter.session-stat-max-count=10
spring.datasource.druid.web-stat-filter.principal-session-name=admin
spring.datasource.druid.web-stat-filter.principal-cookie-name=admin
spring.datasource.druid.web-stat-filter.profile-enable=true
# stat 监控
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
spring.datasource.druid.filter.stat.db-type=mysql
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=1000
spring.datasource.druid.filter.stat.merge-sql=true
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=mysql
spring.datasource.druid.filter.wall.config.delete-allow=true
spring.datasource.druid.filter.wall.config.drop-table-allow=false# Druid manage page config
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.reset-enable=true
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
#spring.datasource.druid.stat-view-servlet.allow=
#spring.datasource.druid.stat-view-servlet.deny=
spring.datasource.druid.aop-patterns=cn.sevenyuan.demo.*
三、其他 mybatis 配置
本地工程,将 xml
文件放入 resources
资源文件夹下,所以需要加入以下配置,让应用进行识别:
<build><resources><resource><directory>src/main/resources</directory><includes><include>**/*</include></includes></resource></resources>...
</build>
通过上面的配置,我本地开启了三个页面的监控:SQL
、 URL
和 Sprint
监控,如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3y2mEQal-1611504815197)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
通过上面的配置,SpringBoot 很方便的就整合了 Druid 和 mybatis,同时根据在 properties
文件中配置的参数,开启了 Druid
的监控。
但我根据上面的配置,始终开启不了 session
监控,所以如果需要配置 session
监控或者调整参数具体配置,可以查看官方网站
整合 Redis
我用过 Redis
和 NoSQL
,但最熟悉和常用的,还是 Redis
,所以这里记录一下如何整合
一、引用 Redis 依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><artifactId>lettuce-core</artifactId><groupId>io.lettuce</groupId></exclusion></exclusions>
</dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>
二、参数配置
# redis 配置
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.max-wait=-1ms
spring.redis.jedis.pool.min-idle=0
三、代码使用
@Autowired
private RedisTemplate redisTemplate;@Autowired
private StringRedisTemplate stringRedisTemplate;@GetMapping("/testRedis")
public Book getForRedis() {ValueOperations<String, String> ops1 = stringRedisTemplate.opsForValue();ops1.set("name", "Go 语言实战");String name = ops1.get("name");System.out.println(name);ValueOperations ops2 = redisTemplate.opsForValue();Book book = (Book) ops2.get("b1");if (book == null) {book = new Book("Go 语言实战", 2, "none name", BigDecimal.ONE);ops2.set("b1", book);}return book;
}
这里只是简单记录引用和使用方式,更多功能可以看这里:
发送 HTML 样式的邮件
之前也使用过,所以可以参考这篇文章:
一、引入依赖
<!-- mail -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
二、配置邮箱的参数
# mail
spring.mail.host=smtp.qq.com
spring.mail.port=465
spring.mail.username=xxxxxxxx
spring.mail.password=xxxxxxxx
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true
如果使用的是 QQ
邮箱,需要在邮箱的设置中获取授权码,填入上面的 password
中
三、写模板和发送内容
MailServiceImpl.java
@Autowired
private JavaMailSender javaMailSender;@Override
public void sendHtmlMail(String from, String to, String subject, String content) {try {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from);helper.setTo(to);helper.setSubject(subject);helper.setText(content, true);javaMailSender.send(message);} catch (MessagingException e) {System.out.println("发送邮件失败");log.error("发送邮件失败", e);}
}
mailtemplate.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>邮件</title>
</head>
<body>
<div th:text="${subject}"></div>
<div>书籍清单<table border="1"><tr><td>图书编号</td><td>图书名称</td><td>图书作者</td></tr><tr th:each="book:${books}"><td th:text="${book.id}"></td><td th:text="${book.name}"></td><td th:text="${book.author}"></td></tr></table>
</div>
</body>
</html>
test.java
@Autowired
private MailService mailService;@Autowired
private TemplateEngine templateEngine;@Test
public void sendThymeleafMail() {Context context = new Context();context.setVariable("subject", "图书清册");List<Book> books = Lists.newArrayList();books.add(new Book("Go 语言基础", 1, "nonename", BigDecimal.TEN));books.add(new Book("Go 语言实战", 2, "nonename", BigDecimal.TEN));books.add(new Book("Go 语言进阶", 3, "nonename", BigDecimal.TEN));context.setVariable("books", books);String mail = templateEngine.process("mailtemplate.html", context);mailService.sendHtmlMail("xxxx@qq.com", "xxxxxxxx@qq.com", "图书清册", mail);
}
通过上面简单步骤,就能够在代码中发送邮件,例如我们每周要写周报,统计系统运行状态,可以设定定时任务,统计数据,然后自动化发送邮件。
整合 Swagger (API 文档)
一、引入依赖
<!-- swagger -->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version>
</dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version>
</dependency>
二、配置 Swagger 参数
SwaggerConfig.java
@Configuration
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig {@BeanDocket docket() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("cn.sevenyuan.demo.controller")).paths(PathSelectors.any()).build().apiInfo(new ApiInfoBuilder().description("Spring Boot learn project").contact(new Contact("JingQ", "https://github.com/vip-augus", "=-=@qq.com")).version("v1.0").title("API 测试文档").license("Apache2.0").licenseUrl("http://www.apache.org/licenese/LICENSE-2.0").build());}
}
设置页面 UI
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60)
public class MyWebMvcConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}
}
通过这样就能够识别 @ApiOperation
等接口标志,在网页查看 API
文档,参考文档:Spring Boot实战:集成Swagger2
总结
这边总结的整合经验,只是很基础的配置,在学习的初期,秉着先跑起来,然后不断完善和精进学习。
而且单一整合很容易,但多个依赖会出现想不到的错误,所以在解决环境问题时遇到很多坑,想要使用基础的脚手架,可以尝试跑我上传的项目。
数据库脚本在 resources
目录的 test.sql
文件中
自己补充
1.以上的数据库连接可以使用springboot默认的
2.swagger文档可以使用最新的springboot整合swagger的那种配置
参考网址:
https://mp.weixin.qq.com/s/zxgSzME4gdvXo9FKSGaMfg
http://www.shaoming.club/archives/springboot%E6%95%B4%E5%90%88swaggermd
https://blog.csdn.net/shaoming314/article/details/109197986
下面是我的博客文章(我的博客网址www.shaoming.com)
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
通过这样就能够识别 `@ApiOperation` 等接口标志,在网页查看 `API` 文档,参考文档:Spring Boot实战:集成Swagger2------## 总结这边总结的整合经验,只是很基础的配置,在学习的初期,秉着先跑起来,然后不断完善和精进学习。而且单一整合很容易,但多个依赖会出现想不到的错误,所以在解决环境问题时遇到很多坑,想要使用基础的脚手架,可以尝试跑我上传的项目。数据库脚本在 `resources` 目录的 `test.sql` 文件中------# 自己补充1.以上的数据库连接可以使用springboot默认的2.swagger文档可以使用最新的springboot整合swagger的那种配置参考网址:https://mp.weixin.qq.com/s/zxgSzME4gdvXo9FKSGaMfg[http://www.shaoming.club/archives/springboot%E6%95%B4%E5%90%88swaggermd](http://www.shaoming.club/archives/springboot整合swaggermd)https://blog.csdn.net/shaoming314/article/details/109197986下面是我的博客文章(我的博客网址www.shaoming.com)http://www.shaoming.club/archives/springboot%E6%95%B4%E5%90%88%E6%96%B0%E7%89%88swaggerspringfox300%E7%89%88%E6%9C%ACmd
springboot知识点整理(2021)相关推荐
- SpringBoot知识点整理
目录 1.对SpringBoot的认识 1.1.什么是SpringBoot 1.2.SpringBoot解决了哪些痛点 1.3.SpringBoot有哪些特性 2. 入门案例 2.1.新建module ...
- Java进阶3 - 易错知识点整理(待更新)
Java进阶3 - 易错知识点整理(待更新) 该章节是Java进阶2- 易错知识点整理的续篇: 在前一章节中介绍了 ORM框架,中间件相关的面试题,而在该章节中主要记录关于项目部署中间件,监控与性能优 ...
- python基础知识点小结(2021/2/9)
python基础知识点小结(2021/2/9)持续更新中~~ 入门小知识 cmd 在cmd上进行python,直接输入 python\quad pythonpython 退出cmd输入 exit()\ ...
- java基础知识点整理一
java基础知识点整理一 引言 '''突然发觉任何一门语言的基础知识部分,都比较杂一些.如果个人经过梳理之后,知识体系系统化,可以让基础更加牢靠一些.但是还是会有一些遗忘.所以,我想把一些比较重要但是 ...
- 《Linux系统管理与应用》课程知识点整理+书后习题全文解答(Linux知识点大纲)
目录 第一章:Linux操作系统概述 知识点整理部分 课后习题与参考答案 第二章:Linux系统的环境搭建 知识点整理部分 课后习题与参考答案 第三章:Linux操作基础 知识点整理部分 课后习题与参 ...
- [知识点整理]中科院/国科大 自然语言处理nlp 期末考试知识点整理
本文为2022秋网安学院的自然语言处理课程期末复习知识点整理,水平有限,整理的答案可能有错误或遗漏,欢迎大家指正. 文章的第二部分内容参考了学校学姐的文章,文章写的很好,大家可以关注她:(133条消息 ...
- C语言考研复试知识点整理
C语言考研复试知识点整理 1.由float x=3e-6,y=3e-6;不能得到x= =y的逻辑值为真. 解析:float类型的变量只能进行>或<运算,不能进行==运算 2.自增和自减运算 ...
- 【Android 面试基础知识点整理】
针对Android面试中常见的一些知识点整理,Max 仅仅是个搬运工.感谢本文中引用文章的各位作者,给大家分享了这么多优秀文章.对于当中的解析,是原作者个人见解,有错误和不准确的地方,也请大家积极指正 ...
- mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎
MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...
最新文章
- Office WORD如何设置表格背景颜色
- 数字经济时代,什么是关键资源?(算力篇)
- php中如何让这段东西不显示出来,数据显示处理,该怎么处理
- java final 方法重载_java方法重载和覆写的定义,static和final修饰符的讲解,java面试题...
- 容器编排技术 -- Kubernetes Pod概述
- 资源放送丨《Oracle PDB Refresh实战分享》PPT视频
- mysql安装版卸载_MYSQL安装与卸载(一)
- cart算法_【统计学】决策树模型大比拼!ID3/C4.5/CART算法哪个更好用?
- 基于CSS3的3D旋转效果
- FilterAttribute过滤器的 执行顺序
- 如何用饼状图显示数据
- 每天一个RL基础理论(7)——总结篇
- ZR1012 Zbox loves keyboard (dp)
- 将淘宝爬取的数据写入Excel表格
- win10计算机管理的作用,原来Windows 10还有这么多隐藏的功能
- Android手势下拉抽屉效果
- LINUX去掉“哔哔叫”的方法
- 食物链(带权并查集)
- redis数据结构及其应用场景
- Detect-SLAM阅读笔记