目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

标签: Java (110)

Reactor

Reactive Programming  响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。 # 传统模式下编程:a 的值在执行后被确定。 a = b + c # 响应式编程 a 的值随着 b、c 值的变化而变化。 Project Reactor  Reactor是由 Pivotal 团队开发的,第四代Reactive库,用于根据Reactive Streams规范在JVM上构建非阻塞应用程序。 核心的概念 Operators - Publisher / Subscriber Nothing Happens Util You subscribe() Flux [ 0..N ] - onNext()、onComplete()、onError() Mono [ 0..1 ] - onNext()、onComplete()、onError() Backpressure Subscription onRequest()、onCancel()、onDispose() 线程调度 S....

Spring for Redis

Spring 对 Redis 的支持  Redis 是 ⼀款开源的内存 KV 存储,⽀持多种数据结构。  Spring 对 Redis 的支持是通过 Spring Data Redis 项目。 Jedis / Lettuce RedisTemplate Repository Reference Docker 启动 Redis 容器  Reference # 拉取image docker pull redis # 启动 Redis docker run -p 6379:6379 --name myredis -d redis # 设置密码添加 --requirepass 参数 docker run -p 6379:6379 --name myredis -d redis --requirepass "123456" Jedis 客户端 Jedis 不是线程安全的:无法在多个线程之间共享同一个 Jedis 实例。 通过 JedisPool 获得 Jedis 实例 直接使用 Jedis 中的方法 引入依赖 <?xml version="1.0" encoding="UTF-8....

Spring for MongoDB

常见数据库分类 ClassificationName Key-ValueRedis、Memcached DocumentMongoDB、CouchDB ColumnarHBase、Cassandra GraphNeo4J Docker部署MongoDB # 拉取image [root@master ~]# docker pull mongo [root@master ~]# docker images | grep mongo mongo latest a0e2e64ac939 3 weeks ago 64MB # 创建本地挂载目录 [root@master ~]# mkdir /data/mongodb -pv # 创建容器 [root@master ~]# docker run --name mongo -v /data/mongod:/data/db -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 -d mongo 0503c6157ef3b....

Spring Data JPA

对象与关系的范式不匹配 Hibernate ⼀款开源的对象关系映射(Object / Relational Mapping)框架 将开发者从 95% 的常 ⻅数据持久化 ⼯作中解放出来 屏蔽了底层数据库的各种细节 2006 年,Hibernate 3.2 成为 JPA 实现 Reference Java Persistence API  JPA1.0 是作为 JSR 220 的一部分正式发布。 简化数据持久化代码的开发工作 为 Java 社区屏蔽不同持久化 API 的差异(屏蔽了 Hibernate、JDO、EJB 之间的差异) 相当于在 O/R Mapping 框架之前做了一层抽象。 Spring Data  在保留底层存储特性的同时,提供相对 ⼀致的、基于 Spring 的编程模型。Spring Family List : Spring Data Commons Spring Data JDBC Spring Data JPA Spring Data Redis …… 如何引入 Spring Data JPA <dependency> <groupI....

常用注解

Java Config 相关注解 @Configuration:标注当前类是一个配置类。 @ImportResource:注入配置以外的xml文件的信息。 @ComponentScan:告诉Spring容器可以去扫描哪些package下的Bean。 @Bean:作用于方法上,它的返回值将作为一个Bean存在于ApplicationContext当中。 @ConfigurationProperties:用于绑定配置properites文件中的信息。 Bean的定义相关的注解 @Component / @Repository / @Service : 语义划分组件层次。 @Controller / @RestController:标注Bean为Web层的Bean。 @RequestMapping:方法与URL进行绑定。 Bean注入相关注解 @Autowired :按类型查找上下文中的Bean,并且完成注入。如果上下文中存在多个同类型的Bean,则会产生歧义性,需要搭配@Qualifier @Qualifier :用来声明注入Bean的名字。 @Resource :与@Autow....

Spring JDBC 异常抽象

统一异常DataAccessException  Spring会将常见的数据库操(mysql、oracle、db2…)作异常转换为自己的异常DataAccessException,因此无论使用何种数据访问方式,都能使用一样的异常。 定制错误码 sql-error-codes.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="H2" class="org.springframework.jdbc.support.SQLErrorCodes"> <!-- 复制spring官方sql-error-codes.xml 中 描述 H2 相关的错误码定义 --> <property name="badSqlGrammarCodes"> ....

Spring 事务抽象

Spring 的事务抽象  Spring 为数据访问层提供了很多抽象,在这些抽象下面我们可以非常方便的使用统一的方式来操作不同的框架。  Spring 的事务抽象采用了一致的事务模型,方便你使用不同的 JDBC/Hibernate/myBatis DataSource/JTA 事务抽象的核心接口  不同框架的事务管理器都现了 AbstractPlatformTransactionManager,AbstractPlatformTransactionManager 实现了 PlatformTransactionManager,所以 PlatformTransactionManager 的实现类可以是以下类: DataSourceTransactionManager HibernateTransactionManager JtaTransactionManager public interface PlatformTransactionManager { //TransactionStatus 获取事务状态,TransactionDefinition用于设置事务传播特性、隔离级别、....