Demo 脚手架项目地址:
https://github.com/Vip-Augus/springboot-note
Table of Contents generated with DocToc
- SpringBoot 速记构建项目SpringBoot 基础配置Spring Boot Starters@SpringBootApplicationWeb 容器配置常规配置HTTPS 配置@ConfigurationPropertiesProfile@ControllerAdvice 用来处理全局数据@ExceptionHandler 错误处理@ModelAttribute 视图属性CORS 支持,跨域资源共享注册 MVC 拦截器开启 AOP 切面控制整合 Mybatis 和 Druid一、添加 mybatis 和 druid 依赖二、配置数据库和连接池参数三、其他 mybatis 配置整合 Redis一、引用 Redis 依赖二、参数配置三、代码使用发送 HTML 样式的邮件一、引入依赖二、配置邮箱的参数三、写模板和发送内容整合 Swagger (API 文档)一、引入依赖二、配置 Swagger 参数总结参考资料
构建项目
相比于使用 IDEA 的模板创建项目,我更推荐的是在 Spring 官网上选择参数一步生成项目
https://start.spring.io/
我们只需要做的事情,就是修改组织名和项目名,点击 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