/spring-boot-cloud-note

:tada::tada:包含了spring cloud系列的学习路线,新增注解,典型疑问解答

Primary LanguageJava

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。它已经成为地球上最热门的技术之一。

直接看spring cloud笔记

推荐图书

1.application.yml和bootstrap.yml区别?

bootstrap.yml可以理解成系统级别的一些参数配置,这些参数一般是不会变动的
application.yml 可以用来定义应用级别的,如果搭配spring-cloud-config使用 application.yml里面定义的文件可以实现动态替换

2.springboot新增改进注解

注解 版本 描述
@Resource - 规范
@PostConstruct - JavaEE5规范
@PreDestroy - JavaEE5规范
@Autowired 2.5
@Qualifier 2.5 新改进特性:可以单独在方法中使用
@Required 2.0
@Scope 2.5
@Value 3.0
@PropertySource 3.1 加载属性文件,绑定值,必须使用properties文件
@PropertySources 4.0 PropertySource的集合形式
@Repository 2.0
@Service 2.5
@Component 2.5
@Bean 3.0 生产bean
@DependsOn 3.0 控制依赖bean加载顺序
@Lazy 3.0 Bean懒加载
@Import 3.0 可导入Configuration、component classes、 ImportSelector、ImportResource
@ImportResource 3.0 导入XML配置文件
@Primary 3.0 在自动装配时这个bean应该优先当多个候选人资格(相同类型的bean)
@ComponentScan 3.1 扫描包,可定义@Filter
@Filter 3.1 扫描包过滤配置
@Configuration 3.0 表明这个是可以声明一个或多个@Bean的配置类
@ActiveProfiles 3.1 >单元测试中指定环境变量
@Profile 3.1 多环节
@SpringBootApplication 1.2.0 表明这是一个spring-boot启动类,等价于@Configuration,@ComponentScan,@EnableAutoConfiguration
@SpringBootConfiguration 1.4.0 表明这个类提供了spring-boot启动应用程序
@EnableAutoConfiguration 1.3.0 启用自动配置Spring应用程序上下文,它自动根据您的类路径来获取spi(spring.factories)中这些的bean的定义。
@ConfigurationProperties 1.3.0 绑定属性值,适用于类或方法(第三方组件),支持javax.validation注解校验
@EnableConfigurationProperties 1.3.0 开启对@ConfigurationProperties注解配置Bean的支持
@ConfigurationPropertiesBinding 1.3.0 ConfigurationProperties绑定属性时属性转换
@AutoConfigureAfter 1.3.0 auto-configuration
@AutoConfigureBefore 1.3.0 auto-configuration
@AutoconfigureOrder 1.3.0 auto-configuration
@Conditional 4.0 该类下面的所有@Bean都会启用配置
@ConditionalOnClass 1.3.0 某个class位于类路径上,才会实例化一个Bean
@ConditionalOnMissingClass 1.3.0 某个class类路径上不存在的时候,才会实例化一个Bean
@ConditionalOnBean 1.3.0 Bean条件
@ConditionalOnMissingBean 1.3.0 反之
@ConditionalOnProperty 1.1.0 Property条件
@ConditionalOnResource 1.3.0 Resource条件
@ConditionalOnWebApplication 1.3.0 WebApplication条件
@ConditionalOnNotWebApplication 1.3.0 反之
@ConditionalOnExpression 1.3.0 SpEL表达式条件
@ConditionalOnJndi 1.2.0 基于JNDI的可用性相匹
@ConditionalOnJava 1.1.0 指定JVM版本
@ConditionalOnCloudPlatform 1.5.0 指定的云平台
@EnableAsync 3.1 异步任务的启用
@Async 3.0 异步任务方法或者异步类
@EnableScheduling 3.1 计划任务的启用
@Scheduled 3.0 声明这是一个计划任务,方法返回类型为void,支持cron、fixDelay、fixRate
@EnableWebSocketMessagetBroker 4.0 webSocket启用
@MessageMapping 4.0 websocket
@EnableAspectJAutoProxy 3.1 AOP启用
@Aspect - aspectj
@PointCut - aspectj
@Before - aspectj
@After - aspectj
@Around - aspectj
@AfterReturning - aspectj
@AfterThrowing - aspectj
@EnableCaching 3.1 缓存启用
@Cacheable 3.1 对其结果进行缓存
@Caching 3.1 组合多个Cache注解使用
@CacheEvict 3.1 根据一定的条件对缓存进行清空
@CachePut 3.1 和 @Cacheable 不同的是,它每次执行前不会去检查缓存,都会触发真实方法的调用
@CacheConfig 4.1 类级别的注解,对词重复(方法多次指定cacheNames的)定义的改进
@Controller 2.5
@RequestMapping 2.5
@ControllerAdvice 3.2 方法将应用于所有控制器,可以结合@ExceptionHandler、@InitBinder、@ModelAttribute使用
@RestControllerAdvice 4.3 为ControllerAdvice和ResponseBody的组合体
@CookieValue 3.0
@SessionAttributes 2.5
@SessionAttribute 4.3 将方法参数绑定到一个会话属性
@CrossOrigin 4.2 ajax跨域
@ExceptionHandler 3.0 处理异常的具体处理程序类和/或处理程序方法
@ResponseStatus 3.1 标志着一个方法或异常类状态应该返回
@MatrixVariable 3.2 矩阵变量绑定参数(Map型参数)如:/path;name=value;name2=value2
@InitBinder 2.5 WebDataBinder用来自动绑定前台参数到mdel中
@ModelAttribute 2.5
@RequestMapping 2.5
@RequestAttribute 4.3 将方法参数绑定到请求属性
@RequestParam 2.5
@PathVariable 3.0
@RequestBody 3.0
@ResponseBody 3.0
@RequestHeader 3.0
@RequestPart 3.1 绑定“multipart/form-data”参数
@WebAppConfiguration 3.2 @WebAppConfiguration
@EnableWebMvc 3.1 开启Web Mvc支持
@RestController 4.0 为@Controller和@ResponseBody组合体
@ServletComponentScan 1.3.0 注入@WebServlet,@WebFilter,@WebListener的类
@GetMapping 4.3 组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写
@PostMapping 4.3 同上
@PutMapping 4.3 同上
@DeleteMapping 4.3 同上
@PatchMapping 4.3 同上
@JsonComponent 1.4.0 自定义JSON序列化器和反序列化器
@EnableTransactionManagement 3.1 事务启用
@Transactional 1.2
@NoRepositoryBean ? JPA
@EnableJpaRepositories ? JPA
@EntityScan 1.4.0 JPA
@Entity ? JPA
@Embeddable ? JPA
@MappedSuperclass ? JPA
@NodeEntity ? Neo4j
@EnableNeo4jRepositories ? Neo4j
@SolrDocument ? Solr
@Document ? Elasticsearch
@ManagementContextConfiguration 1.3.0 Actuator模块
@ExportMetricWriter 1.3.0 Actuator模块
@ExportMetricReader 1.3.0 Actuator模块
@EnableMBeanExport 3.2 JMX Mbean启用
@ManagedResource 1.2 类的所有实例标识为JMX受控资源
@ManagedOperation 1.2 将方法标识为JMX操作
@ManagedAttribute 1.2 将getter或者setter标识为部分JMX属性
@ManagedOperationParameter 1.2 定义操作参数说明
@ManagedOperationParameters 1.2 定义操作参数说明
@EnableSpringSecurity ? 开启spring seccurity支持
@EnableGlobalMethodSecurity ? 启用'basic'认证
@EnableAuthorizationServer ? oauth2 access tokens
@EnableOAuth2Client ? 安全
@EnableOAuth2Sso ? 安全
@EnableIntegration ? 启用spring-boot-starter-integration基于消息和其他传输协议的抽象,比如HTTP,TCP等
@EnableJms ? 开启JMS支持
@JmsListener ? 创建一个监听者端点,默认是支持事务性的
@EnableRabbit ? 开启Rabbit支持(AMQP)
@RabbitListener ? 创建一个监听者端点
@ContextConfiguration 2.5 集成化测试中定义加载及配置ApplicationContext。
Spring 3.1之前,只有基于路径的资源位置(通常是XML配置文件)的支持,Spring 4.0.4
@SpringBootTest 1.4.0 Test模块,并添加
@RunWith(SpringRunner.class)
@TestConfiguration 1.4.0 类似@Configuration
@TestComponent 1.4.0 类似@Component
@LocalServerPort 1.4.0 用于注入测试用例实际使用的端口
@MockBean 1.4.0 需Mock的bean
@SpyBean 1.4.0 获得代理对象相当于Mockito.spy(MethodTest.class)
@JsonTest 1.4.0 测试对象JSON序列化和反序列化是否工作正常
@AutoConfigureJsonTesters 1.4.0 启用和配置的JSON的自动测试
@WebMvcTest 1.4.0 检测单个Controller是否工作正常
@AutoConfigureMockMvc 1.4.0 注解一个non-@WebMvcTest的类
@DataJpaTest 1.4.0 JPA测试
@AutoConfigureTestEntityManager 1.4.0 JPA
@AutoConfigureTestDatabase 1.4.0 真实DB/嵌入DB
@RestClientTest 1.4.0 针对rest客户端测试
@AutoConfigureRestDocs 1.4.0 开启了restdocs生成snippets文件,并指定了存放位置

3.@ConfigurationProperties vs @Value?

@ConfigurationProperties @Value
功能 批量注入配置文件中属性 一个个指定
松散绑定 Yes No
SpEL表达式 No Yes
JSR303数据校验 Yes No
复杂类型封装 Yes No
Configuration Metadata
配置项友好提示
Yes NO
Relaxed(松散绑定)绑定,Environment属性名和bean属性名不需要精确匹配。

属性说明
person.firstName标准驼峰规则
person.first-name虚线表示,推荐用于.properties和.yml文件中
person.first_name下划线表示,用于.properties和.yml文件的可选格式
PERSON_FIRST_NAME 大写形式,使用系统环境变量时推荐

4.@Configuration vs Auto-configuration?

@Configuration替代xml来定义BeanDefinition的一种手段。Auto-configuration也是定义BeanDefinition的一种手段,也就是spring spi(META-INF/spring.factories)读取出来的key为org.springframework.boot.autoconfigure.EnableAutoConfiguration的配置类,简称为EnableAutoConfiguration加载。
这两者的相同之处有:
1.都是使用@Configuration注解的类,这些类里都可以定义@Bean、@Import、@ImportResource。
2.都可以使用@Condition来根据情况选择是否加载
而不同之处有:
1.加载方式不同:普通@Configuration则是通过扫描package path加载的,Auto-configuration的是通过读取classpath
:META-INF/spring.factories中EnableAutoConfiguration
2.加载顺序不同,普通@Configuration的加载永远在Auto-configuration之前
3.内部加载顺序可控上的不同:普通@Configuration则无法控制加载顺序,Auto-configuration可以使用@AutoConfigureOrder、@AutoConfigureBefore、@AutoConfigureAfter

5.常用对象及源码分析系列

首先如果你对spring3.x或2.x系列源码不太熟悉,spring boot的源码可能对你而言非常难,不过你也大可不必为此而烦恼,本来度源码讲究的就是领悟力,不一定要全部掌握的。

AbstractApplicationContext
AnnotationConfigApplicationContext
AnnotatedBeanDefinitionReader
ClassPathBeanDefinitionScanner
EventPublishingRunListener
SimpleApplicationEventMulticaster
ApplicationStartedEvent / ApplicationEnvironmentPreparedEvent / ApplicationFailedEvent
JarLaucher(spring boot的从这向下关注)
Archive
SpringApplication
SpringFactoriesLoader
ApplicationContextInitializer
ConfigurationClassPostProcessor
AnnotationConfigServletWebServerApplicationContext
.....

6.配置属性系列

配置属性系列查看

  • 8.1 server
  • 8.1.1 server
  • 8.1.2 cookie / session
  • 8.1.3 tomcat
  • 8.1.4 undertow
  • 8.1.3 ssl
  • 8.2 MVC
  • 8.2.1 MVC
  • 8.2.2 http
  • 8.2.3 view
  • 8.2.4 multipart
  • 8.2.5 json
  • 8.2.6 resource
  • 8.2.7 messages
  • 8.2.8 freemarker
  • 8.2.9 velocity
  • 8.2.10 thymeleaf
  • 8.2.11 mustcache
  • 8.2.12 jersey
  • 8.2.13 mobile
  • 8.2.14 groovy
  • 8.3 datasource
  • 8.3.1 datasource
  • 8.3.2 JPA
  • 8.3.3 jooq
  • 8.3.4 h2
  • 8.3.4 JTA
  • 8.4 cache
  • 8.5 redis
  • 8.6 mongodb
  • 8.7 springdata
  • 8.8 mq
  • 8.8.1 rabbitmq
  • 8.8.2 activemq
  • 8.8.3 jms
  • 8.9 spring security
  • 8.10 其他
  • 8.10.1 aop
  • 8.10.2 application
  • 8.10.3 autoconfig
  • 8.10.4 batch
  • 8.10.5 jmx
  • 8.10.6 mail
  • 8.10.7 sendgrid
  • 8.10.8 social