快速开发框架SpringBoot-学习日记(四)

第2章 Spring Boot重要用法

Spring Boot中使用Redis

Spring Boot对Redis的操作方式有两种:使用注解方式,使用API方式。

都需要执行的步骤

Spring Boot对Redis的两种操作方式中有些步骤都是需要的。

导入依赖

        
        
            org.springframework.boot
            spring-boot-starter-data-redis
        

修改主配置文件

在主配置文件中添加如下内容

  # 连接Redis服务器
  redis:
    host: redisOS
    port: 6379
    password: 111

   # 连接Redis高可有集群
#  redis:
#    sentinel:
#      master: mymaster
#      nodes: 
#        - sentinelOS1:26379
#        - sentinelOS2:26379
#        - sentinelOS3:26379

  # 配置缓存
  cache:
    type: redis # 指定缓存类型
    cache-names: realTimeCache   # 指定缓存区域名称

实体类需要序列化

@Data
public class Student implements Serializable {
    private static final long serialVersionUID = 8976625991908299975L;
    private Integer id;
    private String name;
    private int age;
}

使用注解方式

  • 需要在启动类上添加@EnableCaching注解
@EnableCaching  // 开启注解式缓存
@EnableTransactionManagement   // 开启事务
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

  • 在Service实现类相应方法上添加相应注解
    // 当发生插入操作时,将realTimeCache缓存区域中的数据清空
    @CacheEvict(value="realTimeCache", allEntries = true)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void addStudent(Student student) {
        dao.insertStudent(student);
    }

    // 将从DB中查询的数据存放到realTimeCache缓存区域,并为其指定
    // key为student_id值
    @Cacheable(value="realTimeCache", key = "'student_'+#id")
    @Override
    public Student getStudentById(int id) {
        // 从DB中查询
        return dao.selectStudentById(id);
    }

使用API方式

  • 使用双重检测锁机制定义相应方法
    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public Integer countStudents() {
        // 获取到Redis操作对象
        BoundValueOperations ops = redisTemplate.boundValueOps("count");
        // 从缓存中获取数据
        Object count = ops.get();
        // 第一次检测
        if(count == null) {
            synchronized (this) {
                count = ops.get();
                // 第二次检测
                if(count == null) {
                    // 从DB中查询
                    count = dao.selectStudentsCount();
                    // 将查询结果写入到Redis
                    ops.set(count, 10, TimeUnit.SECONDS);
                }
            }
        }
        return (Integer) count;
    }

Spring Boot中使用Dubbo

关于dubbo与spring boot整合依赖

  1. dubbo与spring boot整合依赖在mvnrepository.com中是找不到的,需要到阿里巴巴在github的官网中查找

  2. 该依赖如下:

        
        
            com.alibaba.spring.boot
            dubbo-spring-boot-starter
            2.0.0
        
  1. 该dubbo-spring-boot-starter依赖直接依赖的dubbo版本是2.6.0,其为dubbo进入到apache孵化器之前的版本,其zookeeper的客户端仍是zkClient,而不是Curator,且dubbo的服务治理平台是嵌入到dubbo源码中的。从dubbo2.6.1版本开始,服务治理平台就从dubbo源码中分离了出来。

  2. 该dubbo-spring-boot-starter依赖所需要的zookeeper客户端为

        
        
            com.101tec
            zkclient
            0.10
        

定义服务提供者

  1. 添加依赖
  • dubbo与spring boot整合依赖
  • zkClient依赖
  • 对自定义api工程的依赖
  • slf4j-log4j12依赖
 
            org.slf4j
            slf4j-log4j12
            1.7.25
            test
        

        
        
            com.101tec
            zkclient
            0.10
        

        
        
            com.alibaba.spring.boot
            dubbo-spring-boot-starter
            2.0.0
        
        
            com.bjpowernode
            08-dubbo-api
            0.0.1-SNAPSHOT
        
  1. 在启动类上添加@EnableDubboConfiguration注解,开启dubbo自动配置功能
@EnableDubboConfiguration   // 开启dubbo自动配置
@EnableCaching  // 开启注解式缓存
@EnableTransactionManagement   // 开启事务
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  1. 在Service实现类上添加Dubbo的@Service注解与@Component注解
@Service  // 其功能等价于spring-dubbo配置文件中的
@Component   // 表示当前类由Spring容器来管理
public class StudentServiceImpl implements StudentService {
	……
}
  1. 修改主配置文件
    在主配置文件中的spring下添加如上内容:
  # 功能等价于spring-dubbo配置文件中的
  # 该名称是由服务治理平台使用
  application:
    name: 08-dubbo-provider
  # 指定zk注册中心
  dubbo:
    registry: zookeeper://zkOS:2181
    # zk集群作注册中心
    # registry: zookeeper://zkOS1:2181?backup=zkOS2:2181,zkOS3:2181

定义服务消费者

  1. 添加依赖
 
            org.slf4j
            slf4j-log4j12
            1.7.25
            test
        

        
        
            com.101tec
            zkclient
            0.10
        

        
        
            com.alibaba.spring.boot
            dubbo-spring-boot-starter
            2.0.0
        
        
            com.bjpowernode
            08-dubbo-api
            0.0.1-SNAPSHOT
        
  1. 在启动类上添加@EnableDubboConfiguration注解,开启dubbo自动配置功能
@EnableDubboConfiguration   // 开启dubbo自动配置
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  1. 在controller类的Service成员变量上添加@Reference注解,删除@Autowired注解
    // 该注解不能添加,否则其会在当前spring容器中通过byType方式查找相应的bean进行注入
    // @Autowired 
    @Reference  // 其功能等价于spring-dubbo配置文件的
    private StudentService service;
  1. 修改主配置文件
    在主配置文件中的spring下添加如上内容:
  # 功能等价于spring-dubbo配置文件中的
  # 该名称是由服务治理平台使用
  application:
    name: 08-dubbo-consumer
  # 指定zk注册中心
  dubbo:
    registry: zookeeper://zkOS:2181
    # zk集群作注册中心
    # registry: zookeeper://zkOS1:2181?backup=zkOS2:2181,zkOS3:2181

你可能感兴趣的:(Java,Spring,Boot)