一、Spring抽象緩存
Spring從3.1開始定義了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口來統(tǒng)一不同的緩存技術(shù);并支持使用JCache(JSR-107)注解簡化開發(fā)。
Cache接口為緩存的組件規(guī)范定義,包含緩存的各種操作集合。
Cache接口下Spring提供了各種Cache的實現(xiàn),如RedisCache、EhCacheCache、ConcurrentMapCache等。
每次調(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對消息的支持
- spring-jms提供了對JMS的支持。
- spring-rabbit提供了對AMQP的支持。
- 需要ConnectionFactory的實現(xiàn)來連接消息代理.
- 提供JmsTemplate、RabbitTemplate來發(fā)送消息。
- @JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上監(jiān)聽消息代理發(fā)布的消息。
- @EnableJms、@EnableRabbit開啟支持。
- 使用JmsAutoConfiguration、RabbitAutoConfiguration進行自動配置
五、Spring與檢索
SpringBoot通過整合Spring Data ElasticSearch提供了非常便捷的檢索功能支持。
- 引入spring-boot-starter-data-elasticsearch依賴。
- 安裝對應(yīng)版本的ElasticSearch。
- 進行配置。
- 使用自動配置的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安全
- CSRF(Cross-site request forgery)跨站請求偽造。
- HttpSecurity啟用csrf功能。
- 登錄/注銷
- HttpSecurity配置
- remember me(記住我)
- 表單添加remember-me的checkbox
- 配置啟用remember-me功能
- 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)