优质文章,及时送达

本文来源:http://r6d.cn/X6FP

结束了前面的《Spring 源码深度学习》,八月给自己放松了一下,看了几本小说和电视剧,还有写一个工作中用到的小工具,周报数据渲染的前端界面(前端是真的难)。

当然技术上的学习也要注意,所以看了松哥写的《Spring Boot + Vue 全栈开发》,来系统学习 SpringBoot,下面是简单的速记,根据使用场景可以快速定位到知识点:

Demo脚手架项目地址:

https://github.com/Vip-Augus/springboot-note

Table of Contentsgenerated 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。

我们只需要做的事情,就是修改组织名和项目名,点击 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

在之前的可能需要通过以下几个步骤:

  1. pom文件引入特定版本的redis

  2. .properties文件中配置参数

  3. 根据参数,新建一个又一个 jedis连接

  4. 定义一个工具类,手动创建连接池来管理

经历了上面的步骤,我们才能正式使用 Redis

但在 Spring Boot中,一切因为Starter变得简单

  1. pom文件中引入spring-boot-starter-data-redis

  2. .properties文件中配置参数

通过上面两个步骤,配置自动生效,具体生效的 beanRedisAutoConfiguration,自动配置类的名字都有一个特点,叫做xxxAutoConfiguration

可以来简单看下这个类:

@Configuration@ConditionalOnClass(RedisOperations.class)@EnableConfigurationProperties(RedisProperties.class)@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })public class RedisAutoConfiguration {

@Bean@ConditionalOnMissingBean(name = "redisTemplate")public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {RedisTemplate 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先留个坑(●´∀`●)ノ)

@Autowiredprivate 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 customs;...}application.propertiesspring.datasource.initialSize=5spring.datasource.minIdle=5spring.datasource.maxActive=20spring.datasource.customs=test1,test2,test3

其中,如果对象是列表结构,可以在配置文件中使用 , 逗号进行分割,然后注入到相应的属性中。

Profile

使用该属性,可以快速切换配置文件,在 SpringBoot默认约定中,不同环境下配置文件名称规则为application-{profile}.propertieprofile占位符表示当前环境的名称。

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 错误处理

/*** 加强版控制器,拦截自定义的异常处理**/@ControllerAdvicepublic 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 视图属性

@ControllerAdvicepublic class CustomModelAttribute {

//@ModelAttribute(value = "info")public Map userInfo throws IOException {Map map = new HashMap<>;map.put("test

idea springboot 无法run_2021 最新版 Spring Boot 速记教程相关推荐

  1. 2021 最新版 Spring Boot 速记教程

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 本文来源:http://r6d.cn/X6FP 结束了前面 ...

  2. 2021最新版 Spring Boot 速记教程(建议收藏)

    点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 来源:http://r6d.cn/X6FP 结束了前面的<Spring 源码 ...

  3. Spring Boot 速记教程

    SpringBoot 基础配置 Spring Boot Starters 引用自参考资料 1 描述: " starter的理念:starter 会把所有用到的依赖都给包含进来,避免了开发者自 ...

  4. springboot做网站_Github点赞接近 100k 的Spring Boot学习教程+实战项目推荐!

    " 本文已经收录进:awesome-java (Github 上非常棒的 Java 开源项目集合) 很明显的一个现象,除了一些老项目,现在 Java 后端项目基本都是基于 Spring Bo ...

  5. Spring Boot 菜鸟教程 12 EasyPoi导出Excel下载

    GitHub src="//ghbtns.com/github-btn.html?user=je-ge&repo=spring-boot&type=watch&cou ...

  6. Spring boot AML教程

    Spring boot AML教程 Spring Boot 提供了大量的自动配置,极大地简化了spring 应用的开发过程,当用户创建了一个 Spring Boot 项目后,即使不进行任何配置,该项目 ...

  7. 全网Star最多「近20k」的Spring Boot开源教程 2019 年要继续更新了

    点击蓝色"程序猿DD"关注我哟 从2016年1月开始写博客,默默地更新<Spring Boot系列教程>,从无人问津到千万访问,作为一个独立站点(http://blog ...

  8. 全网Star最多(近20k)的Spring Boot开源教程 2019 年要继续更新了!

    从2016年1月开始写博客,默默地更新<Spring Boot系列教程>,从无人问津到千万访问,作为一个独立站点(http://blog.didispace.com),相信只有那些跟我一样 ...

  9. Spring Boot入门教程(四十):微信支付集成-刷卡支付

    分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业 ...

最新文章

  1. winfrom gridview 导出到Excel文件的代码
  2. 《非暴力沟通》- 笔记
  3. java 参数 exception_java – 在异常的参数中使用泛型
  4. Linux负载均衡--LVS(IPVS)
  5. leetcode18. 四数之和(双指针)
  6. 值从哪里来_Linux used内存到底去哪里了呢?
  7. 基于CSE的微服务工程实践-多微服务框架演进
  8. 【kafka】Kafka中的动态配置源码分析
  9. Linux系统安装Oracle 10g
  10. 雷达的工作原理示意图_5张图1个视频,科普激光雷达工作原理
  11. vba批量合并指定的sheet_利用VBA实现多个Excel工作簿快速合并方法
  12. html图片指定refere,前端解决第三方图片防盗链的办法 - html referrer 访问图片资源 403 问题...
  13. Fractions to Decimals_usaco2.4.5_暴力
  14. 设置窗体显示在屏幕的位置
  15. Win10 电脑能够连接手机热点,但是不能上网。windows热点服务无法自动开启。
  16. 基于贝叶斯算法的邮件过滤管理系统的设计和实现(Vue+SpringBoot)
  17. 数据结构实验PTA 7-10 旅游规划 分数 25
  18. unity场景导入与简单场景搭建
  19. 关于Nginx配置缓存后文件夹中没有缓存文件
  20. Associated Domains 配置注意

热门文章

  1. Python中classmethod与staticmethod区别
  2. source环境变量命令千万不能乱用
  3. http和https的区别和联系
  4. python dict()函数(用于创建一个字典)
  5. 深度学习 点积的概念
  6. python mpl_toolkits.mplot3d.axes3d.Axes3D()使用 介绍
  7. python matplotlab在jupyter notebook中画图不显示怎么办?(%matplotlib inline)
  8. Redis实现发布与订阅(转)
  9. -i 可以编译添加多个_大咖说 | 基于 NXP i.MX8 eIQ 环境搭建和编译
  10. netty 管道和handler的加载和处理流程