SpringBoot與緩存、消息、檢索、任務、安全與監控

1、Spring抽象緩存

  1. Spring從3.1開始定義了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口來統一不一樣的緩存技術;並支持使用JCache(JSR-107)註解簡化開發。web

  2. Cache接口爲緩存的組件規範定義,包含緩存的各類操做集合。spring

  3. Cache接口下Spring提供了各類Cache的實現,如RedisCache、EhCacheCache、ConcurrentMapCache等。緩存

  4. 每次調用須要緩存功能的方法時,Spring會檢查指定參數的指定的目標方法是否已經被調用過;若是有就直接從緩存中獲取方法調用後的結果,若是沒有就調用方法並緩存結果後返回給用戶,下次直接從緩存中獲取。安全

2、緩存組件和註解

註解 說明
Cache 緩存接口,定義緩存操做。實現有:RedisCache、EhCacheCache、ConcurrentMapCache等。
CacheManager 緩存管理器,管理各類緩存組件
@Cacheable 主要針對方法配置,可以根據方法的請求參數對其結果進行緩存
@CacheEvict 清空緩存
@CachePut 保證方法被調用的時候講結果緩存
@EnableCaching 開啓基於註解的緩存
keyGenerator 緩存數據時key生成策略
Serialize 緩存數據時value序列化策略

3、@Cacheable/@CachePut/@CacheEvict主要參數

參數 說明 例子
value 緩存的名稱,在Spring配置文件中定義,必須指定至少一個 @Cacheable(value="mycache")或者@Cacheable(value={"cache1","cache2"})
key 緩存的key,能夠爲空,若是指定要按照SpEL表達式編寫,若是不指定,則缺省按照方法的全部參數進行組合 @Cache(value="testCache",key="#userName")
condition 緩存的條件,能夠爲空,使用SpEL編寫,返回true或者false,只有爲true才進行緩存/清除緩存 @Cacheable(value="testCache",condition="#userName")
allEntries(@(CacheEvict)) 是否清空全部緩存內容,缺省爲false,若是指定爲true,則方法調用後將當即清空全部緩存 @CacheEvict(value="testCache",allEntries=true)
beforeInvocation(@CacheEvict) 是否在方法執行前就清空,缺省爲false,若是指定爲true,則方法在尚未執行的時候就會清空緩存,缺省狀況下,若是方法執行拋出異常,則不會清空緩存 @CacheEvict(value="testCache",beforeInvocation=true)

4、Spring對消息的支持

  1. spring-jms提供了對JMS的支持。
  2. spring-rabbit提供了對AMQP的支持。
  3. 須要ConnectionFactory的實現來鏈接消息代理.
  4. 提供JmsTemplate、RabbitTemplate來發送消息。
  5. @JmsListener(JMS)、@RabbitListener(AMQP)註解在方法上監聽消息代理髮布的消息。
  6. @EnableJms、@EnableRabbit開啓支持。
  7. 使用JmsAutoConfiguration、RabbitAutoConfiguration進行自動配置

5、Spring與檢索

SpringBoot經過整合Spring Data ElasticSearch提供了很是便捷的檢索功能支持。springboot

  1. 引入spring-boot-starter-data-elasticsearch依賴。
  2. 安裝對應版本的ElasticSearch。
  3. 進行配置。
  4. 使用自動配置的ElasticSearchRepository、Client進行相應的操做。

6、Springboot與任務

1.異步任務

在Java應用中,絕大多數狀況下都是經過同步的方式來實現交互處理的;可是在處理與第三方系統交互的時候,容易形成響應遲緩的狀況,以前大部分都是使用多線程來完成此類任務,其實,在Spring 3.x以後,就已經內置了@Async來解決這個問題。
@EnableAsync註解開啓異步支持。
@Async標識這是一個異步執行的方法。多線程

2. 定時任務

Spring提供了異步任務調度的方式,提供了TaskExecutor、TaskScheduler接口。
@EnableScheduling 啓用定時任務支持。
@Schedlued 標識定時任務。
任務的調用時間使用cron表達式進行指定。app

Cron表達式說明框架

字段 容許值 容許的特殊字符
0-59 , - * /
0-59 , - * /
小時 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12或者JAN-DEC , - * /
星期 1-7或者SUN-SAT , - * ? / L C #
年(可選) 空,1970-2099 , - * /

特殊字符含義說明異步

特殊字符 含義
, 枚舉
- 區間
* 任意
/ 步長
? 日/星期衝突匹配
L 最後
W 工做日
C 和calender聯繫後計算過的值
# 星期,4#2 表示第二個星期三

3. 郵件任務

  • 郵件發送依賴於spring-boot-starter-mail。
  • 使用MailSenderAutoConfiguration進行自動配置。
  • 定義MailProperties內容,配置在application.yml中。
  • 自動裝配JavaMailSender。

7、SpringBoot與安全

1.安全

Spring Security是針對Spring項目的安全框架,也是SpringBoot底層安全模塊默認的技術選型。它能夠實現強大的web安全控制。對於安全控制,只須要引入spring-boot-starter-security模塊,進行少許的配置便可。
@EnableWebSecurity 開啓WebSecurity模式
WebSecurityConfigurerAdapter 自定義Security策略。
AuthenticationManagerBuilder 自定義認證策略。elasticsearch

  • "認證",是創建一個它聲明的主體的過程(一個「主體」,通常是值用戶,設備或一些能夠在程序中執行動做的其餘系統)。
  • "受權",指肯定一個主體是否容許在應用程序執行一個動做的過程。爲了抵達須要受權的點,主體的身份已經有認證過程創建。

2.Web安全

  1. CSRF(Cross-site request forgery)跨站請求僞造。
    • HttpSecurity啓用csrf功能。
  2. 登陸/註銷
    • HttpSecurity配置
  3. remember me(記住我)
    • 表單添加remember-me的checkbox
    • 配置啓用remember-me功能
  4. Thymeleaf提供的SpringSecurity標籤支持
    • 須要引入thymeleaf-extras-springsecurity4
    • sec:authentication="name" 獲取當前用戶的用戶名。
    • sec:authorize="hasRole('ADMIN')" 當前用戶必須擁有ADMIN權限時纔會顯示標籤內容。

8、SpringBoot與監控管理

1. 監控管理

經過引入spring-boot-starter-actuator,可使用SpringBoot爲咱們提供的標準生產環境下的應用監控和管理功能,能夠經過HTTP、JMX、SSH協議來進行操做,自動獲得審計、健康指標信息等。

監控和管理端點
端點名|描述
:-|:-
actuator|全部Endpoint端點,需加入spring HATEOAS支持
autoconfig|全部自動配置的信息
beans|全部Bean的信息
configprops|全部配置屬性
dump|線程狀態信息
env|當前環境信息
health|應用健康情況
info|當前應用信息
metrics|應用的各項指標
mappings|應用@RequestMapping映射路徑
shutdown|關閉當前應用(默認關閉)
trace|追蹤信息(最新的http請求)

2. 定製端點信息

  • 定製端點通常經過endpoints+端點名+屬性名來設置。
  • 修改端點id(endpoints.beans.id=mybeans)
  • 開啓遠程應用關閉功能(endpoints.shutdown.enabled = false)
  • 關閉端點(endpoints.beans.enabled=false)
  • 開啓所需端點
    • endpoints.enabled=false
    • endpoints.beans.enabled=true
  • 定製端點訪問路徑(management.context-path=/manager)
  • 關閉http端點(management.port=-1)
相關文章
相關標籤/搜索