SpringBoot笔记

2018-09-29  本文已影响0人  SithCait

缓存相关

重要概念&注解

image.png
image.png
image.png

使用步骤

引入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序列化方式

image.png

使用步骤

@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>
image.png

监控相关

使用步骤

引入spring-boot-starter-actuator依赖

image.png
上一篇下一篇

猜你喜欢

热点阅读