緩存相關
重要概念&注解
使用步驟
引入spring-boot-starter-cache依賴
@EnableCaching
在SpringBoot啟動器上添加注解,開啟緩存。
@Cacheable
在方法上添加此注解,若不指定key則以傳入參數生成key,緩存該方法的返回參數。
@CacheEvict
在方法上添加此注解,若不指定key則以傳入參數生成key,刪除該緩存。
@CachePut
在方法上添加此注解,若不指定key則以傳入參數生成key,調用該方法后更新緩存。
使用redis緩存
引入spring-boot-starter-data-redis依賴,SpringBoot會自動切換
application.properties中添加redis主機地址:spring.redis.host=192.168.37.135
自定義使用redis
@Autowired
StringRedisTemplate stringRedisTemplate;//鍵值對都為String的操作器
@Autowired
RedisTemplate redisTemplate;//鍵值對都為對象的操作器,對象需繼承序列號接口
自定義RedisTemplate可實現不同的序列化方式,默認為jdk序列化方式。
添加自定義緩存管理器(需定義泛型),在service里添加@CacheConfig(cacheManager="")注解指定緩存管理器。
任務相關
異步任務
@Async
此注解標注在方法或類型上,可開啟異步處理。
定時任務
@EnableScheduling
在SpringBoot啟動器上添加注解,開啟定時任務。
@Scheduled
可以在方法和注解類型上添加注解,設置任務的定時規則。
郵件任務
引入spring-boot-starter-mail
配置application.properties
spring.mail.username=xxx@qq.com
spring.mail.password=xxxx
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.smtp.ssl.enable=true
注入郵件發送bean
@Autowired
JavaMailSenderImpl mailSender;
發送簡單郵件
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("這是主題");
message.setText("這是正文");
message.setTo("發送給@qq.com");
message.setFrom("接收到@qq.com");
mailSender.send(message);
發送帶附件的郵件
MimeMessage mimeMessage = this.mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject("這是主題");
helper.setText("<b style='color:red'>這是正文</b>", true);
helper.setTo("發送給@163.com");
helper.setFrom("接收到@qq.com");
helper.addAttachment("1.jpg", new File("C:\\Users\\sc\\Pictures\\1.jpg"));
helper.addAttachment("2.jpg", new File("C:\\Users\\sc\\Pictures\\2.jpg"));
this.mailSender.send(mimeMessage);
安全相關
SpringSecurity
引入jar包
spring-boot-starter-security
創建一個配置類,繼承WebSecurityConfigurerAdapter,需要注解@EnableWebSecurity開啟,重寫configure(HttpSecurity http)和configure(AuthenticationManagerBuilder auth)
//super.configure(http);//定制請求的授權規則
http.authorizeRequests().antMatchers("/").permitAll()
.antMatchers("/level1/**").hasRole("VIP1")
.antMatchers("/level2/**").hasRole("VIP2")
.antMatchers("/level3/**").hasRole("VIP3");
//開啟自動配置的登陸功能,效果,如果沒有登陸,沒有權限就會來到登陸頁面http.formLogin().usernameParameter("user").passwordParameter("pwd").loginPage("/userlogin");
//1、/login來到登陸頁
//2、重定向到/login?error表示登陸失敗
//3、更多詳細規定
//4、默認post形式的 /login代表處理登陸
//5、一但定制loginPage;那么 loginPage的post請求就是登陸
//開啟自動配置的注銷功能。
http.logout().logoutSuccessUrl("/");
//1、訪問 /logout 表示用戶注銷,清空session
//2、注銷成功會返回 /login?logout 頁面;
//開啟記住我功能
http.rememberMe().rememberMeParameter("remember");
//登陸成功以后,將cookie發給瀏覽器保存,以后訪問頁面帶上這個cookie,只要通過檢查就可以免登錄
//點擊注銷會刪除cookie
//該方法為增加可驗證的用戶,實際操作是從數據庫獲得,這里暫時放在內存,方便演示
auth.inMemoryAuthentication()
.whthUser("U1").password("P1").roles("R1")
.and()
.whthUser("U2").password("P2").roles("R2");
引入依賴
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
判斷是否已認證<div sec:authorize="isAuthenticated()">
獲取姓名<span sec:authentication="name"></span>,
獲取角色<span sec:authentication="principal.authorities"></span></h2>
根據角色判斷是否展示<div sec:authorize="hasRole('VIP1')">
參考鏈接:https://spring.io/guides/gs/securing-web/
消息隊列相關
安裝RabbitMQ
docker中運行RabbitMQ服務
在網頁管理端可進行交換器的創建與消息隊列的創建與綁定。
交換器路由鍵,不同的隊列
配置application.properties
spring.rabbitmq.host=118.24.44.169
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#虛擬地址
#spring.rabbitmq.virtual-host=
發送消息
@Autowired
RabbitTemplate rabbitTemplate;
this.rabbitTemplate.convertAndSend("exchange.direct", "test.tests","this is a message");
接受消息
Object o = this.rabbitTemplate.receiveAndConvert("test.tests");
System.out.println(o.getClass());
System.out.println(o);
使用json序列化方式
使用步驟
@EnableRabbit
在SpringBoot啟動器上添加注解,開啟基于注解的RabbitMQ模式。
@RabbitListener(queues="test.tests")//在方法上添加該注解,接受該消息并處理。
public void receive(Book book){
System.out.println(book);
}
public void receive(Message message){
System.out.println(message.getBody());
System.out.println(message.getMessageProperties());
}
@Autowired
AmqpAdmin amqpAdmin;//通過這個類進行交換器與隊列的管理
檢索相關
安裝Elasticsearch
docker中安裝運行Elasticsearch服務,限制內存大小256MB(默認為2G)。
操作請求
地址:http://localhost:9200/testGroup/employee/1
GET請求
查詢文檔
PUT請求
添加文檔
{
請求體
}
DELETE請求
刪除文檔
HEAD請求(找到則200,未找到404)
檢查文檔是否存在
POST請求
搜索文檔
地址:http://localhost:9200/testGroup/employee/_search
{
請求體
}
使用步驟
使用jest
導入jest的jar包。
配置地址
spring.elasticsearch.jest.uris=http://118.24.44.169:9200
@Autowired
JestClient jestClient;
//添加
Book book = new Book ();
book .setId(1);
book .setName("好書");
Index index = ((Builder)((Builder)(new Builder(book )).index("test")).type("book")).build();
jestClient.execute(index);
//搜索
String json = "{\n \"query\" : {\n \"match\" : {\n \"name\" : \"好\"\n }\n }\n}";
Search search = ((io.searchbox.core.Search.Builder)((io.searchbox.core.Search.Builder)(new io.searchbox.core.Search.Builder(json)).addIndex("atguigu")).addType("news")).build();
SearchResult result = (SearchResult)this.jestClient.execute(search);
System.out.println(result.getJsonString());
使用SpringData ElasticSearch
配置地址
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=118.24.44.169:9301
創建實體類存儲器接口繼承ElasticsearchRepository<T,ID>
添加文檔
@Document(indexName = "test",type = "book")//在實體上設置索引和類型
pulic class book{
}
@Autowired
BookRepository bookRepository;
bookRepository.index(book);
//BookRepository 內可添加findByBookNameLike等方法查詢,也支持在方法上添加@Query注解實現自己的查詢表達式
for(Book book : bookRepository.findByBookNameLike("好") ){
System.out.println(book);
}
GET /index/type/_search?q=字段:搜索值
QueryBuilder的使用:https://www.cnblogs.com/wenbronk/p/6432990.html
分布式相關
dubbo與SpringCloud的區別
Dubbo是分布式服務框架,主要解決各服務調用的問題(即RPC)。
Spring Cloud是一個分布式的整體解決方案。Spring Cloud 為開發者提供了在分布式系統(配置管理,服務發現,熔斷,路由,微代理,控制總線,一次性token,全局瑣,leader選舉,分布式session,集群狀態)中快速構建的工具,使用Spring Cloud的開發者可以快速的啟動服務或構建應用、同時能夠快速和云平臺資源進行對接。
SpringCloud分布式開發五大常用組件
服務發現——Netflix Eureka
客服端負載均衡——Netflix Ribbon
斷路器——Netflix Hystrix
服務網關——Netflix Zuul
分布式配置——Spring Cloud Config
zookeeper與dubbo使用步驟
在docker內安裝好zookeeper服務
引入jar包
引入dubbo的jar包
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</a rtifactId>
<version>0.1.0<version>
</dependency>
引入zookeeper客戶端的jar包
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</a rtifactId>
<version>0.1<version>
</dependency>
發布服務
在application.properties里添加
dubbo.application.name=provider-ticket
dubbo.registry.address=zookeeper://118.24.44.169:2181
dubbo.scan.base-packages=com.test.ticket.service
在實現類里添加
@Component
@Service(dubbo注解)
消費服務
在application.properties里添加
dubbo.application.name=consumer-user
dubbo.registry.address=zookeeper://118.24.44.169:2181
需實現接口類
//消費時添加。
@Reference
SpringCloud使用步驟
Eureka注冊中心
添加application.yml
server:
port: 8761
eureka:
instance:
hostname: eureka-server # eureka實例的主機名
client:
register-with-eureka: false #不把自己注冊到eureka上
fetch-registry: false #不從eureka上來獲取服務的注冊信息
service-url:
defaultZone: http://localhost:8761/eureka/
@EnableEurekaServer
在SpringBoot啟動器上添加注解,開啟注冊中心功能。
提供服務
添加application.yml
server:
port: 8002
spring:
application:
name: provider-ticket
eureka:
instance:
prefer-ip-address: true # 注冊服務的時候使用服務的ip地址
client:
service-url:
defaultZone: http://localhost:8761/eureka/
消費服務
添加application.yml
spring:
application:
name: consumer-user
server:
port: 8200
eureka:
instance:
prefer-ip-address: true # 注冊服務的時候使用服務的ip地址
client:
service-url:
defaultZone: http://localhost:8761/eureka/
@EnableDiscoveryClient
在SpringBoot啟動器上添加注解,開啟發現服務功能。
@LoadBalanced//負載均衡
@Bean
public RestTemplate restTemplate(){
return new RestTemlate();
}
@Autowired
RestTemplate restTemplate;
restTemplate.gerForObject("url",String,class);
熱部署相關
使用步驟
引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
監控相關
使用步驟
引入spring-boot-starter-actuator依賴