SpringBoot與緩存、消息、檢索、任務(wù)、安全與監(jiān)控

一、Spring抽象緩存

  1. Spring從3.1開始定義了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口來統(tǒng)一不同的緩存技術(shù);并支持使用JCache(JSR-107)注解簡化開發(fā)。

  2. Cache接口為緩存的組件規(guī)范定義,包含緩存的各種操作集合。

  3. Cache接口下Spring提供了各種Cache的實現(xiàn),如RedisCache、EhCacheCache、ConcurrentMapCache等。

  4. 每次調(diào)用需要緩存功能的方法時,Spring會檢查指定參數(shù)的指定的目標(biāo)方法是否已經(jīng)被調(diào)用過;如果有就直接從緩存中獲取方法調(diào)用后的結(jié)果,如果沒有就調(diào)用方法并緩存結(jié)果后返回給用戶,下次直接從緩存中獲取。

二、緩存組件和注解

注解 說明
Cache 緩存接口,定義緩存操作。實現(xiàn)有:RedisCache、EhCacheCache、ConcurrentMapCache等。
CacheManager 緩存管理器,管理各種緩存組件
@Cacheable 主要針對方法配置,能夠根據(jù)方法的請求參數(shù)對其結(jié)果進行緩存
@CacheEvict 清空緩存
@CachePut 保證方法被調(diào)用的時候講結(jié)果緩存
@EnableCaching 開啟基于注解的緩存
keyGenerator 緩存數(shù)據(jù)時key生成策略
Serialize 緩存數(shù)據(jù)時value序列化策略

三、@Cacheable/@CachePut/@CacheEvict主要參數(shù)

參數(shù) 說明 例子
value 緩存的名稱,在Spring配置文件中定義,必須指定至少一個 @Cacheable(value="mycache")或者@Cacheable(value={"cache1","cache2"})
key 緩存的key,可以為空,如果指定要按照SpEL表達式編寫,如果不指定,則缺省按照方法的所有參數(shù)進行組合 @Cache(value="testCache",key="#userName")
condition 緩存的條件,可以為空,使用SpEL編寫,返回true或者false,只有為true才進行緩存/清除緩存 @Cacheable(value="testCache",condition="#userName")
allEntries(@(CacheEvict)) 是否清空所有緩存內(nèi)容,缺省為false,如果指定為true,則方法調(diào)用后將立即清空所有緩存 @CacheEvict(value="testCache",allEntries=true)
beforeInvocation(@CacheEvict) 是否在方法執(zhí)行前就清空,缺省為false,如果指定為true,則方法在還沒有執(zhí)行的時候就會清空緩存,缺省情況下,如果方法執(zhí)行拋出異常,則不會清空緩存 @CacheEvict(value="testCache",beforeInvocation=true)

四、Spring對消息的支持

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

五、Spring與檢索

SpringBoot通過整合Spring Data ElasticSearch提供了非常便捷的檢索功能支持。

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

六、Springboot與任務(wù)

1.異步任務(wù)

在Java應(yīng)用中,絕大多數(shù)情況下都是通過同步的方式來實現(xiàn)交互處理的;但是在處理與第三方系統(tǒng)交互的時候,容易造成響應(yīng)遲緩的情況,之前大部分都是使用多線程來完成此類任務(wù),其實,在Spring 3.x之后,就已經(jīng)內(nèi)置了@Async來解決這個問題。
@EnableAsync注解開啟異步支持。
@Async標(biāo)識這是一個異步執(zhí)行的方法。

2. 定時任務(wù)

Spring提供了異步任務(wù)調(diào)度的方式,提供了TaskExecutor、TaskScheduler接口。
@EnableScheduling 啟用定時任務(wù)支持。
@Schedlued 標(biāo)識定時任務(wù)。
任務(wù)的調(diào)用時間使用cron表達式進行指定。

Cron表達式說明

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

特殊字符含義說明

特殊字符 含義
, 枚舉
- 區(qū)間
* 任意
/ 步長
? 日/星期沖突匹配
L 最后
W 工作日
C 和calender聯(lián)系后計算過的值
# 星期,4#2 表示第二個星期三

3. 郵件任務(wù)

  • 郵件發(fā)送依賴于spring-boot-starter-mail。
  • 使用MailSenderAutoConfiguration進行自動配置。
  • 定義MailProperties內(nèi)容,配置在application.yml中。
  • 自動裝配JavaMailSender。

七、SpringBoot與安全

1.安全

Spring Security是針對Spring項目的安全框架,也是SpringBoot底層安全模塊默認的技術(shù)選型。它可以實現(xiàn)強大的web安全控制。對于安全控制,只需要引入spring-boot-starter-security模塊,進行少量的配置即可。
@EnableWebSecurity 開啟WebSecurity模式
WebSecurityConfigurerAdapter 自定義Security策略。
AuthenticationManagerBuilder 自定義認證策略。

  • "認證",是建立一個它聲明的主體的過程(一個“主體”,一般是值用戶,設(shè)備或一些可以在程序中執(zhí)行動作的其他系統(tǒng))。
  • "授權(quán)",指確定一個主體是否允許在應(yīng)用程序執(zhí)行一個動作的過程。為了抵達需要授權(quán)的點,主體的身份已經(jīng)有認證過程建立。

2.Web安全

  1. CSRF(Cross-site request forgery)跨站請求偽造。
    • HttpSecurity啟用csrf功能。
  2. 登錄/注銷
    • HttpSecurity配置
  3. remember me(記住我)
    • 表單添加remember-me的checkbox
    • 配置啟用remember-me功能
  4. Thymeleaf提供的SpringSecurity標(biāo)簽支持
    • 需要引入thymeleaf-extras-springsecurity4
    • sec:authentication="name" 獲取當(dāng)前用戶的用戶名。
    • sec:authorize="hasRole('ADMIN')" 當(dāng)前用戶必須擁有ADMIN權(quán)限時才會顯示標(biāo)簽內(nèi)容。

八、SpringBoot與監(jiān)控管理

1. 監(jiān)控管理

通過引入spring-boot-starter-actuator,可以使用SpringBoot為我們提供的標(biāo)準生產(chǎn)環(huán)境下的應(yīng)用監(jiān)控和管理功能,可以通過HTTP、JMX、SSH協(xié)議來進行操作,自動得到審計、健康指標(biāo)信息等。

監(jiān)控和管理端點

端點名 描述
actuator 所有Endpoint端點,需加入spring HATEOAS支持
autoconfig 所有自動配置的信息
beans 所有Bean的信息
configprops 所有配置屬性
dump 線程狀態(tài)信息
env 當(dāng)前環(huán)境信息
health 應(yīng)用健康狀況
info 當(dāng)前應(yīng)用信息
metrics 應(yīng)用的各項指標(biāo)
mappings 應(yīng)用@RequestMapping映射路徑
shutdown 關(guān)閉當(dāng)前應(yīng)用(默認關(guān)閉)
trace 追蹤信息(最新的http請求)

2. 定制端點信息

  • 定制端點一般通過endpoints+端點名+屬性名來設(shè)置。
  • 修改端點id(endpoints.beans.id=mybeans)
  • 開啟遠程應(yīng)用關(guān)閉功能(endpoints.shutdown.enabled = false)
  • 關(guān)閉端點(endpoints.beans.enabled=false)
  • 開啟所需端點
    • endpoints.enabled=false
    • endpoints.beans.enabled=true
  • 定制端點訪問路徑(management.context-path=/manager)
  • 關(guān)閉http端點(management.port=-1)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容