idea springboot 无法run_2021 最新版 Spring Boot 速记教程
优质文章,及时送达
本文来源: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
在之前的可能需要通过以下几个步骤:
在
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 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}.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 错误处理
/*** 加强版控制器,拦截自定义的异常处理**/@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 速记教程相关推荐
- 2021 最新版 Spring Boot 速记教程
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 本文来源:http://r6d.cn/X6FP 结束了前面 ...
- 2021最新版 Spring Boot 速记教程(建议收藏)
点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 来源:http://r6d.cn/X6FP 结束了前面的<Spring 源码 ...
- Spring Boot 速记教程
SpringBoot 基础配置 Spring Boot Starters 引用自参考资料 1 描述: " starter的理念:starter 会把所有用到的依赖都给包含进来,避免了开发者自 ...
- springboot做网站_Github点赞接近 100k 的Spring Boot学习教程+实战项目推荐!
" 本文已经收录进:awesome-java (Github 上非常棒的 Java 开源项目集合) 很明显的一个现象,除了一些老项目,现在 Java 后端项目基本都是基于 Spring Bo ...
- Spring Boot 菜鸟教程 12 EasyPoi导出Excel下载
GitHub src="//ghbtns.com/github-btn.html?user=je-ge&repo=spring-boot&type=watch&cou ...
- Spring boot AML教程
Spring boot AML教程 Spring Boot 提供了大量的自动配置,极大地简化了spring 应用的开发过程,当用户创建了一个 Spring Boot 项目后,即使不进行任何配置,该项目 ...
- 全网Star最多「近20k」的Spring Boot开源教程 2019 年要继续更新了
点击蓝色"程序猿DD"关注我哟 从2016年1月开始写博客,默默地更新<Spring Boot系列教程>,从无人问津到千万访问,作为一个独立站点(http://blog ...
- 全网Star最多(近20k)的Spring Boot开源教程 2019 年要继续更新了!
从2016年1月开始写博客,默默地更新<Spring Boot系列教程>,从无人问津到千万访问,作为一个独立站点(http://blog.didispace.com),相信只有那些跟我一样 ...
- Spring Boot入门教程(四十):微信支付集成-刷卡支付
分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业 ...
最新文章
- winfrom gridview 导出到Excel文件的代码
- 《非暴力沟通》- 笔记
- java 参数 exception_java – 在异常的参数中使用泛型
- Linux负载均衡--LVS(IPVS)
- leetcode18. 四数之和(双指针)
- 值从哪里来_Linux used内存到底去哪里了呢?
- 基于CSE的微服务工程实践-多微服务框架演进
- 【kafka】Kafka中的动态配置源码分析
- Linux系统安装Oracle 10g
- 雷达的工作原理示意图_5张图1个视频,科普激光雷达工作原理
- vba批量合并指定的sheet_利用VBA实现多个Excel工作簿快速合并方法
- html图片指定refere,前端解决第三方图片防盗链的办法 - html referrer 访问图片资源 403 问题...
- Fractions to Decimals_usaco2.4.5_暴力
- 设置窗体显示在屏幕的位置
- Win10 电脑能够连接手机热点,但是不能上网。windows热点服务无法自动开启。
- 基于贝叶斯算法的邮件过滤管理系统的设计和实现(Vue+SpringBoot)
- 数据结构实验PTA 7-10 旅游规划 分数 25
- unity场景导入与简单场景搭建
- 关于Nginx配置缓存后文件夹中没有缓存文件
- Associated Domains 配置注意
热门文章
- Python中classmethod与staticmethod区别
- source环境变量命令千万不能乱用
- http和https的区别和联系
- python dict()函数(用于创建一个字典)
- 深度学习 点积的概念
- python mpl_toolkits.mplot3d.axes3d.Axes3D()使用 介绍
- python matplotlab在jupyter notebook中画图不显示怎么办?(%matplotlib inline)
- Redis实现发布与订阅(转)
- -i 可以编译添加多个_大咖说 | 基于 NXP i.MX8 eIQ 环境搭建和编译
- netty 管道和handler的加载和处理流程