2018年06月Reading Notes

spring InjectionPoint

InjectionPoint是spring 4.3引入的特性,顾名思义,注入点,通过此类能获取到注入点上下文。可以通过这个特性做一些有意思的事情。

1. 获取被注入组件的类

@Bean
@Scope("prototype")
Logger logger(InjectionPoint ip) {
    return Logger.getLogger(ip.getMember().getDeclaringClass().getName());
}

@Component
public static class LoggingComponent {
    private final Logger logger ;
    public LoggingComponent(Logger logger) {
        this.logger = logger;
    }
}

2. 获取被注入组件上的注解

  @Bean
  @Scope("prototype")
  public String greeting(InjectionPoint ip) {
    Greeting greeting = findAnnotation(ip.getAnnotatedElement(),
                        Greeting.class);
    return (Language.DA == greeting.language()) ? "Hej Verden" : "Hello World";
  }

@Service
public class GreeterService {
  @Autowired @Greeting(language = Language.EN)
  private String greeting;
}

spring jdbc

spring jdbc做了很多有意思的扩展,比如大家熟悉的JdbcTemplate,还有最近才推出的spring-data-jdbc,参考spring-tips,了解spring 对jdbc的能力支持。

Asynchronous Database Access API

ADBA访问数据库的异步api,让io线程的事件机制去等待数据库响应,把这块填补上,java程序中基本上都可以完全异步了。scalikejdbc-async的做法实现了jdbc api,但是由于异步编程模型的改变,使用起来会有点别扭。(比如基于请求的结果做后续操作)

目前就oracle数据库驱动实现了ADBA,它通过nio实现了完全的异步。

Minio

Minio是GlusterFS创始人之一Anand Babu Periasamy发布的兼容Amason S3分布式对象存储项目,可以做为对象存储的解决方案用来保存海量的图片,视频,文档.

分布式minio,有以下特性:

  • 数据保护:采用erasure code来防范多个节点宕机和位衰减bit rot
  • 高可用:如果是一个N节点的分布式Minio,只要有N/2节点在线,你的数据就是安全的
  • 一致性:Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。

以下几点需要注意:

  • minio不支持动态扩容,如果要扩容只能停机迁移
  • 按照默认的storage class in erasure coding mode策略,比如8个节点,4个数据块,4个校验块,最大允许4个节点挂掉,最大磁盘利用率50%
给攻城狮一个小小的鼓励!