开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
博客专区 - 开源中国社区

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

tio-http-server 源码浅析(一)HttpRequestDecoder的实现

tio-http-server源码阅读后感
丶Pz 发布于 5小时前 阅读 93 评论 1 点赞 3

初探Kotlin+SpringBoot联合编程

Kotlin是一门最近比较流行的静态类型编程语言,而且和Groovy、Scala一样同属Java系。Kotlin具有的很多静态语言特性诸如:类型判断、多范式、扩展函数、模式匹配等等让我无法只作为一个吃瓜群众了,所以稍微花了点时间了解了一下该语言。
hansonwang 发布于 6小时前 阅读 50 评论 1

代码结构及一些代码规范建议

### **一些感悟** --- - 代码结构和规范关系到项目的可持续维护以及维护的周期,非常重要,但真正重视并落地的很少 - 经典的MVC模式一般都能说出来,但真正落地到项目代码结构的时候,却缺少思考 - 当写代码和找代码让人感觉别扭的时候,就该考虑如何去优化了 - 一切皆对象,在规划代码结构的时候也需要有面向对象的思维方式 - 很多张口就是高并发、大数据、高流量等之类高大上词汇的人,缺很少注重代码的基础结构,写出的代码很难让人轻易上手 - 如果代码结构和规范做得好一点,一般项目有一两个顶梁柱再加一些新手就完全可以搞定。这样既可以节省人力成本,也可以快速培养新人,新加入的成员也能快速融入 以下是整理的一般类型的项目代码结构,仅供参考。部分模块是使用spring boot开发项目的命名,但总体结构思路是一样的,如果不使用spring boot开发项目,只是修改一下名字即可 ### **建议的包结构及简单说明** - itopener-parent:顶级maven parent,配置统一的maven插件、依赖包版本管理等 - itopener-utils:全局公用的工具类,如:加密操作、集合处理、字符串处理等等 - itopener-framework:基于框架的统一的封装,比如:拦截器、controller返回对象、BaseControl...
J猿 发布于 7小时前 阅读 56

Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)【Dalston版】

通过[《Spring Cloud构建微服务架构:消息驱动的微服务(入门)》](http://blog.didispace.com/spring-cloud-starter-dalston-7-1/)一文,相信大家对Spring Cloud Stream的工作模式已经有了一些基础概念,比如:输入、输出通道的绑定,通道消息事件的监听等。下面在本文中,我们将详细介绍一下Spring Cloud Stream中是如何通过定义一些基础概念来对各种不同的消息中间件做抽象的。 下图是官方文档中对于Spring Cloud Stream应用模型的结构图。从中我们可以看到,Spring Cloud Stream构建的应用程序与消息中间件之间是通过绑定器`Binder`相关联的,绑定器对于应用程序而言起到了隔离作用,它使得不同消息中间件的实现细节对应用程序来说是透明的。所以对于每一个Spring Cloud Stream的应用程序来说,它不需要知晓消息中间件的通信细节,它只需要知道`Binder`对应用程序提供的概念去实现即可,而这个概念就是在快速入门中我们提到的消息通道:`Channel`。如下图案例,在应用程序和Binder之间定义了两条输入通道和三条输出通道来传递消息,而绑定器则是作为这些通道和消息中间件之间的桥梁进行通信。 ![](http://blog.didispace.com/assets/SCSt-with-binder.png) ### 绑定器 ...
程序猿DD 发布于 15小时前 阅读 265

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

Spring事务管理(二)-TransactionProxyFactoryBean原理

通常Spring事务管理的配置都是XML或者声明式注解的方式,然后想要学习其运行的原理,从TransactionProxyFactoryBean深入更合适。我们从事务相关的核心类开始,逐步介绍Spring事务的运行机制。 ## Spring事务核心类 Spring事务的构成,基本有三个部分,事务属性的定义,事务对象及状态信息的持有,事务管理器的处理。 ### 事务属性的定义 1. TransactionDefinition 事务定义(传播属性,隔离属性,timeout等) 2. TransactionAttribute 事务属性接口 (继承TransactionDefinition),常用的实现是RuleBasedTransactionAttribute 3. TransactionAttributeSource 事务属性数据源,可以根据method和Class获取TransactionAttribute(注解方式的实现为AnnotationTransactionAttributeSource,编程方式的实现为NameMatchTransactionAttributeSource) ### 事务对象及状态信息的持有 1. Transaction 事务对象,由具体的事务管理器实现返回 2. TransactionStatus 事务状态,持有事务对象以及事务本身的属性及状态,每次事务方法执行前,生成一个新的TransactionStatus,但如果不需要创建新事务,则持有的事务和上层一致 3. TransactionInfo 事务信息,持有事务属性,事务状态,事务连...
青离 发布于 24小时前 阅读 129

Spring Boot 与 Kotlin使用Spring-data-jpa简化数据访问层

《Spring Boot 与 kotlin 实战》之使用Spring-data-jpa简化数据访问层
quanke_ 发布于 1天前 阅读 172

Django中使用celery完成异步任务

本文主要介绍如何在django中用celery完成异步任务,web项目中为了提高用户体验可以对一些耗时操作放到异步队列中去执行,例如激活邮件,后台计算操作等等 当前项目环境为: django==1.11.8 celery==3.1.25 redis==2.10.6 pip==9.0.1 python3==3.5.2 django-celery==3.1.17
AustinKuture 发布于 1天前 阅读 39 点赞 1

阿北的知识分享小程序中restful使用经验贴

> 大家知道我最近在给“阿北的知识分享”微信小程序改版,使用的是yii2中的restful功能,接下来把遇到的一些问题及小技巧分享一下。 先安利一下小程序码 [链接][1] 开始分享。 # URL要重写 我们知道restful风格的url一般是这样的 - GET /users - POST /users - DELETE /users/1 我们yii2默认的url形式是index.php?r=controller/action。 虽然说yii2已经提供了专门针对于restful的路由规则,但是我们还是需要服务器支持url重写把index.php去掉。 我用的是nginx,如下配置 ```php location / { if (!-e $request_filename){ rewrite ^/(.*) /index.php last; } } ``` 如果你的是apache可以如下配置 ```php // Apache需要支持url重写其AllowOverride为all AllowOverride:all //web目录下增加.htaccess,隐藏index.php文件 内容如下 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php ``` 或 ```php RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA] ``` # 不要DELETE了 默认情况下yii2的restful已经提...
阿北2017 发布于 1天前 阅读 126 点赞 1

在spring中使用自定义注解注册监听器

java中监听器的实现大都是利用接口进行回调,使用比较麻烦。之后,spring框架中出现了在方法上加一个注解就可以实现监听的用法,特别简洁。本文就是在分析监听器回调原理的基础上,在spring环境中使用自定义的注解实现一个监听器。
silenceyawen 发布于 2天前 阅读 1493 评论 6 点赞 2

Spring Boot 与 Kotlin 使用JdbcTemplate连接MySQL

《Spring Boot 与 kotlin 实战》之 使用JdbcTemplate连接MySQL
quanke_ 发布于 2天前 阅读 231

常用的分布式事务解决方案介绍有多少种?

关于分布式事务,工程领域主要讨论的是强一致性和最终一致性的解决方案。典型方案包括: - **两阶段提交(2PC, Two-phase Commit)方案** - **eBay 事件队列方案** - **TCC 补偿模式** - **缓存数据最终一致性** # 一、一致性理论 分布式事务的目的是保障分库数据一致性,而跨库事务会遇到各种不可控制的问题,如个别节点永久性宕机,像单机事务一样的ACID是无法奢望的。另外,业界著名的CAP理论也告诉我们,对分布式系统,需要将数据一致性和系统可用性、分区容忍性放在天平上一起考虑。 两阶段提交协议(简称2PC)是实现分布式事务较为经典的方案,但2PC 的可扩展性很差,在分布式架构下应用代价较大,eBay 架构师Dan Pritchett 提出了BASE 理论,用于解决大规模分布式系统下的数据一致性问题。BASE 理论告诉我们:可以通过放弃系统在每个时刻的强一致性来换取系统的可扩展性。 ## 1、CAP理论 在分布式系统中: - **一致性(Consistency)** - **可用性(Availability)** - **分区容忍性(Partition Tolerance)** 3个要素最多只能同时满足两个,不可兼得。其中,分区容忍性又是不可或缺的。 ![ ][1] - **一致性**:分布式环境下多个节点的数据是否强一致。 - **可用性*...
鹏磊 发布于 2天前 阅读 192

t-io对半包和粘包的处理

不少朋友对tio处理半包粘包不是很清楚,所以就简单写一篇博客来说一下吧
talent-tan 发布于 2天前 阅读 325 点赞 1

Java 读取图片的mimeType

Java 判断图片类型
IamOkay 发布于 2天前 阅读 149 评论 2 点赞 2

Java 二维数组中的孤岛搜索

Java 二维数组中的孤岛搜索
IamOkay 发布于 2天前 阅读 238

一篇文章看懂Java并发和线程安全(一)

一、前言     长久以来,一直想剖析一下Java线程安全的本质,但是苦于有些微观的点想不明白,便搁置了下来,前段时间慢慢想明白了,便把所有的点串联起来,趁着思路清晰,整理成这样一篇文章。 二、导读     1、为什么有多线程?     2、线程安全描述的本质问题是什么?     3、Java内存模型(JMM)数据可见性问题、指令重排序、内存屏障 三、揭晓答案 1、为什么有多线程     谈到多线程,我们很容易与高性能画上等号,但是并非如此,举个简单的例子,从1加到100,用四个线程计算不一定比一个线程来得快。因为线程的创建和上下文切换,是一笔巨大的开销。     那么设计多线程的初衷是什么呢?来看一个这样的实际例子,计算机通常需要与人来交互,假设计算机只有一个线程,并且这个线程在等待用户的输入,那么在等待的过程中,CPU什么事情也做不了,只能等待,造成CPU的利用率很低。如果设计成多线程,在CPU在等待资源的过程中,可以切到其他的线程上去,提高CPU利用率。     现代处理器大多含有多个CPU核心,那么对于运算量大任务,可以用多线程的方式拆解成多个小任务并发的执行,提高计算的效率。     总结起来无非两点,提高CPU的利用率、...
冷血狂魔 发布于 3天前 阅读 2517 评论 7 点赞 11

spring cloud eureka server 集群配置 要点

翻看了不少网上的教程   千篇一律 那些该配置 不该配置很模糊 很多都是入门教程  经过个人实践 总结了eureka server 几个要点: springcloud 版本  Dalson.SR4 # eureka server 高可用 配置 要点 eureka.instance.prefer-ip-address 不建议设置为true # eureka.client.registerWithEureka、 eureka.client.fetchRegistry 都要设置为true 默认值都为true # eureka.instance.appname =spring.application.name # 重要 defaultZone 高可用 不要使用ip 应该使用相应的域名DNS来配置 也就是 eureka.instance.hostname 指定DNS   每个分片必须指定hostname  不然当前分片显示不可用 eureka: instance: hostname: cluster1 最后一条很重要 分片是否成功的关键 一定要用dns来配置 windows 下 改host文件  linux 或者其他环境一样 样例配置   采用 3个实例集群  8761->8762->8763->8761     application.yml 如下: 运行指定配置文件spring.profiles.active=配置项   例如在springboot 可执行jar路径下 命令行执行  java -jar discovery-server-1.0-SNAPSHOT.jar --spring.profiles.active=master 启动了master 配置    红字换cluster1 对应启...
NotFound403 发布于 3天前 阅读 165

Spring事务管理(一)-三种配置方式

当项目的数据需要持久化存储时,不可避免要和数据库交互。在交互过程中,对事务的支持则是尤为重要。JDBC规范支持对事务的操作,在[深入浅出JDBC(一) - Connection与事务介绍](https://my.oschina.net/u/2377110/blog/1601409)一章中简要介绍了JDBC事务相关的概念。JDBC将对不同数据库的交互规范化,包括事务的操作,让开发者可以屏蔽不同数据库的差异使用接口编程。但事务的开启和关闭,以及事务的控制和配置还是需要手动编码控制,未免繁琐且易出错。Spring基于此之上,开放出一套事务管理机制,将开发者从繁琐的事务控制中解脱出来,可以便捷地执行事务控制。然而作为开发者,便捷之后的原理也需要了解,才能更好地把控程序。接下来,我将从Spring事务管理的配置到原理逐步介绍其运行机制,本篇先介绍三种从原始到简化的配置方式。 以mybatis+mysql为基础,基本的xml配置如下 ``` ``` 这里对mybatis的配置就不过多介绍了,事务定义在UserManager层,UserManager中定义一个批量操作的方法,来验证事务。 ``` @Slf4j public class UserManager { @Getter @Setter private UserMapper userMapper; public void batchOperator(){ User user = new User("lily", 25); // 插入...
青离 发布于 3天前 阅读 278 点赞 1

Spring Boot 多库分布式事务,最简配置,没有之一

Spring Boot 多库 分布式事务,最简配置,应该没的比这个还简单的配置了吧
边鹏_尛爺鑫 发布于 3天前 阅读 27

深入一致性哈希(Consistent Hashing)算法原理,并附100行代码实现

    本文为实现分布式任务调度系统中用到的一些关键技术点分享——Consistent Hashing算法原理和Java实现,以及效果测试。
echx 发布于 3天前 阅读 77

Jmockdata3.0.0全新发布,使用说明

Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。
寻觅一只耳朵 发布于 3天前 阅读 72

Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)【Dalston版】

通过[《Spring Cloud构建微服务架构:消息驱动的微服务(入门)》](http://blog.didispace.com/spring-cloud-starter-dalston-7-1/)一文,相信大家对Spring Cloud Stream的工作模式已经有了一些基础概念,比如:输入、输出通道的绑定,通道消息事件的监听等。下面在本文中,我们将详细介绍一下Spring Cloud Stream中是如何通过定义一些基础概念来对各种不同的消息中间件做抽象的。 下图是官方文档中对于Spring Cloud Stream应用模型的结构图。从中我们可以看到,Spring Cloud Stream构建的应用程序与消息中间件之间是通过绑定器`Binder`相关联的,绑定器对于应用程序而言起到了隔离作用,它使得不同消息中间件的实现细节对应用程序来说是透明的。所以对于每一个Spring Cloud Stream的应用程序来说,它不需要知晓消息中间件的通信细节,它只需要知道`Binder`对应用程序提供的概念去实现即可,而这个概念就是在快速入门中我们提到的消息通道:`Channel`。如下图案例,在应用程序和Binder之间定义了两条输入通道和三条输出通道来传递消息,而绑定器则是作为这些通道和消息中间件之间的桥梁进行通信。 ![](http://blog.didispace.com/assets/SCSt-with-binder.png) ### 绑定器 ...
程序猿DD 发布于 15小时前 阅读 265

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

Spring事务管理(二)-TransactionProxyFactoryBean原理

通常Spring事务管理的配置都是XML或者声明式注解的方式,然后想要学习其运行的原理,从TransactionProxyFactoryBean深入更合适。我们从事务相关的核心类开始,逐步介绍Spring事务的运行机制。 ## Spring事务核心类 Spring事务的构成,基本有三个部分,事务属性的定义,事务对象及状态信息的持有,事务管理器的处理。 ### 事务属性的定义 1. TransactionDefinition 事务定义(传播属性,隔离属性,timeout等) 2. TransactionAttribute 事务属性接口 (继承TransactionDefinition),常用的实现是RuleBasedTransactionAttribute 3. TransactionAttributeSource 事务属性数据源,可以根据method和Class获取TransactionAttribute(注解方式的实现为AnnotationTransactionAttributeSource,编程方式的实现为NameMatchTransactionAttributeSource) ### 事务对象及状态信息的持有 1. Transaction 事务对象,由具体的事务管理器实现返回 2. TransactionStatus 事务状态,持有事务对象以及事务本身的属性及状态,每次事务方法执行前,生成一个新的TransactionStatus,但如果不需要创建新事务,则持有的事务和上层一致 3. TransactionInfo 事务信息,持有事务属性,事务状态,事务连...
青离 发布于 24小时前 阅读 129

tio-http-server 源码浅析(一)HttpRequestDecoder的实现

tio-http-server源码阅读后感
丶Pz 发布于 5小时前 阅读 93 评论 1 点赞 3

代码结构及一些代码规范建议

### **一些感悟** --- - 代码结构和规范关系到项目的可持续维护以及维护的周期,非常重要,但真正重视并落地的很少 - 经典的MVC模式一般都能说出来,但真正落地到项目代码结构的时候,却缺少思考 - 当写代码和找代码让人感觉别扭的时候,就该考虑如何去优化了 - 一切皆对象,在规划代码结构的时候也需要有面向对象的思维方式 - 很多张口就是高并发、大数据、高流量等之类高大上词汇的人,缺很少注重代码的基础结构,写出的代码很难让人轻易上手 - 如果代码结构和规范做得好一点,一般项目有一两个顶梁柱再加一些新手就完全可以搞定。这样既可以节省人力成本,也可以快速培养新人,新加入的成员也能快速融入 以下是整理的一般类型的项目代码结构,仅供参考。部分模块是使用spring boot开发项目的命名,但总体结构思路是一样的,如果不使用spring boot开发项目,只是修改一下名字即可 ### **建议的包结构及简单说明** - itopener-parent:顶级maven parent,配置统一的maven插件、依赖包版本管理等 - itopener-utils:全局公用的工具类,如:加密操作、集合处理、字符串处理等等 - itopener-framework:基于框架的统一的封装,比如:拦截器、controller返回对象、BaseControl...
J猿 发布于 7小时前 阅读 56

初探Kotlin+SpringBoot联合编程

Kotlin是一门最近比较流行的静态类型编程语言,而且和Groovy、Scala一样同属Java系。Kotlin具有的很多静态语言特性诸如:类型判断、多范式、扩展函数、模式匹配等等让我无法只作为一个吃瓜群众了,所以稍微花了点时间了解了一下该语言。
hansonwang 发布于 6小时前 阅读 50 评论 1

我是如何保证消息传递与一致性的

本文阐述了,我在工作中如何确保消息一致性,最后还扩展了如何利用Event-Sourcing+MQ ,实现RPC式分布式事务。
温安适 发布于 1个月前 阅读 175 评论 1 点赞 2

关于mongo使用上的一些问题

        今天在写一个排序功能的时候,将排好序的id字段拿出来然后组装成了一个list直接放入了redis,这时候我想将排好序的列表拿出来然后跟数据库中排好序的id对比一下,测试功能是否实现了,然后我从redis客户端工具里面将我那个key所对应的value拿出来,这时候我没有一个个对比,我直接拿了第一的id,用客户端工具去库里查,看看是否查到,这时候问题来了:我用那个id查到了那条数据并且排序也是对的,但是我仔细对比了一下发现查询的id字段和数据本身的字段对不上,两者相差了2(long型),然后我用其他的long型字段都测试了一下发现全部存在这个问题,在原本数据的4-->-4范围内都可以查到那条数据(假如在这个范围内还有其他数据的字段是否都能查到??懒一下,没有测试);         那么有一个问题来了,我在程序里的使用会不会也会存在这个问题呢? 我测试了一下是正常的,然后百度了一下,发现long型的字段搜索必须要加上NumberLong("*******"),这样才可以精确的匹配到,这里也还存在着细节问题,如果在括号中不用上双引号的,那么还是一样;        这时,我发现另一个问题出来了,为什么我存入redis的数据从客户端工具拿出来后和库里的对不上...
孙超飞 发布于 15小时前 阅读 26 点赞 1

JDK 1.8 List之间的映射

工作中常有bean之间的映射,有使用BeansUtils的和EasyMapper。但是也有不少操作实在list之间进行的。恰,jdk 1.8 提供了很好API。
Lien6o 发布于 10小时前 阅读 22 评论 1 点赞 1

玩转redis集群(二)—— 哨兵模式

上篇文章介绍了如何在多台机器上快速部署多个redis服务实例。在此基础上,本文继续玩转redis集群——搭建redis哨兵模式。
萧十一郎君 发布于 13小时前 阅读 15

Redis操作性能

类:redis.clients.jedis.Jedis 记录测试:key和value均使用byte[]类型,相比操作String类型的效率高。 60个Instance反序列化,本地测试10次,前者平均51ms,后者平均63.7ms。    
Airship 发布于 22小时前 阅读 14

spring boot集成pagehelper,两种方式

当spring boot集成好mybatis时候需要进行分页,我们首先添加maven支持 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-autoconfigure</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency> 方式一:我们在application.yml(spring 需要读取的yml)中加入 pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSql 然后重启即可。 配置文件最终会被java所读取,最终注入到spring bean中,所以我们方法二是配置其bean类,热加载方便修改当然方式一更简单, 方式二:在注解涵盖package下面新建PageHeleperConfig import com.github.pagehelper.PageHelper; import java.util.Pro...
bweird 发布于 3周前 阅读 240 评论 2

线程安全解析(附带JVM内存结构和锁机制说明)

线程安全这块的之前没有好好总结,这里加上自己的理解,欢迎大家及时修正
WALK_MAN 发布于 3小时前 阅读 21 打赏 1

SpringBoot整合RabbitMQ案例

一、pom.xml和配置文件(使用之前安装RabbitMQ服务--省略) <!-- 整合搭建rabbitMq --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> server: port: 9010 spring: application: name: springCloud-rabbitMq eureka: instance: hostname: localhost client: register-with-eureka: true fetch-registry: false service-url: defaultZone: http://localhost:9001/eureka/ spring: rabbitmq: host: localhost port: 5672 username: guest password: guest 二、配置config package rabbitMq.config; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.Queue; import org.springframework.amqp.core.TopicExchange; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 初始化配置加载队列消...
WALK_MAN 发布于 23小时前 阅读 13

Easy_Poi使用教程

POI 工具类,Excel的快速导入导出,Excel模板导出,Word模板导出,可以仅仅5行代码就可以完成Excel的导入导出,修改导出格式简单粗暴,快速有效,easypoi值得你尝试 http://www.jeecg.org/  README.md 12.06 KB =========================== EasyPoi Excel和 Word简易工具类 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 作者博客:http://blog.csdn.net/qjueyue 作者邮箱: qrb.jueyue@gmail.com QQ群: 364192721 测试项目: http://git.oschina.net/jueyue/easypoi-test EasyPoi的主要特点 1.设计精巧,使用简单 2.接口丰富,扩展简单 3.默认值多,write less do more 4.AbstractView 支持,web导出可以简单明了 EasyPoi的几个入口工具类 1.ExcelExportUtil Excel导出( 普通导出,模板导出) 2.ExcelImportUtil Excel导入 3.WordExportUtil Word导出(只支持docx ,doc版本poi存在图片的bug,暂不支持) 关于Excel导出XLS和XLSX区别 1.导出时间XLS比XLSX快2-3倍 2.导出大小XLS是XLSX的2-3倍或者更多 3.导出需要综合网速和本...
小手冰凉丶 发布于 8小时前 阅读 12

使用fastjson的filter机制将String属性转成复杂类型

今天遇到一个很棘手的问题,由于前期设计的失误,导致了数据库中的一个字段不得不用json存储一个非常复杂的对象,前端获取到复杂对象后利用json序列化成jsonstring后存到db中的字段 获取数据的时候从db中取得该jsonstring字段后反序列化成这个复杂对象后传给前端,但是由于这个复杂对象本身利用了list的泛型机制,这样就导致了db中是一个json array并且用一个string存,前端对象是一个list对象,这样反序列化的时候就就不能正确反序列化,因为他试图将一个“[{},{}]”这样的一个格式的内容转成list<>。我先后试过Fastjson,Gson和jackson都不能很好转换 先把之前失败的代码贴一下,相关逻辑已经简化,PO表示数据库持久话对象,BO表示前端展示对象,其中有一个List的复杂对象 class User{ private String name; private String empid; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmpid() { return empid; } public void setEmpid(String empid) { this.empid = empid; } } class GroupBO{ private String gro...
王小明123 发布于 10小时前 阅读 11

反射机制——细节&Class对象

一、与传统类(对象)的对比
哎小艾 发布于 13小时前 阅读 9

聊聊jdbc socketTimeout的设置

## 序 本文主要介绍下jdbc的socket timeout的设置 ## jdbc timeout类别 主要有如下几个类别 ![](https://upload-images.jianshu.io/upload_images/840965-40db64a9edfb3908.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/614) - transaction timeout >设置的是一个事务的执行时间,里头可能包含多个statement - statement timeout(`也相当于result set fetch timeout`) >设置的是一个statement的执行超时时间,即driver等待statement执行完成,接收到数据的超时时间(`注意statement的timeout不是整个查询的timeout,只是statement执行完成并拉取fetchSize数据返回的超时,之后resultSet的next在必要的时候还会触发fetch数据,每次fetch的超时时间是单独算的,默认也是以statement设置的timeout为准`) - jdbc socket timeout >设置的是jdbc I/O socket read and write operations的超时时间,防止因网络问题或数据库问题,导致driver一直阻塞等待。(`建议比statement timeout的时间长`) - os socket timeout >这个是操作系统级别的socket设置(`如果jdbc socket timeout没有设置,而os级别的socket timeout有设置,则使用系统的socket timeout值`)。 >上面的不同级别的...
go4it 发布于 1天前 阅读 9

反射机制——获取Class对象的三种方式

方式1、Object类中的getClass()方法 /*** * 获取字节码文件对象的3种方式: * * 1、Object类中的getClass()方法 * 特点:想要用该方式,必须明确具体的类,并创建对象。 * 比较麻烦。 * */ public static void getClassObject(){ Person p = new Person(); Class<Person> clazz = (Class<Person>) p.getClass(); Person p2 = new Person(); Class<Person> clazz2 = (Class<Person>) p2.getClass(); System.out.println(clazz == clazz2); } 方式2、类的静态属性:class /*** * 方式二: * 任何数据类型都有一个静态的属性:class * 通过该方式来获取其对应的Class对象 * 特点:相对简单,但是仍然需要明确具体类的静态成员 * 还是不够扩展。 * */ public static void getClassObject2(){ Class<Person> clazz = Person.class; Class<Person> clazz2 = Person.class; System.out.println(clazz == clazz2); } 方式3、使用Class静态方法forName() /*** * 方式三: * 通过类的全限定名来获取,可扩展性强。 * 使用Class静态方法forName() * 特点:该方式只需类的全类名即可,更为方便,扩展性更强...
哎小艾 发布于 8小时前 阅读 8

SpringBoot实现Eureka注册功能

一、新建两个子模块,我这边的命名Eureka和Client,在父级的pom.xml <!-- 集成web方式的开发 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 服务与注册中心 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> 二、在Eureka中新建package、Application服务需要在包下才能正常加载启动,根目录下启动会报异常 package eureka; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer --作为服务端注解 public class EurekaServer { public static void main(String[] args) { new SpringApplicationBuilder(EurekaServer.class).web(true).run(args); } } Eureka下的application.yml server: port: 9001 eureka: instance: host...
WALK_MAN 发布于 22小时前 阅读 8

java实现spark streaming与kafka集成进行流式计算

java实现spark streaming与kafka集成进行流式计算
woter 发布于 6小时前 阅读 7

一篇文章看懂Java并发和线程安全(一)

一、前言     长久以来,一直想剖析一下Java线程安全的本质,但是苦于有些微观的点想不明白,便搁置了下来,前段时间慢慢想明白了,便把所有的点串联起来,趁着思路清晰,整理成这样一篇文章。 二、导读     1、为什么有多线程?     2、线程安全描述的本质问题是什么?     3、Java内存模型(JMM)数据可见性问题、指令重排序、内存屏障 三、揭晓答案 1、为什么有多线程     谈到多线程,我们很容易与高性能画上等号,但是并非如此,举个简单的例子,从1加到100,用四个线程计算不一定比一个线程来得快。因为线程的创建和上下文切换,是一笔巨大的开销。     那么设计多线程的初衷是什么呢?来看一个这样的实际例子,计算机通常需要与人来交互,假设计算机只有一个线程,并且这个线程在等待用户的输入,那么在等待的过程中,CPU什么事情也做不了,只能等待,造成CPU的利用率很低。如果设计成多线程,在CPU在等待资源的过程中,可以切到其他的线程上去,提高CPU利用率。     现代处理器大多含有多个CPU核心,那么对于运算量大任务,可以用多线程的方式拆解成多个小任务并发的执行,提高计算的效率。     总结起来无非两点,提高CPU的利用率、...
冷血狂魔 发布于 3天前 阅读 2517 评论 7 点赞 11

MacOS 配置Java环境变量

### 编辑 bash_profile ```shell vim ~/.bash_profile 输入以下内容并保存 export JAVA_HOME=`/usr/libexec/java_home` export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin ``` ### 使环境变量生效 ``` source ~/.bash_profile ``` ### 检验 ```shell tianshl@tianshl ~ $ echo $PATH ``` ### 备注 ``` 1. source前使用fish的要先退出fish 2. /usr/libexec/java_home 这条命令可以输出JAVA_HOME的路径 ```
tianshl 发布于 2个月前 阅读 342471 点赞 1

t-io对半包和粘包的处理

不少朋友对tio处理半包粘包不是很清楚,所以就简单写一篇博客来说一下吧
talent-tan 发布于 2天前 阅读 325 点赞 1

Spring事务管理(一)-三种配置方式

当项目的数据需要持久化存储时,不可避免要和数据库交互。在交互过程中,对事务的支持则是尤为重要。JDBC规范支持对事务的操作,在[深入浅出JDBC(一) - Connection与事务介绍](https://my.oschina.net/u/2377110/blog/1601409)一章中简要介绍了JDBC事务相关的概念。JDBC将对不同数据库的交互规范化,包括事务的操作,让开发者可以屏蔽不同数据库的差异使用接口编程。但事务的开启和关闭,以及事务的控制和配置还是需要手动编码控制,未免繁琐且易出错。Spring基于此之上,开放出一套事务管理机制,将开发者从繁琐的事务控制中解脱出来,可以便捷地执行事务控制。然而作为开发者,便捷之后的原理也需要了解,才能更好地把控程序。接下来,我将从Spring事务管理的配置到原理逐步介绍其运行机制,本篇先介绍三种从原始到简化的配置方式。 以mybatis+mysql为基础,基本的xml配置如下 ``` ``` 这里对mybatis的配置就不过多介绍了,事务定义在UserManager层,UserManager中定义一个批量操作的方法,来验证事务。 ``` @Slf4j public class UserManager { @Getter @Setter private UserMapper userMapper; public void batchOperator(){ User user = new User("lily", 25); // 插入...
青离 发布于 3天前 阅读 278 点赞 1

Spring Boot 与 Kotlin 使用JdbcTemplate连接MySQL

《Spring Boot 与 kotlin 实战》之 使用JdbcTemplate连接MySQL
quanke_ 发布于 2天前 阅读 231

Java 二维数组中的孤岛搜索

Java 二维数组中的孤岛搜索
IamOkay 发布于 2天前 阅读 238

在spring中使用自定义注解注册监听器

java中监听器的实现大都是利用接口进行回调,使用比较麻烦。之后,spring框架中出现了在方法上加一个注解就可以实现监听的用法,特别简洁。本文就是在分析监听器回调原理的基础上,在spring环境中使用自定义的注解实现一个监听器。
silenceyawen 发布于 2天前 阅读 1493 评论 6 点赞 2

Java 读取图片的mimeType

Java 判断图片类型
IamOkay 发布于 2天前 阅读 149 评论 2 点赞 2

spring cloud eureka server 集群配置 要点

翻看了不少网上的教程   千篇一律 那些该配置 不该配置很模糊 很多都是入门教程  经过个人实践 总结了eureka server 几个要点: springcloud 版本  Dalson.SR4 # eureka server 高可用 配置 要点 eureka.instance.prefer-ip-address 不建议设置为true # eureka.client.registerWithEureka、 eureka.client.fetchRegistry 都要设置为true 默认值都为true # eureka.instance.appname =spring.application.name # 重要 defaultZone 高可用 不要使用ip 应该使用相应的域名DNS来配置 也就是 eureka.instance.hostname 指定DNS   每个分片必须指定hostname  不然当前分片显示不可用 eureka: instance: hostname: cluster1 最后一条很重要 分片是否成功的关键 一定要用dns来配置 windows 下 改host文件  linux 或者其他环境一样 样例配置   采用 3个实例集群  8761->8762->8763->8761     application.yml 如下: 运行指定配置文件spring.profiles.active=配置项   例如在springboot 可执行jar路径下 命令行执行  java -jar discovery-server-1.0-SNAPSHOT.jar --spring.profiles.active=master 启动了master 配置    红字换cluster1 对应启...
NotFound403 发布于 3天前 阅读 165

常用的分布式事务解决方案介绍有多少种?

关于分布式事务,工程领域主要讨论的是强一致性和最终一致性的解决方案。典型方案包括: - **两阶段提交(2PC, Two-phase Commit)方案** - **eBay 事件队列方案** - **TCC 补偿模式** - **缓存数据最终一致性** # 一、一致性理论 分布式事务的目的是保障分库数据一致性,而跨库事务会遇到各种不可控制的问题,如个别节点永久性宕机,像单机事务一样的ACID是无法奢望的。另外,业界著名的CAP理论也告诉我们,对分布式系统,需要将数据一致性和系统可用性、分区容忍性放在天平上一起考虑。 两阶段提交协议(简称2PC)是实现分布式事务较为经典的方案,但2PC 的可扩展性很差,在分布式架构下应用代价较大,eBay 架构师Dan Pritchett 提出了BASE 理论,用于解决大规模分布式系统下的数据一致性问题。BASE 理论告诉我们:可以通过放弃系统在每个时刻的强一致性来换取系统的可扩展性。 ## 1、CAP理论 在分布式系统中: - **一致性(Consistency)** - **可用性(Availability)** - **分区容忍性(Partition Tolerance)** 3个要素最多只能同时满足两个,不可兼得。其中,分区容忍性又是不可或缺的。 ![ ][1] - **一致性**:分布式环境下多个节点的数据是否强一致。 - **可用性*...
鹏磊 发布于 2天前 阅读 192

Docker 容器操作

容器是 Docker 又一核心概念。简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
鹏磊 发布于 3周前 阅读 1242 点赞 3

使用Java 8 Optional避免空指针异常

> Optional可以让你的代码具有可读性,且会避免出现空指针异常。 都说没有遇到过空指针异常的程序员不是Java程序员,`null`确实引发过很多问题。Java 8中引入了一个叫做`java.util.Optional`的新类可以避免`null`引起的诸多问题。 我们看一下`null`引用能导致哪些危害。首先创建一个类`Computer`,结构如下图所示: ![输入图片说明](https://static.oschina.net/uploads/img/201801/11143707_99mL.gif "在这里输入图片标题") 当我们调用如下代码会怎样? ``` java String version = computer.getSoundcard().getUSB().getVersion(); ``` 上述代码看似是没有问题的,但是很多计算机(比如,树莓派)其实是没有声卡的,那么调用`getSoundcard()`方法可定会抛出空指针异常了。 一个常规的但是不好的的方法是返回一个null引用来表示计算机没有声卡,但是这就意味着会对一个空引调用`getUSB()`方法,显然会在程序运行过程中抛出控制异常,从而导致程序停止运行。想想一下,当你的程序在客户端电脑上运行时,突然出现这种错是多尴尬的一件事?  伟大计算机科学Tony Hoare曾经写到:"我认为null引用从1965年被创造出来导致了十亿美元的损失。当初使用null引用对我最大的诱...
刘亚涛 发布于 2周前 阅读 3815 评论 30 点赞 5

JAVA NIO知识点总结(5)——网络阻塞IO与非阻塞IO

非阻塞IO
HappyBKs 发布于 2周前 阅读 1089 评论 1

java使用mysql和redis如何解决“商品超卖”

商品超卖、超发
NO17 发布于 4天前 阅读 114

疯狂工作流讲义(第2版)基于Activiti6.x电子书

Activiti6 工作流 电子书
杨大仙的程序空间 发布于 2个月前 阅读 1392 点赞 1

Spring Cloud Stream 简明教程(持续更新)

Spring Cloud Stream 版本是:Ditmars.RELEASE 有错误的地方欢迎指出
-_-一条狗 发布于 1个月前 阅读 1601 评论 5

疯狂Spring Cloud微服务架构实战电子书

Spring Cloud 电子书
杨大仙的程序空间 发布于 2个月前 阅读 1715 评论 5 点赞 10

IDEA *.is registered as a Git root, but no Git repositories were found there.

报错详情: The directory C:\文件\ideaWorkSpace\seckill-master is registered as a Git root, but no Git repositories were found there. 点击右下角弹出窗口中的Configure 。这会在version contral (版本控制)选项卡上自动打开一个窗口 也可以通过File->Settings进行访问。 我选择列表中的问题条目目,然后单击红色减号将其删除。   另外的解决办法: .idea存储库中有一个文件夹不应该在那里。里面是与vcs相关的文件,可能包含一个不在你的电脑上的路径。 确保.git在PC上的项目中有一个文件夹。如果不是,那么如果需要启用vcs工具,则必须正确克隆该项目。这里有一个关于如何做到这一点的链接:Git基础知识,搜索克隆现有的存储库 然后,您需要关闭Android Studio,删除该.idea文件夹,然后再次打开Android Studio。它会重新创建.idea文件夹和问题应该解决。 参考自:https://stackoverflow.com/questions/43732446/registered-as-a-git-root-but-no-git-repositories-were-found-there ...
为了美好的明天 发布于 1个月前 阅读 337

手把手教你用1行Python代码实现FTP服务器 -- Pyftpdlib

当你想快速共享一个目录的时候,这是特别有用的,只需要1行代码即可实现。
kangvcar 发布于 3周前 阅读 3528 评论 12 点赞 6

SpringMVC返回图片的几种方式

后端提供服务,通常返回的json串,但是某些场景下可能需要直接返回二进制流,如一个图片编辑接口,希望直接将图片流返回给前端,此时可以怎么处理?
小灰灰Blog 发布于 5天前 阅读 646 评论 3 点赞 1

聊聊jdbc statement的fetchSize

## 序 本文主要研究一下jdbc statement的fetchSize ## fetchSize >这里以postgres jdbc driver为例,主要是因为postgres的jdbc driver有公开源码,而且命名比较规范。之前看oracle jdbc,由于没有源码,反编译出来一大堆var1,var2等的变量命名,非常晦涩。 >默认情况下pgjdbc driver会一次性拉取所有结果集,也就是在executeQuery的时候。对于大数据量的查询来说,非常容易造成OOM。这种场景就需要设置fetchSize,执行query的时候先返回第一批数据,之后next完一批数据之后再去拉取下一批。 但是这个有几个要求: - 数据库必须使用V3协议,即pg7.4+ - connection的autoCommit必须为false,因为开启autoCommit的话,查询完成cursor会被关闭,那么下次就不能再fetch了。另外ResultSet必须是ResultSet.TYPE_FORWARD_ONLY类型,这个是默认的。也就是说无法向后滚动。 - 查询语句必须是单条,不能是用分号组成的多条查询 ## 实例代码 ``` @Test public void testReadTimeout() throws SQLException { Connection connection = dataSource.getConnection(); //https://jdbc.postgresql.org/documentation/head/query.html connection.setAutoCommit(false); //NOTE 为了设置fet...
go4it 发布于 26分钟前 阅读 1

比特币与区块链文集

《通俗讲解比特币的原理及运作机制》 《区块链的入门教程》      
巴顿.太一 发布于 52分钟前 阅读 5

java native

Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。   可以将native方法比作Java程序同C程序的接口,其实现步骤:   1、在Java中声明native()方法,然后编译;   2、用javah产生一个.h文件;   3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);   4、将第三步的.cpp文件编译成动态链接库文件;   5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。   JAVA本地方法适用的情况 1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问 2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的 3.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。   首先写好JAVA文件  /*   * Created on 2005-12-19 Author shaoqi   */  package com.hode.hodeframework.modelupdate;  public class CheckFile  {      public native void displayHell...
为了美好的明天 发布于 59分钟前 阅读 2

Python中Django创建第一个项目(hello,world)

_**这里为了方便,我们使用pycharm社区免费版,免费版不具备支持Django和Web开发的直接功能,这个功能只在专业版在具备,可以方便不少。 但是作为新手,我们还是使用社区版来进行来发,这有助于我们弄清程序原理,帮助我们提高。**_ **在实际开发时,我们需要同时打开pycharm与命令行两个工具。** ### Django创建项目的一般步骤: 1. 新建工程 \>django-admin startproject mysite //mysite为工程名 2. 修改工程 \>python manage.py startapp helloapp //helloapp为应用名(关键,详见下文) 3. 运行工程 \>python manage.py runserver //用runserver开一个服务器 ## 注意两点: 创建工程时要cd定位到要创建工程的位置,之后修改该工程要cd到已创建的工程当中 另外,创建工程与修改工程一个用的是Django-admin,一个用到manage.py(这个前面不要落了python),不要混淆。 ### django-admin与manage.py 前者是django框架的全局管理工具,可以通过/>django-admin help查看其功能 主要有: />python manage.py help可以查看其主要功能 下面我们对第二部进行详细介绍: 修改工程命令执行完毕后,我们要进行以下操作: 1. 修改views.py文件 2. 修改URL路由...
涅文正 发布于 1小时前 阅读 2

volatile关键字

最近阅读完了·《深入理解Java虚拟机》的第12章,依样画葫芦的剖析一下volatile关键字
世界和平维护者 发布于 2小时前 阅读 1

常用mysql基础操作记录

最近工作上涉及到一些mysql的操作,很多都记不得了,要临时百度,在这里把用到的做个记录。因为负责的项目性质自身原因,基本上不会有关联查询,即使有也是各自查表再在service层里面过滤、筛选、包装返回。 - 添加字段 ``` alter table 表名 add column 字段名 类型 约束 [默认值 注释] [after 已有字段名] ``` - 添加普通索引 ``` alter table 表名 add index 索引名 (字段名) ``` 如: ``` alter table giveapp_backend.UserDevice add column jpushId varchar(100) NOT NULL DEFAULT '' COMMENT '设备推送id' after personId, add column appVersion varchar(30) DEFAULT NULL COMMENT '设备版本信息' after jpushId, add index idx_userdevice_appVersion (appVersion); ``` 这里的after是将字段加在指定字段的后面 - 删除字段 ``` alter table 表名 drop column 字段名 ``` 如: ``` alter table giveapp_backend.UserPushSetting drop column registrationId ``` - 修改字段类型 ``` alter table 表名 modify 字段名 类型 ``` 如: ``` ALTER TABLE giveapp_backend.UserPushSetting MODIFY registrationId varchar(100) null ``` - 修改字段名 ``` alter table 表名...
hensemlee 发布于 2小时前 阅读 2

idea永久激活

1.下载破解补丁:http://idea.lanyus.com/jar/JetbrainsCrack-2.6.10-release-enc.jar  2.放在bin目录下 3.bin中的idea.exe.vmoptions和idea64.exe.vmoptions文件添加 -javaagent:D:\IDE\ideA\IntelliJ IDEA 2017.3\bin\JetbrainsCrack-2.6.10-release-enc.jar 注意修改路径 4.输入http://idea.lanyus.com/   中的注册码
ty淡然 发布于 2小时前 阅读 2

复盘linux积蓄:构架搭建lnmp(配置)

虚拟主机、用户认证、域名重定向、nginx访问日志、日志切割、静态文件不记录日志和过期时间、防盗链、访问控制、nginx解析php、Nginx代理、Nginx负载均衡、配置ssl、php-fpm配置文件、php-fpm慢执行日志、open_basedir、php-fpm进程管理
历经35天的选择 发布于 2小时前 阅读 2

cubesviewer第一篇

1.    It is powered by the SQLAlchemy which supports multiple databases including PostgreSQL, MySQL, Oracle, simple sqlite and many others. 2.    Cubes install: url: http://cubes.readthedocs.io/en/v1.0.1/install.html 3.    Cubes purpose: Purpose is to provide a framework for giving analyst or any application end-user understandable and natural way of reporting using concept of data Cubes – multidimensional data objects. Analytical Workspace: The analyital workspace manages cubes, shared (public) dimensions, data stores, model providers and model metadata. Provides aggregation browsers and maintains database connections       Stores: Cube data are stored somewhere or might be provided by a service. We call this data source a data store. A workspace might use multiple stores to get content of the cubes. Supported SQL dialects (by SQLAlchemy) are: Drizzle, Firebird, Informix, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, SQLite, Sybase Model Providers: Model provider ...
gholay 发布于 2小时前 阅读 3

Linux下安装nginx教程 centos6

  一.安装依赖包 每次安装软件都必须,默认会少几个包,必须安装 yum install autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc   二.下载nginx和相关模块 nginx:可以去官网 http://nginx.org/ 下载最新版 wget http://nginx.org/download/nginx-1.7.8.tar.gz  缓存模块ngx_cache_purge:可以去 http://labs.frickle.com/nginx_ngx_cache_purge/ 下载最新版本 wget http://labs.frickle.com/files/ngx_cache_purge-2.2.tar.gz #解压 tar zxvf nginx-1.7.8.tar.gz tar zxvf ngx_cache_purge-2.2.tar.gz   三.编译安装  ./configure --user=www --group=www \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-mail \ --with-mail_ssl_module \ --add-module=../ngx_cache_purge-2.2 make & make install 安装好之后,默认的nginx根目录为 /usr/local/nginx     四.缓存配置例子 nginx配置的例子很多,就不赘述,直接问度娘吧. 举个使用缓存的例子: proxy_cache_path /tmp/cache keys_zone=tmpcache:10m; location / { proxy_pass http://127.0.0.1:8000; proxy_c...
平衡的轨迹 发布于 3小时前 阅读 2

Tomcat的server.xml配置

<!-- 而server端和web端都要暴露到外网。 所以配置两个context,使得client应用不需要添加服务名,直接使用IP即可访问; server可以通过http://xxx/server进行访问 --> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <!-- <Context path="" docBase="a" reloadable="true"...
wpfc 发布于 3小时前

线程安全解析(附带JVM内存结构和锁机制说明)

线程安全这块的之前没有好好总结,这里加上自己的理解,欢迎大家及时修正
WALK_MAN 发布于 3小时前 阅读 21 打赏 1

django第一个app,7

通过admin页面更好的管理 分开显示: polls/admin.py from django.contrib import admin from .models import Question class QuestionAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question_text']}), ('Date information', {'fields': ['pub_date']}), ] admin.site.register(Question, QuestionAdmin) 把一对多关联显示,这里额外显示3个 polls/admin.py from django.contrib import admin from .models import Choice, Question class ChoiceInline(admin.StackedInline): model = Choice extra = 3 class QuestionAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question_text']}), ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), ] inlines = [ChoiceInline] admin.site.register(Question, QuestionAdmin) choice列展示换位横向展示 class ChoiceInline(admin.TabularInline): 在数据列表里面展示更多的信息,字段和方法都可以 list_display = ('question_text', 'pub_date', 'was_published_rece...
NLGBZJ 发布于 4小时前 阅读 5

Java程序排查问题利器之Btrace

(一)Btrace的介绍 BTrace是Java的安全可靠的动态跟踪工具。 他的工作原理是通过 instrument + asm 来对正在运行的java程序中的class类进行动态增强,可以在不用重启的情况下监控系统运行情况,方便的获取程序运行时的数据信息,如方法参数、返回值、全局变量和堆栈信息等,并且做到最少的侵入,占用最少的系统资源。 正如上面描述的一些特性,所以btrace一般是用来排查生产环境jvm问题的一款利器,使用它不用再担心应用程序的日志打的不够全,不够细,也不用为了排查问题一遍遍的重启程序。 (二)Btrace的一些限制 由于Btrace会把脚本逻辑直接侵入到运行的代码中,所以在使用上做很多限制: 1、不能创建对象 2、不能使用数组 3、不能抛出或捕获异常 4、不能使用循环 5、不能使用synchronized关键字 6、属性和方法必须使用static修饰 此外不恰当的使用BTrace可能导致生产程序直接挂掉,所以在上生产环境之前,务必在开发环境充分验证脚本的正确性。 (三)Btrace能干什么 (1)分析任意接口或者方法的耗时情况 (2)分析不断的添加数据时,Map的扩容情况 (3)分析那个方法里面调用了System.gc()方法,并打印出其调用栈 (4)某些方法抛出异常时,分析其运行参数 (5)统...
九劫散仙 发布于 4小时前 阅读 2

GDI绘制时钟效果,与系统时间保持同步,基于Winform

018年工作之余,想起来捡起GDI方面的技术,特意在RichCodeBox项目中做了两个示例程序,其中一个就是时钟效果,纯C#开发。这个CSharpQuartz是今天上午抽出一些时间,编写的,算是偷得浮生半日休闲吧。先来看看效果图吧:
李朝强 发布于 4小时前 阅读 5

ctdb选举过程

``` 1、集群共有0、1、2三个节点。现有0、1号节点在线。0为运行时间最长的节点(默认master),2号节点加入。 2、2号设置master为2,发起选举(A),设置选举超时时间为3秒。 3、 0号收到2号的选举请求A,拒绝,设置master为0,并延时500ms后发起选举(B),设置选举超时时间为3秒。 1号收到2号的选举请求A,拒绝,设置master为1,并延时500ms后发起选举(C),设置选举超时时间为3秒。 4、 0号收到1号的选举请求C,拒绝,设置master为0,并延时500ms后发起选举(D),设置选举超时时间为3秒(最后一次发起选举)。 2号收到1号的选举请求C,同意,设置master为1。 5、 2号收到0号的选举请求B,同意,设置master为0。 1号收到0号的选举请求B,同意,设置master为0。 6、 2号收到0号的选举请求B,同意,设置master为0。 1号收到0号的选举请求B,同意,设置master为0。 ```
itfanr 发布于 4小时前 阅读 5

Dubbo的Filter执行顺序分析

Dubbo Filter 顺序
宸明 发布于 5小时前 阅读 2

tomcat8配置

tomcat8配置
xixingzhe 发布于 5小时前 阅读 3

JAVA懒开发:对象虚拟化,全程无实体类

用一个封装的MAP来接收前端的任何参数,和DB返回的结果对象。当需求要改变参数时,如果 此参数不参与逻辑业务,之关联sql执行条件,这时就只需改sql了。代码灵活度较高,但是无实体时,内容没的实体类直观。优缺点都很明显,看个人爱好,自己选择...
边鹏_尛爺鑫 发布于 5小时前 阅读 1

分布式和集群区别?什么是云计算平台?分布式的应用场景?

分布式是指将一个业务拆分不同的子业务,分布在不同的机器上执行,集群是指多台服务器集中在一起,实现同一业务,可以视为一台计算机,一个云计算平台,就是通过一套软件系统把分布式部署的资源集中调度使用。要应对大并发,要实现高可用,既需要分布式,也离不开集群。
鹏磊 发布于 5小时前 阅读 4

在spring中使用自定义注解注册监听器

java中监听器的实现大都是利用接口进行回调,使用比较麻烦。之后,spring框架中出现了在方法上加一个注解就可以实现监听的用法,特别简洁。本文就是在分析监听器回调原理的基础上,在spring环境中使用自定义的注解实现一个监听器。
silenceyawen 发布于 2天前 阅读 1493 评论 6 点赞 2

一篇文章看懂Java并发和线程安全(一)

一、前言     长久以来,一直想剖析一下Java线程安全的本质,但是苦于有些微观的点想不明白,便搁置了下来,前段时间慢慢想明白了,便把所有的点串联起来,趁着思路清晰,整理成这样一篇文章。 二、导读     1、为什么有多线程?     2、线程安全描述的本质问题是什么?     3、Java内存模型(JMM)数据可见性问题、指令重排序、内存屏障 三、揭晓答案 1、为什么有多线程     谈到多线程,我们很容易与高性能画上等号,但是并非如此,举个简单的例子,从1加到100,用四个线程计算不一定比一个线程来得快。因为线程的创建和上下文切换,是一笔巨大的开销。     那么设计多线程的初衷是什么呢?来看一个这样的实际例子,计算机通常需要与人来交互,假设计算机只有一个线程,并且这个线程在等待用户的输入,那么在等待的过程中,CPU什么事情也做不了,只能等待,造成CPU的利用率很低。如果设计成多线程,在CPU在等待资源的过程中,可以切到其他的线程上去,提高CPU利用率。     现代处理器大多含有多个CPU核心,那么对于运算量大任务,可以用多线程的方式拆解成多个小任务并发的执行,提高计算的效率。     总结起来无非两点,提高CPU的利用率、...
冷血狂魔 发布于 3天前 阅读 2517 评论 7 点赞 11

Nginx+SSL+Tomcat+CDN部署总结,已实践有效~

之前在度娘搜索资料,无意间看到一些个人站点的博客都用了https协议,在浏览器地址栏中被标记为绿色的“安全”,前些天特地给自己负责的小项目升级成https协议,其优点这里不再赘述,小伙伴们可以自行百度,今天把整合部署分享在这里,希望小伙伴们少走弯路~ 效果如下: 软件版本如下: System Centos 6.5 Nginx Tengine/2.1.2 (nginx/1.6.2) SSL证书 Let's Encrypt 免费SSL证书 Tomcat Apache-tomcat-8.0.47 CDN Cloudflare.com   一、生成SSL证书 首先我们创建一个用来存放letsencrypt生成证书项目的路径并进入: cd /usr/local/letsencrypt 接下来我们克隆letsencrypt项目: git clone https://github.com/letsencrypt/letsencrypt 开始生成SSL证书: ./letsencrypt-auto certonly --standalone --email test@qq.com -d www.test1.com -d www.test2.com --agree-tos 这里一定注意: (1). 域名绑定在国内DNS服务器无法生成,需要先将DNS服务器切换到DNS服务商,例如ClouldFlare、Godaddy、Dnsever后才能正常生成! (2). web服务需要处于关闭状态,注意关闭nginx和80端口的占用!(不间断服务方式生成可以自行百度) (3). -d 代表domain 可以同时生成多个域名对应证书,生...
lu54977212 发布于 1周前 阅读 3117 评论 22 点赞 6

使用Java 8 Optional避免空指针异常

> Optional可以让你的代码具有可读性,且会避免出现空指针异常。 都说没有遇到过空指针异常的程序员不是Java程序员,`null`确实引发过很多问题。Java 8中引入了一个叫做`java.util.Optional`的新类可以避免`null`引起的诸多问题。 我们看一下`null`引用能导致哪些危害。首先创建一个类`Computer`,结构如下图所示: ![输入图片说明](https://static.oschina.net/uploads/img/201801/11143707_99mL.gif "在这里输入图片标题") 当我们调用如下代码会怎样? ``` java String version = computer.getSoundcard().getUSB().getVersion(); ``` 上述代码看似是没有问题的,但是很多计算机(比如,树莓派)其实是没有声卡的,那么调用`getSoundcard()`方法可定会抛出空指针异常了。 一个常规的但是不好的的方法是返回一个null引用来表示计算机没有声卡,但是这就意味着会对一个空引调用`getUSB()`方法,显然会在程序运行过程中抛出控制异常,从而导致程序停止运行。想想一下,当你的程序在客户端电脑上运行时,突然出现这种错是多尴尬的一件事?  伟大计算机科学Tony Hoare曾经写到:"我认为null引用从1965年被创造出来导致了十亿美元的损失。当初使用null引用对我最大的诱...
刘亚涛 发布于 2周前 阅读 3815 评论 30 点赞 5

Elastic Search搜索引擎在SpringBoot中的实践

## 实验环境 - ES版本:5.3.0 - spring bt版本:1.5.9 首先当然需要安装好elastic search环境,最好再安装上可视化插件 elasticsearch-head来便于我们直观地查看数据。 当然这部分可以参考本人的帖子: 《centos7上elastic search安装填坑记》 https://www.jianshu.com/p/04f4d7b4a1d3 我的ES安装在http://113.209.119.170:9200/ 这个地址(该地址需要配到springboot项目中去) --- ## Spring工程创建 这部分没有特殊要交代的,但有几个注意点一定要当心 - 注意在新建项目时记得勾选web和NoSQL中的Elasticsearch依赖,来张图说明一下吧: ![创建工程时勾选Nosql中的es依赖选项](http://upload-images.jianshu.io/upload_images/9824247-785048db3dca0957.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 项目自动生成以后pom.xml中会自动添加`spring-boot-starter-data-elasticsearch`的依赖: ``` org.springframework.boot spring-boot-starter-data-elasticsearch ``` - 本项目中我们使用开源的基于restful的es java客户端`jest`,所以还需要在pom.xml中添加`jest`依赖: ``` io.searchbox jest ``` - 除此之外还必须添加`jna`的依赖: ``` net.java.dev.jna...
hansonwang 发布于 2周前 阅读 2163 评论 13 点赞 4

Spring Boot缓存实战 Redis + Caffeine 实现多级缓存

在前文我们介绍了如何使用Redis或者Caffeine来做缓存。 - [Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2](http://www.jianshu.com/p/e53c1b60c6e1) - [Spring Boot缓存实战 Caffeine](http://www.jianshu.com/p/c72fb0c787fc) # 问题描述: 通过使用redis和Caffeine来做缓存,我们会发现一些问题。 - 如果只使用redis来做缓存我们会有大量的请求到redis,但是每次请求的数据都是一样的,假如这一部分数据就放在应用服务器本地,那么就省去了请求redis的网络开销,请求速度就会快很多。但是使用redis横向扩展很方便。 - 如果只使用Caffeine来做本地缓存,我们的应用服务器的内存是有限,并且单独为了缓存去扩展应用服务器是非常不划算。所以,只使用本地缓存也是有很大局限性的。 至此我们是不是有一个想法了,两个一起用。将热点数据放本地缓存(一级缓存),将非热点数据放redis缓存(二级缓存)。 # 缓存的选择 - 一级缓存:Caffeine是一个一个高性能的 Java 缓存库;使用 Window TinyLfu 回收策略,提供了一个近乎最佳的命中率。[Caffeine 缓存详解](http://www.jianshu.com/p/9a80c662dac4) - 二级缓存:redis是一高性能、高可用的key-value数据库,支持多...
xiaolyuh 发布于 3周前 阅读 3259 评论 24 点赞 7

spring boot redis分布式锁

> 随着现在分布式架构越来越盛行,在很多场景下需要使用到分布式锁。分布式锁的实现有很多种,比如基于数据库、 _zookeeper_ 等,本文主要介绍使用 _Redis_ 做分布式锁的方式,并封装成spring boot starter,方便使用 #### 一. _Redis_ 分布式锁的实现以及存在的问题 锁是针对某个资源,保证其访问的互斥性,在实际使用当中,这个资源一般是一个字符串。使用 _Redis_ 实现锁,主要是将资源放到 _Redis_ 当中,利用其原子性,当其他线程访问时,如果 _Redis_ 中已经存在这个资源,就不允许之后的一些操作。spring boot使用 _Redis_ 的操作主要是通过 _RedisTemplate_ 来实现,一般步骤如下: 1. 将锁资源放入 _Redis_ (注意是当key不存在时才能放成功,所以使用 _setIfAbsent_ 方法): ``` redisTemplate.opsForValue().setIfAbsent("key", "value"); ``` 2. 设置过期时间 ``` redisTemplate.expire("key", 30000, TimeUnit.MILLISECONDS); ``` 3. 释放锁 ``` redisTemplate.delete("key"); ``` 一般情况下,这样的实现就能够满足锁的需求了,但是如果在调用 _setIfAbsent_ 方法之后线程挂掉了,即没有给锁定的资源设置过期时间,默认是永不过期,那么这个锁就会一直存在。...
J猿 发布于 3周前 阅读 3984 评论 10 点赞 11

手把手教你用1行Python代码实现FTP服务器 -- Pyftpdlib

当你想快速共享一个目录的时候,这是特别有用的,只需要1行代码即可实现。
kangvcar 发布于 3周前 阅读 3528 评论 12 点赞 6

J2EE分布式框架--开发环境部署

环境搭建: 1.环境准备 1.开发工具: Eclipse IDE(建议使用高一点的版本) 2.JDK版本:JDK1.7 3.项目管理: Maven3.1.1 2.安装步骤 1.安装jdk1.7并配置环境变量(相信大家都会做,这里不再做重复的说明) 2.安装maven:maven安装过程就是解压缩的过程(我已经帮大家解压了, 目录:E:\myprj\jeesz-maven\apache-maven-3.1.1),为了方便大家,这边已经提供了相关的安装包,会在打包的目录下共享。
windywindy 发布于 4周前 阅读 1992 点赞 3

Mysql通讯协议分析

1.Mysql的连接方式 要了解Mysql的通讯协议,首先需要知道是以哪种连接方式去连接Mysql服务器的;Mysql的主要连接方式包括:Unix套接字,内存共享,命名管道,TCP/IP套接字等。 1.1Unix套接字 在Linux和Unix环境下,可以使用Unix套接字进行Mysql服务器的连接;Unix套接字其实不是一个网络协议,只能在客户端和Mysql服务器在同一台电脑上才可以使用,使用方式也很简单: root@root ~]# mysql -uroot -proot mysql> show variables like 'socket'; +---------------+---------------------------+ | Variable_name | Value | +---------------+---------------------------+ | socket | /var/lib/mysql/mysql.sock | +---------------+---------------------------+ 1 row in set (0.00 sec) 以上命令查询Unix套接字文件的位置; 1.2命名管道和内存共享 在window系统中客户端和Mysql服务器在同一台电脑上,可以使用命名管道和共享内存的方式, 命名管道开启:–enable-named-pipe=on/off; 共享内存开启:–shared-memory=on/off; 1.3TCP/IP套接字 在任何系统下都可以使用的方式,也是使用最多的连接方式,本文要介绍的通讯协议也是基于此连接方式...
ksfzhaohui 发布于 4周前 阅读 2503 评论 8 点赞 6

ThreadPoolExecutor详解

本文讲解了ThreadPoolExecutor的主要api,线程池调度方式,以及核心方法的实现原理
爱宝贝丶 发布于 1个月前 阅读 2917 评论 7 点赞 5

土鳖的jsp改造

背景 前端世界变化太快,各种模板各种新的技术框架出现。 虽然如此,我们java后端也有模板三宝 jsp freemarker velocity 当然还有一些groovy的模板等等 我司目前仍然有老项目在使用jsp   问题 jsp存在一个比较麻烦的问题在于 无法写通用模板 通常我们会在一个jsp页面include各种header layout 如果当更改整体结构的时候会比较困难 比如现在 大量的js存放在公共reference中 导致js位置在上 而可能阻塞页面render【部分jsp中也有相关script可能对公共js依赖】 现状 用户抱怨前台页面出现太慢 白屏太久 原因 由于上古继承下来的jsp中有两个公共jsp 分别为reference和head 两个jsp都在每一个jsp都被引入 当有公共js时或者css开发都是直接加到reference或者jsp中【项目太久】 当js加载越来越多 由于没有使用现代化的前端开发方式 js的依赖关系太重 js同步加载阻塞html的渲染那么导致出现白屏太久! 方案 使用其他模板引擎 比如velocity或者freemarker===》不太现实 更换代价比较高 每一个页面增加foot.jsp的引用 把大部分的js引入挪到最后 尽量不导致渲染被阻塞  ===》cost比较高,以后更改新的前端layout代价也很高 万一某天产品经理抽风想要所有的页面中增加右边栏 增加foo...
Mr_Qi 发布于 1个月前 阅读 1539 评论 28

再次吐槽红薯的J2Cache

序言 以前写过两篇吐槽@红薯 的文章,吐槽一下J2Cache和扒掉红薯的内裤-深入剖析J2Cache,应该说受到了广大Oscer们的一致认同,作为一个站长不好好的搞网站非要搞程序,说什么要做站长里面代码写得最好的,写代码里面网站办的最好的。好吧,这些我都忍了,但是,居然赤果果的点名叫嚣: 作为一个程序员,作为一个连续扒过两次红薯内裤的喷子,为了维护程序员的尊严,为了广大OSCER们不要掉到红薯的坑里,为了世界和平,必须狠狠的砍他。 正文 槽点一:目录结构不规范 上眼首先来找test目录想看看这么测试和使用的,居然找不到,再仔细看居然有个Java类叫 CacheTester 再看resource和src居然不在main目录下,是我已经out了吗? 修改方式,完全按照Java&Maven的开发和代码组织规范老老实实的执行。 槽点二:测试方式不规范 下面就是所谓的测试代码了 /** * */ package net.oschina.j2cache; import java.io.BufferedReader; import java.io.InputStreamReader; /** * 缓存测试入口 * @author Winter Lau */ public class CacheTester { public static void main(String[] args) { System.setProperty("java.net.preferIPv4Stack", "true"); //Disab...
悠悠然然 发布于 1个月前 阅读 6157 评论 70 点赞 9

搭建Keepalived + Nginx + Tomcat的高可用负载均衡架构

1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量,需要进行服务集群化部署,本文主要介绍服务端Tomcat多实例部署,以及如何保证web服务的高可用方案。 Nginx 是一个高性能的 HTTP反向代理服务器 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免服务的单点故障 Tomcat 是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器。 2 Nginx的高可用负载均衡架构 如下图:为典型的Tomcat服务多实例部署的架构图 (1)用户通过域名请求到DNS,由DNS解析域名后返回对应的IP地址,该IP及为Keepalived映射服务器的虚拟IP (2)通过该虚拟IP访问到对应的负载均衡器(Nginx),这里Nginx部署两个,然后通过Keepalived来保证NG的高可用,正常情况下由Keepalived-M将虚拟IP映射转发至Nginx-M,如果Nginx-M出现故障,此时Keepalived会切换至Keepalived-S开始工作,从而保证了NG的单点故障问题。 (3)通过Nginx负载均衡器,将请求路由到对应的Tomcat服务。 3 搭建Keepalived + Nginx + To...
FEINIK 发布于 1个月前 阅读 4331 评论 22 点赞 10

如何愉快的使用MQ-详述各种功能场景

  消息队列(MQ)是一种不同应用程序之间(跨进程)的通信方法。应用程序通过写入和检索出入列队的数据(消息)来通信,而无需通过专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用(Remote Procedure Call. RPC)的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。这样天然的就实现了异步的目标。那么MQ还有哪些功能场景呢。下面逐一介绍。 解耦 解耦.png MQ最直接的使用场景就是可以将两个系统进行解耦,比如我们的货款抵扣业务场景,用户生成订单发送MQ后立即返回,结算系统去消费该MQ进行用户账户金额的扣款。这样订单系统只需要关注把订单创建成功,最大可能的提高订单量,并且生成订单后立即返回用户。而结算系统重点关心的是账户金额的扣减,保证账户金额最终一致。这个场景里面还会涉及到重试幂等性问题,后面有介绍。 削峰填谷 还是以订单系统和结算系统场景为例,如果订单系统通过RPC框架来调用结算系统,在有高峰促销的情况下生成订单的量会非常大,而且由于生成订单的速度也非常快,这样势必会给结算系统造成系统压力,...
新栋BOOK 发布于 1个月前 阅读 4007 评论 21 点赞 9

ElasticSearch单机部署多实例环境

ElasticSearch6.0.0
ssdut_buster 发布于 2个月前 阅读 1525 评论 8

logback是怎么知道java代码的行数的?

使用logback,忽然想到这个问题,然后问了几个同事都没研究过,我来看看logback是如何知道的 打断点如下: stop in com.sql.mysql.sharding.plugin.ExecutorInterceptor.intercept stop in ch.qos.logback.classic.Logger.callAppenders stop in ch.qos.logback.core.encoder.LayoutWrappingEncoder.encode encode的java函数如下: public byte[] encode(E event) { String txt = layout.doLayout(event); return convertToBytes(txt); } 那么layout的值是啥呢? main[1] print layout layout = "ch.qos.logback.classic.PatternLayout("%level %date , %logger{36} [%file:%line] , Thread-[%thread] - %msg%n")" 就是我们自己定义的格式,好,继续往下走。 碰到了这个函数 ​ protected String writeLoopOnConverters(E event) { StringBuilder strBuilder = new StringBuilder(INTIAL_STRING_BUILDER_SIZE); Converter<E> c = head; while (c != null) { c.write(strBuilder, event); c = c.getNext(); } return strBuilder.toString(); } ​ 这里看来是做了一个字...
强子哥哥 发布于 2个月前 阅读 2050 评论 17 点赞 7

Spring boot + LayIM + t-io 好友申请通知的实现

本文包含内容:用户主页面信息加载,绑定。好友申请,t-io服务端主动推送,layim消息盒子的数据绑定。
丶Pz 发布于 2个月前 阅读 3202 评论 22 点赞 6

Spring Cloud(一)服务的注册与发现(Eureka)

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
鹏磊 发布于 2个月前 阅读 1349

Spring Boot 定制与优化内置的Tomcat容器

通过定制与优化内置的Tomcat来提应用的服务性能。
Hanson_Q 发布于 2个月前 阅读 3179 评论 10 点赞 13
顶部