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%