开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

Spring Cloud Feign 熔断配置的一些小坑

1.在使用feign做服务调用时,使用继承的方式调用服务,加入Hystrix的熔断处理fallback配置时,会报错,已解决。 2.使用feign默认配置,熔断不生效,已解决。
FutureElement 发布于 1天前 阅读 220

微服务架构项目实战:Spring Boot 如何创建简单的 REST 服务

你将学习 什么是 REST 服务? 如何使用 Spring Initializr 引导创建 Rest 服务应用程序? 如何创建获取 REST 服务以检索学生注册的课程? 如何为学生注册课程创建 Post REST 服务? 如何利用 postman 执行 rest 服务? 本教程使用的 rest 服务 在本教程中,我们将使用适当的 URI 和 HTTP 方法创建三个服务: @GetMapping(“/ students / {studentId} / courses”):您可以使用请求方法 Get 和示例 uri / students / Student1 / courses 来查询特定学生已注册的课程。 @GetMapping(“/students/{studentId}/courses/{courseId}”):您可以使用请求方法 Get 和示例 uri / students / Student1 / courses / Course1 获取特定学生的特定课程。 @PostMapping(“/students/{studentId}/courses”) :您可以通过向 UURI /students/Student1/courses 发送 POST 请求来为学生注册一门课程 您将需要的工具 Maven 3.0+ 是您的构建工具 你最喜欢的 IDE。我们使用 Eclipse。 JDK 1.8+ 完整的 spring booot rest Maven 项目代码示例子 我们的 Github 存储库包含所有代码示例 - https://github.com/in28minutes/in28minutes.github.io/tree/master/code-zip-files 带有单元和集成测试的 ...
烂猪皮 发布于 2天前 阅读 297 评论 2

老旧Java Web应用实现增量自动化部署的一个方案

本文介绍的方案主要针对老旧Java Web应用的增量部署,全量部署实现起来更简单。 其他关键词:PaaS、Git、自动化部署、持续集成、jgit比较两个分支的差异
joock 发布于 2天前 阅读 291

ActiveMQ关于WSS的配置(SSL)

ActiveMQ配置wss的一项记录,查阅了大把资料发现没能解决问题,耗费了我一天时间,后来自行思考后发现,原来确实是这样;在此分享出来还是希望需要的同学少走弯路
葛传艺 发布于 2天前 阅读 96

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

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

spqrk通过rdd和dataset实现相同sql操作

待分析的数据文件格式,内容为nginx的日志记录,内容已经被处理过,已经转为只记录ip和url的txt文件,内容如下: rdd读取txt文件: public static void rdd(){ SparkConf conf = new SparkConf().setAppName("name_rdd").setMaster("local[4]"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD<String> logRdd = sc.textFile(textFile); JavaRDD<LogInfo> infoRdd = logRdd.map(new Function<String, LogInfo>() { public LogInfo call(String line) throws Exception{ String[] strs = line.split(" "); LogInfo log = new LogInfo(); if(strs.length == 2){ //LogInfo log = new LogInfo(); log.setIp(strs[0]); log.setUrl(strs[1]); } else{ log.setIp(""); log.setUrl(""); } return log; } }); // rdd1(infoRdd); // rdd2(infoRdd); /...
penngo 发布于 3天前 阅读 125 点赞 1

Elasticsearch source filter检索案例分享

the best elasticsearch highlevel java rest api-----bboss
bboss 发布于 3天前 阅读 194

数据权限管理中心 - 基于mybatis拦截器实现

基于mybatis拦截器实现简单的数据权限管理中心
GMarshal 发布于 4天前 阅读 764 评论 8 点赞 3

什么是stomp?spring-boot websocket stomp服务构建

一篇简单的了解WebSocket/Stomp的文章,基于spring-boot一步一步搭建一个WebSocket stomp服务
genghz 发布于 4天前 阅读 361 评论 1 点赞 1

Ubuntu 编译ffmpeg 实现GPU 转码

    前言,公司转码集群服务器资源有限,需要考虑GPU方案,本文记录下整个实现ffmpeg gpu 转码的过程。          该文章后续仍在不断的更新修改中, 请移步到原文地址 https://my.oschina.net/u/2950272/blog 环境: DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS" 注意,这里机器启动级别调低,不要加载桌面系统。 本机是2核4G 普通硬盘,gpu 型号:GTX950M 第一部分,安装cuda 8:     1.1 查看是否有显卡: lspci | grep -i nvidia     1.2 查看操作系统是否cuda 官方支持: uname -m && cat /etc/*release     1.3 安装gcc g++ 等编译依赖基础库 apt-get install gcc g++ build-essential     1.4 下载安装cuda 下载cuda: wget --no-check-certificate https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 安装 cuda 源: dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 添加源: deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 / 更新缓存: apt-get update 安装cuda: apt-get i...
鼎铭 发布于 4天前 阅读 1753 评论 23 点赞 4

【开源】Tseer:Tars名字服务功能的轻量化实现

TSeer是一套服务注册发现容错的方案,是对Tars名字服务功能的轻量化。它凭借轻巧灵便、对业务的侵入性低、支持多种负载均衡算法、提供可靠故障容错策略等优势,在腾讯浏览器、应用宝、管家、手机书城、腾讯文学、广点通等众多业务中广泛采用,目前日均承载百亿级的请求量。
腾讯开源 发布于 4天前 阅读 26

提交本地jar到Maven中央仓库(Windows&码云gitee托管代码)的那些小事

提交本地jar到Maven中央仓库(windows)的那些小事 如会遇到 401 403 等错误 使用是gitee(码云)托管的源代码
小帅帅丶 发布于 4天前 阅读 236

nginx源码分析-多进程socket的处理

这篇文章主要分析的是linux及windows的socket处理,如何避免惊群及进程间负载均衡的探讨, 这里的惊群主要是指多进程对于新建的连接如何避免同时争用accept现象的处理。 ### 进程的创建 * linux > 进程创建的方式主要通过fork来创建出子进程 ```c // src/os/unix/ngx_process.c ngx_pid_t ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data, char *name, ngx_int_t respawn) { ... pid = fork(); ... } ``` * windows > 进程创建的方式主要通过CreateProcess来创建出子进程,并且通过非继承的方式创建子进程(即子进程不共享父进程的文件句柄)。 ```c // src/os/win32/ngx_process.c ngx_pid_t ngx_execute(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx) { ... if (CreateProcess(ctx->path, ctx->args, NULL, NULL, 0, //此变量为0表示句柄不继承 CREATE_NO_WINDOW, NULL, NULL, &si, &pi) == 0) { ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_errno, "CreateProcess(\"%s\") failed", ngx_argv[0]); return 0; } ... } ``` ### ListenSocket的建立 * linux > 由主进程先监听端口, 监听完后fork新的子进程共享父进程的socket句柄,所以在linux中...
tickbh 发布于 5天前 阅读 431 点赞 1

Elasticsearch search after分页查询案例分享

The best elasticsearch highlevel java rest api-----bboss
bboss 发布于 5天前 阅读 356 评论 1

spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求

# spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求 有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想,是真的么?,忙到这几个字都没时间打么?毕竟大家都很忙的,所以忙并不是啥理由. 那是因为啥呢?感觉就只有一个理由能站得住脚了,就是因为"懒". 哈哈.... 尬聊了一段,活跃下气氛,下面进入正题 ## **场景** 在实际工作中,大家可能也都遇到过这样的情况 : 一个正在更新迭代过程中项目,会收到大量业务部门的需求,这些需求可能会来自于不同业务部门,或者不同的产品经理 而项目的onwer则需要接收到这些需求,对这些需求进行初步的分析和排期,但是在排期的过程中,会有这样一种尴尬的情况发生. 比如,有两个互不嗒噶的产品经理,针对同一功能点,提出了两个不同业务改造的需求点,两个需求点要求上线的时间很接近,但是又出于某种原因,不能同时上线,或者产品经理根本无法确定上线时间,而告诉你尽快完成开发/测试,他则根据实际情况确定业务需求的发布时间 那么,对于这种情况,通常会采用开分支的方式进行开发,即不同版本的并行需求的开发在不同分支上同时进行开发,那么,团队成员(开发/测试),则可以同时的开展工作...
wangkang80 发布于 5天前 阅读 408

RabbitMQ实战:界面管理和监控

> 本系列是「RabbitMQ实战:高效部署分布式消息队列」书籍的总结笔记。 上一篇总结了可能出现的异常场景,并对RabbitMQ提供的可用性保证进行了分析,在出现服务器宕机后,仍然可以正常服务。另外,需要尽快恢复异常的服务器,重新加入集群,推送未消费的消息,通过监控可第一时间接收到错误并进行处理。 另外,我们想主动了解消息堆积和消费的情况,以及服务器节点的压力,RabbitMQ提供了几种方式便捷、直观的了解,包括Web管理插件、REST API、rabbitmqadmin脚本。 通过介绍,你会了解到: * web管理插件 * REST API * rabbitmqadmin脚本 * Nagios和监控RabbitMQ ### web管理插件 RabbitMQ的插件是由Erlang语言写的,并且和服务器一同运行在同一个Erlang VM中,通过下面的命令启用web管理插件: ``` java sudo ./rabbitmq-plugins enable rabbitmq_management ``` 启动之后,访问15672端口,可看到Web管理页面主页面: ![RabbitMQ主页面](http://oc3r3rke2.bkt.clouddn.com/15236961623170.jpg) ##### 添加用户 默认会提供一个默认用户guest,密码也是guest,线上环境需要创建一个新用户,并把guest用户删除。 首先切换到Admin标签页,可以查看或添加用户,添加用户时,可...
情情说 发布于 5天前 阅读 636

rdm 在mac上编译

关于rdm,在mac版本上,开始订阅更新或者build source,索引尝试了下后者方案,现分享下   1.  git clone 资源 到本地 http://docs.redisdesktop.com/en/latest/install/#build-from-source   ps: git clone --recursive https://github.com/uglide/RedisDesktopManager.git -b 0.9 rdm && cd ./rdm   ``` Install XCode with xcode build tools Install Homebrew Build RDM dependencies cd ./src && ./configure ``` ps: 我这里 build的时候 libssh2有错误,这个和系统有关我这边是mac 10.13.3 ,可以编辑 configure 注解掉; 当然你本地环境还是要安装libssh2 ,依赖了此库的! 2. 安装 qt ,这里使用 brew install  qt ,最新版本 ,如果不是 更新下源,我这是5.10.1; 3.修改resource下的Info.plist.sample-->Info.plist 4.  cd  ./src/,笔者编译发现 ,注解掉的 release 模块配置针对Crash Reporter好像有错误,下面是修改后的,编译的时候无法找到Crash Reporter 路径,在qmake之前 也注解掉吧; unix:macx { # OSX     QT += svg     CONFIG += c++11     debug: CONFIG-=app_bundle     release: DESTDIR = ./../bin/osx/release     debug:   ...
石头哥哥 发布于 6天前 阅读 18

SpringBoot+Mybatis,返回Map的时候,将Map内的Key转换为驼峰的命名表达式

遇见这个问题,是公司的小伙伴跟我说,每次使用mybatis的时候,简单的连表查询,用Map接收的时候,都是像DB定义的字段一样,类似以下 student_name,student_id,没有转换为驼峰,但是又不能因为这一个定义一个javabean来映射数据库字段集合,这样,会有无穷无尽的javabean,完全不是办法,然后我看了下mybatis-spring-boot的配置文档http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/,发现有这么个属性   mybatis.configuration.map-underscore-to-camel-case=true 看着属性意思,很像是 map 下划线转换为驼峰,然后我天真的以为,加个这个,就会将Map里面的key转换为驼峰的命名方式,然后我自己测试了一下,发现自己还是太天真,没转过来,该是什么还是什么(心里面是B了狗了).... 没办法,接着找了了一下,发现官方文档http://www.mybatis.org/mybatis-3/configuration.html#properties,描述过这个的作用  才发现,这个属性的作用,是作用于javabean的field的,并不是map,ㄟ( ▔, ▔ )ㄏ,那没办法了,只能自己动手了     -------------------------------我是分割线-------------------------------------- 既然 map-underscore-to-camel-case 不能作用于map,那么...
贺小五 发布于 6天前 阅读 625 评论 2

以太坊智能合约开发第五篇:字符串拼接—Solidity

上一篇,我们实现了一个简单的智能合约。用户输入什么字符串,合约就原样返回什么。在文章最后抛出了一个问题:如果我们事先在合约里定义好 **Hello** 字符串,如何与 **name** 变量进行字符串拼接? 在智能合约里进行字符串的拼接可不是一件简单的事情。本篇就来介绍智能合约里的字符串拼接。 ### 尝试 我们先用绝大部分语言都通用的连接符 ***+*** 和 ***.*** 来尝试着修改代码: ```javascript //pragma关键字:版本申明。 //用来指示编译器将代码编译成特定版本,以免引起兼容性问题 //此处不支持0.4.0之前的编译器,也不支持0.5.0之后的编译器(条件为 ^) pragma solidity ^0.4.0; //contract关键字:合约申明 //和Java、PHP中的class类似 //此处是申明一个名为Hello的合约 contract Hello { string str="Hello "; //public: 函数访问属性(后续文章为详细阐述) //returns (string): 定义返回值类型为string function say(string name) public returns (string) { return str + name; } } ``` 运行 ***node deploy.js*** 部署脚本后,抛出了一个异常: > TypeError: Operator + not compatible with types string storage ref and string memory > return str + name...
Marser_cn 发布于 6天前 阅读 128 评论 1

以太坊智能合约开发第四篇:实现Hello World智能合约

> 原文发表于:[以太坊智能合约开发第四篇:实现Hello World智能合约](https://www.marser.cn/article/139.html) 绝大部分开发者学习一门语言的时候,都是从输出一个 ***Hello World*** 开始。我们也从实现一个 ***Hello World*** 合约为切入点,开始进入智能合约的世界吧。 ### 环境准备 安装好 ***node*** 和 ***npm***。这里对node和npm的安装过程,不做详细介绍。本篇依赖的环境版本: > Node : v8.9.0 > Npm: 5.5.1 在你的代码目录里,创建名为 ***smartcontract*** 的文件夹,并创建如下两个文件 ***package.json*** 、 ***Hello.sol*** 。 > smartcontract > ├── Hello.sol > └── package.json 在 ***package.json*** 文件里,添加如下依赖包配置: ```json { "name": "smartcontract", "version": "0.0.1", "dependencies": { "fs": "0.0.1-security", "solc": "^0.4.21", "web3": "^0.20.0" } } ``` > fs模块用于文件的相关操作 > solc模块是编译器 > web3模块是以太坊提供的工具包,主要用于与合约的通信 接下来执行 ***npm install*** 下载相关的依赖包。 ### 编写合约代码 环境准备好后,就可以开始编写合约代码了。 打开 ***Hello.sol*** 文件,编写代码...
Marser_cn 发布于 6天前 阅读 185

以太坊智能合约开发第三篇:安装节点工具Ganache

> 原文发表于:[以太坊智能合约开发第三篇:安装节点工具Ganache](https://www.marser.cn/article/138.html) 在正式开始编写智能合约之前,我们需要先安装一个以太坊客户端,也就是我们常说的以太坊节点。上一篇有提到Geth,但是它会消耗很多时间来同步以太坊的所有区块数据,并占用很大的磁盘空间。目前已经有几十G大小,不久将达到上百G。在开发过程中,我们推荐使用以太坊区块链的私有链Ganache来搭建节点。 ### Ganache Ganache可以快速启动个人以太坊区块链,并可以使用它来运行测试,执行命令、检查状态,同时控制链条的运行方式。 ### 安装 打开官网 http://truffleframework.com/ganache/ , 并点击 ***DOWNLOAD*** 按钮: ![下载](http://www.marser.cn/2018/04/ganache-1.png) 下载完后,直接按提示即可以安装成功。打开后的界面如图所示: ![安装成功](http://www.marser.cn/2018/04/ganache-2.png) 可以看到 ***ACCOUNTS*** 面板里已经生成了10个账户可用。每个账户里都有100枚ETH。 ### Ganache特征 通过Ganache,我们可以: > 快速查看所有账户的当前状态,包括他们的地址、私钥、交易和余额 > > 查看Ganache内部区块链的日志输出,包括响应和其他重要的调试...
Marser_cn 发布于 6天前 阅读 106

python3 开发微信自动回复

python3 做微信自动回复: 参考: http://itchat.readthedocs.io/zh/latest/tutorial/tutorial0/   下载itchat: https://pypi.python.org/pypi/itchat/ import itchat, time from itchat.content import * @itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING]) def text_reply(msg): msg.user.send('%s: %s' % (msg.type, msg.text)) @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): msg.download(msg.fileName) typeSymbol = { PICTURE: 'img', VIDEO: 'vid', }.get(msg.type, 'fil') return '@%s@%s' % (typeSymbol, msg.fileName) @itchat.msg_register(FRIENDS) def add_friend(msg): msg.user.verify() msg.user.send('Nice to meet you!') @itchat.msg_register(TEXT, isGroupChat=True) def text_reply(msg): if msg.isAt: msg.user.send(u'@%s\u2005I received: %s' % ( msg.actualNickName, msg.text)) itchat.auto_login(True) itchat.run(True)...
MichaelShu 发布于 2个月前 阅读 48

详解反调试技术

反调试技术,恶意代码用它识别是否被调试,或者让调试器失效。恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作,因此他们使用反调试技术尽可能地延长恶意代码的分析时间。为了阻止调试器的分析,当恶意代码意识到自己被调试时,它们可能改变正常的执行路径或者修改自身程序让自己崩溃,从而增加调试时间和复杂度。很多种反调试技术可以达到反调试效果。这里介绍当前常用的几种反调试技术,同时也会介绍一些逃避反调试的技巧。 一.探测Windows调试器 恶意代码会使用多种技术探测调试器调试它的痕迹,其中包括使用Windows API、手动检测调试器人工痕迹的内存结构,查询调试器遗留在系统中的痕迹等。调试器探测是恶意代码最常用的反调试技术。 1.使用Windows API 使用Windows API函数检测调试器是否存在是最简单的反调试技术。Windows操作系统中提供了这样一些API,应用程序可以通过调用这些API,来检测自己是否正在被调试。这些API中有些是专门用来检测调试器的存在的,而另外一些API是出于其他目的而设计的,但也可以被改造用来探测调试器的存在。其中很小部分API函数没有在微软官方文档显示。通常,防止恶意代码使用API进行反调试的最简单的办法是在恶意代...
simpower 发布于 1个月前 阅读 11

Elasticsearch Mget、GetDocSource、局部更新索引案例分享

The best elasticsearch highlevel java rest api-----bboss
bboss 发布于 4周前 阅读 213 点赞 1

Twitter的分布式自增ID算法snowflake (Java版)

概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。   结构 snowflake的结构如下(每部分用-分开): 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点) ,最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号) 一共加起来刚好64位,为一个Long型。(转换成字符串后长度最多19) snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。经测试snowflake每秒能够产生26万个ID。   源码 (JAVA版本的源码) /** * Twitter_Snowflake<br> ...
小王穷遊 发布于 12小时前 阅读 3

AI领袖、应用指南、窥见风口……你还能从这场全球峰会中获得更多

时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
GAITC

解决docker内运行java读取文件问题

BufferedReader br = new BufferedReader( new InputStreamReader(RSAUtils.class.getClassLoader().getResourceAsStream(PATH)));
6pker 发布于 1个月前 阅读 18

chaos-monkey-spring-boot小试牛刀

## 序 本文主要介绍下chaos-monkey-spring-boot ## Chaos Monkey for Spring Boot chaos-monkey-spring-boot是专门为Spring Boot打造的Chaos Monkey ![](https://codecentric.github.io/chaos-monkey-spring-boot/images/sb-chaos-monkey-architecture.png) 主要有有如下几个方面的Assaults - Latency Assault - Exception Assault - AppKiller Assault ## 实例 ### maven ``` de.codecentric chaos-monkey-spring-boot 1.0.1 ``` ### 配置 ``` chaos.monkey.assaults.level=5 chaos.monkey.assaults.latencyRangeStart=10000 chaos.monkey.assaults.latencyRangeEnd=15000 chaos.monkey.assaults.latencyActive=true chaos.monkey.assaults.exceptionsActive=true chaos.monkey.assaults.killApplicationActive=true chaos.monkey.watcher.controller=true chaos.monkey.watcher.restController=true chaos.monkey.watcher.service=true chaos.monkey.watcher.repository=true ``` ### 运行 ``` 2018-04-20 22:50:02.475 INFO 2861 --- [ main] d.c.s.b.c.monkey.component.ChaosMonkey : _____ _ __ __ _ / ____| | | \/ | | | | | | |__ __ _ ___ ___ | \ / | ___ _ __ ...
go4it 发布于 13小时前 阅读 2

控制台打印Json出来

package com.qxzl.util; import org.json.JSONArray; import org.json.JSONObject; import java.util.Iterator; /** * @Description 控制台打印Json出来 * @Author Created by . * @Email hccpw@sina.com * @Date ${DATE} */ public class JsonLog { private static final char TOP_LEFT_CORNER = '╔'; private static final char BOTTOM_LEFT_CORNER = '╚'; private static final String DOUBLE_DIVIDER = "═════════════════════════════════════════════════════════════════"; public static void println(String content) { outp(" ", 0); if (content == null || content.isEmpty()) { return; } try { outp(TOP_LEFT_CORNER + DOUBLE_DIVIDER, 0); if (content.startsWith("{")) { setJSONObjectLog(new JSONObject(content), 1); } else if (content.startsWith("{")) { setJSONArrayLog(new JSONArray(content), 1); } else { ...
开源oschina 发布于 1个月前 阅读 43

JPA @Lob 存储大文本 org.postgresql.util.PSQLException: 大型对象无法被使用在自动确认事物交易模式。问题

在文本字段的@Lob前添加  @org.hibernate.annotations.Type(type = "org.hibernate.type.TextType")
jaakan 发布于 12小时前 阅读 2

Maven生成可以直接支行的jar包

Maven生成可以直接支行的jar包
yysue 发布于 2小时前 阅读 2 评论 1

JavaWeb三大组件之Filter学习详解

Filter基本上可以说存在所有的JavaWeb项目中,比如最基本的一个请求参数的编码`CharacterEncodingFilter`,大家一般都会配置下,那么filter是干嘛的呢?
小灰灰Blog 发布于 3个月前 阅读 33

spring-boot 全局异常捕获

spring-boot 全局异常捕获
落泪归枫 发布于 2个月前 阅读 14

java重试之Spring Retry

通过Spring Retry 轻便的解决第三方服务请求重试问题
yope 发布于 3个月前 阅读 77

java静态变量和静态代码块的加载顺序

静态变量的声明和赋值是分开的,变量名的声明先加载,赋值是按照代码顺序执行。 public class Test { static { NAME = "xing"; } private static String NAME = "tong"; private static String namee = "wang" + NAME; public static void main(String[] args){ System.out.println(namee); } } 执行结果:wangtong public class Test { private static String NAME = "tong"; static { NAME = "xing"; } private static String namee = "wang" + NAME; public static void main(String[] args){ System.out.println(namee); } } 执行结果:wangxing public class Test { private static String NAME = "tong"; private static String namee = "wang" + NAME; static { NAME = "xing"; } public static void main(String[] args){ System.out.println(namee); } } 执行结果:wangtong...
wangtx 发布于 2个月前 阅读 34

java中转义字符

问题描述:     数据加密后:密文每76个字符后换行 QTY0NTNGOTFCOEJEMEU1QjBFRTBBODZCRTBBNDEyMjQzQzExNkVCM0U0MzM5RTc3MDE3M0ZFNjYz NjJDM0Q5NjMwRTk0REE4NDgzOTk3OEUyMDBCNDlCQ0Y0MEIyOUZCRTZGREUxNkVBN0UyMTJENTVD M0Q0MzkwNDU1NDE5NkFGMTM0RUZBRUVGMEUxMUUxMjYwRTI5NjY3MjMyOURBMjgyMjQ3RjFDQ0I4 NDVFNTk2MzAxRjMwMDIxMkYwMURFMTc3RTFGMkIxREQxQ0IwMUEwQ0NCMDg1MDIxNEU1NUYwRUY1 RDZDMUQ1NzUzODI5MDA2NTQwOTY5OUM4REVERkUxOTg0NTQyQjVBRTMyRDM5RjUzMkRFQjMxNkNF MkQw     密文用String类型返回:变一行,存在换行符(\n) QTY0NTNGOTFCOEJEMEU1QjBFRTBBODZCRTBBNDEyMjQzQzExNkVCM0U0MzM5RTc3MDE3M0ZFNjYz\nNjJDM0Q5NjMwRTk0REE4NDgzOTk3OEUyMDBCNDlCQ0Y0MEIyOUZCRTZGREUxNkVBN0UyMTJENTVD\nM0Q0MzkwNDU1NDE5NkFGMTM0RUZBRUVGMEUxMUUxMjYwRTI5NjY3MjMyOURBMjgyMjQ3RjFDQ0I4\nNDVFNTk2MzAxRjMwMDIxMkYwMURFMTc3RTFGMkIxREQxQ0IwMUEwQ0NCMDg1MDIxNEU1NUYwRUY1\nRDZDMUQ1NzUzODI5MDA2NTQwOTY5OUM4REVERkUxOTg0NTQyQjVBRTMyRDM5RjUzMkRFQjMxNkNF\nMkQw          解密改密文(存在换行符)时报错:需要对密文的换行符进行转义     org.apache.commons.lang3.St...
warlockssss 发布于 1个月前 阅读 8

Elasticsearch里面的segment合并

通过前面的文章,我们已经知道在elasticsearch中每个shard每隔1秒都会refresh一次,每次refresh都会生成一个新的segment,按照这个速度过不了多久segment的数量就会爆炸,所以存在太多的segment是一个大问题,因为每一个segment都会占用文件句柄,内存资源,cpu资源,更加重要的是每一个搜索请求都必须访问每一个segment,这就意味着存在的segment越多,搜索请求就会变的更慢。 那么elaticsearch是如何解决这个问题呢? 实际上elasticsearch有一个后台进程专门负责segment的合并,它会把小segments合并成更大的segments,然后反复这样。在合并segments的时候标记删除的document不会被合并到新的更大的segment里面,所有的过程都不需要我们干涉,es会自动在索引和搜索的过程中完成,合并的segment可以是磁盘上已经commit过的索引,也可以在内存中还未commit的segment: (1)在索引时refresh进程每秒会创建一个新的segment并且打开它使得搜索可见 (2)merge进程会在后台选择一些小体积的segments,然后将其合并成一个更大的segment,这个过程不会打断当前的索引和搜索功能。 (3)一旦merge完成,旧的segments就会被删除,流程如下:   至此原来标记伪删除的document都会被...
xiaomin0322 发布于 1个月前 阅读 11

2018“金三”之一线互联网公司Java高级面试题总结

JVM 1、请介绍一下JVM内存模型??用过什么垃圾回收器都说说呗 2、线上发送频繁full gc如何处理? CPU 使用率过高怎么办? 如何定位问题?如何解决说一下解决思路和处理方法 3、知道字节码吗?字节码都有哪些?Integer x =5,int y =5,比较x =y 都经过哪些步骤? 4、讲讲类加载机制呗都有哪些类加载器,这些类加载器都加载哪些文件? 手写一下类加载Demo 5、知道osgi吗? 他是如何实现的??? 6、请问你做过哪些JVM优化?使用什么方法达到什么效果??? 7、classforName("java.lang.String")和String classgetClassLoader() LoadClass("java.lang.String") 什么区别啊??   性能优化     Spring 1、spring都有哪些机制啊AOP底层如何实现的啊IOC呢?? 2、cgLib知道吗?他和jdk动态代理什么区别?手写一个jdk动态代理呗?   多线程 1、hashcode相等两个类一定相等吗?equals呢?相反呢? 2、介绍一下集合框架? 3、hashmap hastable 底层实现什么区别?hashtable和concurrenthashtable呢? 4、hashmap和treemap什么区别?低层数据结构是什么? 5、线程池用过吗都有什么参数?底层如何实现的? 6、sychnized和Lock什么区别?sychnize 什么情况情况是对象锁? 什么时候是全局锁为什么? 7、ThreadLocal 是什么...
茶轴的青春 发布于 3周前 阅读 83 评论 1

树莓派摄像头简单试用

树莓派官方推出的摄像头Camera Module,能够拍摄500万像素图片和录制1080p的视频,使用的是树莓派板子上的csi接口。 在淘宝上以118元买了一个,价格比起usb摄像头是贵了不少,下面来测试一下。 安装摄像头 首先确保树莓派的系统为较新的版本,并且开启摄像头功能。输入命令:sudo raspi-config 并勾选第5个的enable camera 功能。如下图: 物理安装摄像头到树莓派上,这个感觉很容易的样子,不行的话看看这个视频教程吧:视频教你如何安装摄像头 捕获一张图片:raspistill raspistill命令是树莓派提供的捕获图像的工具,输入下面命令获取一张图像保存到image.jpg raspistill -o image.jpg -rot 180 参数o是输出到文件的意思;参数rot是旋转图片180度,因为摄像头我是让他排线向上摆放的,所以需要旋转一下。命令输入后,会发现摄像头上的led灯亮,大概持续7秒钟左右熄灭,同时命令执行完毕。查看图片,发觉成像非常清晰,比起usb摄像头好很多,这也是比较贵的原因之一吧。 这时候就有一个疑问了,为什么拍张照片要7秒钟呢? 增加-v参数,查看调试信息:raspistill -o image.jpg -rot 80 -v 可以看到里面有一行信息:Time Delay:5000 。再查看命令文档,发现默认-t参数等...
simpower 发布于 2周前 阅读 20

Kafka 1.1.0 Topic 管理

Kafka Topic ## 创建topic bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic my-topic --partitions 3 --replication-factor 3 --config max.message.bytes=64000 --config flush.messages=1 ## 查看topic bin/kafka-topics.sh --zookeeper zk0:2181,zk1:2181,zk2:2181 --describe 可以看到每一个topic的分区数,复制因子数,Configs,Leader ## 修改topic ### 修改分区数 bin/kafka-topics.sh --zookeeper zk0:2181,zk1:2181/kafka --alter --topic myTopic --partitions 10 Note: 分区数只能增加不能减少!! ### 重新选举 bin/kafka-preferred-replica-election.sh --zookeeper zk0:2181,zk1:2181,zk2:2181 ####选举指定的内容 1. 创建election.json 内容如下: { "partitions" : [ {"topic":"goldCoin-prod","partition":0} ] } 2. 执行如下命令: bin/kafka-preferred-replica-election.sh --zookeeper zk0:2181,zk1:2181,zk2:2181 election.json ### 增加replicas 创建时指定的Topic gold的replication-factor 为1,系统运行后需要增加replicas.此时不能使用bin/kafka-topic.sh 命令来修改!! 1. 创建replicas.json ,内容如下: { "partitions": ...
idoz 发布于 3天前 阅读 6

linux python升级2.7.14

下载python最新版本2.7.13并编译安装 wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz tar zxf Python-2.7.14.tgz tar xf Python-2.7.14.tar cd Python-2.7.14 ./configure --prefix=/usr/local/python-2.7.14 make && make install 查看原有命令地址 ll -tr /usr/bin/python* /usr/bin/python2.6-config /usr/bin/python2.6 /usr/bin/python /usr/bin/python2 -> python /usr/bin/python-config -> python2.6-config 备份历史 mv /usr/bin/python /usr/bin/python2.6.6 mv /usr/bin/python-config /usr/bin/python2.6.6-config 配置新的 ln -s /usr/local/python-2.7.14/bin/python2.7 /usr/bin/python ln -s /usr/local/python-2.7.14/bin/python2.7 /usr/bin/python2.7 ln -s /usr/local/python-2.7.14/bin/python-config /usr/bin/python-config 修改yum,(开头)#!/usr/bin/python的python改成python2.6 vim /usr/bin/yum #!/usr/bin/python import sys try: import yum 补充: 但是,这种改法,万一哪天你 yum update 了一下,yum 被升级了后,又变回老样子了。 所以,经过我的不懈琢磨和努力,发现了一个办法(网上的解决方案都是抄...
wangchen1999 发布于 3个月前 阅读 49

优化网站性能必备的6种架构方案,你知道吗?

前言 一个成熟的大型网站(如淘宝、天猫、腾讯等)的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线。所以成熟的系统架构是随着业务的扩展而逐步完善的,并不是一蹴而就;不同业务特征的系统,会有各自的侧重点,例如:淘宝,要解决海量的商品信息的搜索、下单、支付,例如腾讯,要解决数亿用户的实时消息传输,百度它要处理海量的搜索请求,他们都有各自的业务特性,系统架构也有所不同。尽管如此我们也可以从这些不同的网站背景下,找出其中共用优化的技术,这些优化技术和手段广泛运用在大型网站系统的架构中,下面让我们来认识这些优化性能的技术和手段。 改善网站性能的几大手段 最开始的网站架构 最初业务量不大,访问量小,此时的架构,应用程序、数据库、文件都部署在一台服务器上,有些甚至仅仅是租用主机空间 1. 应用、数据、文件分离 将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。 2. 利用...
茶轴的青春 发布于 1个月前 阅读 23 评论 1

EMQ百万级MQTT消息服务(小技巧)

![](http://i.imgur.com/vhdeDvX.png) 附上: 喵了个咪的博客:[w-blog.cn](w-blog.cn) EMQ官方地址:[http://emqtt.com/](http://emqtt.com/) EMQ中文文档:[http://emqtt.com/docs/v2/guide.html](http://emqtt.com/docs/v2/guide.html) ## 1.ACL鉴权规则化 在正常业务使用下对于客户端的行为可以使用ACL进行限制,比如A客户端只能订阅 /A/get 队列消息和向 /A/set 发布内容 但是在MYSQL里面处理这样的鉴权就需要写入两条记录,如果设备量有一百万数据库就要承担两百万条鉴权数据量会大大影响数据库的性能 那么有没有什么批量的方式来定义ACL鉴权呢? 在mysql-ACL鉴权的配置文件下关于如何使用鉴权的SQL是可以编辑的,也就意味着你可以通过SQL来实现批量ACL鉴权规则 ```bash > vim /usr/local/emqttd/etc/plugins/emq_auth_mysql.conf # 最下面有这样一条配置 auth.mysql.acl_query = select allow, ipaddr, username, clientid, access, topic from mqtt_acl where ipaddr = '%a' or username = '%u' or username = '$all' or clientid = '%c' ``` 笔者这里就实现每个设备默认可以订阅 /A/get 队列消息和向 /A/set 发布 ![](http://pic.w-blog.cn/ADE78396-BF03-4672-A3E2-07F04...
喵了_个咪 发布于 6天前 阅读 2111 评论 3

Ubuntu 编译ffmpeg 实现GPU 转码

    前言,公司转码集群服务器资源有限,需要考虑GPU方案,本文记录下整个实现ffmpeg gpu 转码的过程。          该文章后续仍在不断的更新修改中, 请移步到原文地址 https://my.oschina.net/u/2950272/blog 环境: DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS" 注意,这里机器启动级别调低,不要加载桌面系统。 本机是2核4G 普通硬盘,gpu 型号:GTX950M 第一部分,安装cuda 8:     1.1 查看是否有显卡: lspci | grep -i nvidia     1.2 查看操作系统是否cuda 官方支持: uname -m && cat /etc/*release     1.3 安装gcc g++ 等编译依赖基础库 apt-get install gcc g++ build-essential     1.4 下载安装cuda 下载cuda: wget --no-check-certificate https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 安装 cuda 源: dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 添加源: deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 / 更新缓存: apt-get update 安装cuda: apt-get i...
鼎铭 发布于 4天前 阅读 1753 评论 23 点赞 4

RabbitMQ实战:界面管理和监控

> 本系列是「RabbitMQ实战:高效部署分布式消息队列」书籍的总结笔记。 上一篇总结了可能出现的异常场景,并对RabbitMQ提供的可用性保证进行了分析,在出现服务器宕机后,仍然可以正常服务。另外,需要尽快恢复异常的服务器,重新加入集群,推送未消费的消息,通过监控可第一时间接收到错误并进行处理。 另外,我们想主动了解消息堆积和消费的情况,以及服务器节点的压力,RabbitMQ提供了几种方式便捷、直观的了解,包括Web管理插件、REST API、rabbitmqadmin脚本。 通过介绍,你会了解到: * web管理插件 * REST API * rabbitmqadmin脚本 * Nagios和监控RabbitMQ ### web管理插件 RabbitMQ的插件是由Erlang语言写的,并且和服务器一同运行在同一个Erlang VM中,通过下面的命令启用web管理插件: ``` java sudo ./rabbitmq-plugins enable rabbitmq_management ``` 启动之后,访问15672端口,可看到Web管理页面主页面: ![RabbitMQ主页面](http://oc3r3rke2.bkt.clouddn.com/15236961623170.jpg) ##### 添加用户 默认会提供一个默认用户guest,密码也是guest,线上环境需要创建一个新用户,并把guest用户删除。 首先切换到Admin标签页,可以查看或添加用户,添加用户时,可...
情情说 发布于 5天前 阅读 636

MySQL的索引是什么?怎么优化?

索引对大数据的查询速度的提升是非常大的,Explain可以帮你分析SQL语句是否用到相关索引。
我叫刘半仙 发布于 3周前 阅读 5533 评论 14 点赞 40

AI领袖、应用指南、窥见风口……你还能从这场全球峰会中获得更多

时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
GAITC

SpringBoot+Mybatis,返回Map的时候,将Map内的Key转换为驼峰的命名表达式

遇见这个问题,是公司的小伙伴跟我说,每次使用mybatis的时候,简单的连表查询,用Map接收的时候,都是像DB定义的字段一样,类似以下 student_name,student_id,没有转换为驼峰,但是又不能因为这一个定义一个javabean来映射数据库字段集合,这样,会有无穷无尽的javabean,完全不是办法,然后我看了下mybatis-spring-boot的配置文档http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/,发现有这么个属性   mybatis.configuration.map-underscore-to-camel-case=true 看着属性意思,很像是 map 下划线转换为驼峰,然后我天真的以为,加个这个,就会将Map里面的key转换为驼峰的命名方式,然后我自己测试了一下,发现自己还是太天真,没转过来,该是什么还是什么(心里面是B了狗了).... 没办法,接着找了了一下,发现官方文档http://www.mybatis.org/mybatis-3/configuration.html#properties,描述过这个的作用  才发现,这个属性的作用,是作用于javabean的field的,并不是map,ㄟ( ▔, ▔ )ㄏ,那没办法了,只能自己动手了     -------------------------------我是分割线-------------------------------------- 既然 map-underscore-to-camel-case 不能作用于map,那么...
贺小五 发布于 6天前 阅读 625 评论 2

微服务架构—优雅停机方案

微服务架构中的应用优雅停机主要是指应用实例有计划而平滑(即不产生需要处理的事故)的退出。
李景枫 发布于 3周前 阅读 3773 评论 6 点赞 7

Session管理之超时设置和强制下线

Session,强制下线
海岸线的曙光 发布于 3周前 阅读 4189 评论 13 点赞 6

SQL优化的一些实用方法

1、任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。因为只有该字段中有null值,即使创建了索引其实也 是没有用的,所以创建索引应该在有值的字段上创建; 2、使用该sql语句将不会使用索引:select * from employee where last_name like ‘%cliton%';    这样的话会使用索引:     select * from employee where last_name like ‘cliton%'; 3、Order by语句 ORDER BY语句决定了Oracle如何将返回的查询结果排序。Order by语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或 者附加等)。任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。仔细检查order by语句以找出非索引项或者表达式,它们 会降低性能。解决这个问题的办法就是重写order by语句以使用索引,也可以为所使用的列建立另外一个索引,同时应绝对避免在order by 子句中使用表达式。 4、 选择最有效率的表名顺序(只在基于规则的优化器中有效):  ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句 中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如...
小爪进击者 发布于 3周前 阅读 2800 评论 8 点赞 12

spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求

# spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求 有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想,是真的么?,忙到这几个字都没时间打么?毕竟大家都很忙的,所以忙并不是啥理由. 那是因为啥呢?感觉就只有一个理由能站得住脚了,就是因为"懒". 哈哈.... 尬聊了一段,活跃下气氛,下面进入正题 ## **场景** 在实际工作中,大家可能也都遇到过这样的情况 : 一个正在更新迭代过程中项目,会收到大量业务部门的需求,这些需求可能会来自于不同业务部门,或者不同的产品经理 而项目的onwer则需要接收到这些需求,对这些需求进行初步的分析和排期,但是在排期的过程中,会有这样一种尴尬的情况发生. 比如,有两个互不嗒噶的产品经理,针对同一功能点,提出了两个不同业务改造的需求点,两个需求点要求上线的时间很接近,但是又出于某种原因,不能同时上线,或者产品经理根本无法确定上线时间,而告诉你尽快完成开发/测试,他则根据实际情况确定业务需求的发布时间 那么,对于这种情况,通常会采用开分支的方式进行开发,即不同版本的并行需求的开发在不同分支上同时进行开发,那么,团队成员(开发/测试),则可以同时的开展工作...
wangkang80 发布于 5天前 阅读 408

Spring Boot 2.0尝鲜-动态 Banner

首先声明,转载自:http://www.ityouknow.com/springboot/2018/03/03/spring-boot-banner.html,感谢原创作者,侵删。 阅读目录: 1. 配置依赖 2. Spring Boot 更换 Banner Spring Boot 2.0 提供了很多新特性,其中就有一个小彩蛋:动态 Banner,今天我们就先拿这个来尝尝鲜。 1.配置依赖 使用 Spring Boot 2.0 首先需要将项目依赖包替换为刚刚发布的 2.0 RELEASE,现在网站https://start.spring.io/也将 Spring Boot 2.0 设置为默认版本。 <parent>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-parent</artifactId>    <version>2.0.0.RELEASE</version> </parent> 设置完毕后,dependencies中没有指明版本的依赖包,将自动使用2.0.0.RELEASE依赖的版本。 <dependencies>     <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter</artifactId>     </dependency> </dependencies> Spring Boot 2.0 刚刚发布,一些 Maven 仓库还没更新,如果导入项目后依赖包不能下载,可以手动添加 Spring Boot 官方 Maven 仓库。 <rep...
loubobooo 发布于 2个月前 阅读 433 评论 2

Elasticsearch search after分页查询案例分享

The best elasticsearch highlevel java rest api-----bboss
bboss 发布于 5天前 阅读 356 评论 1

Spring Boot 2.0 WebFlux 上手系列课程:快速入门(一)

# 02:WebFlux 快速入门实践 ## Spring Boot 2.0 spring.io 官网有句醒目的话是: ``` BUILD ANYTHING WITH SPRING BOOT ``` Spring Boot (Boot 顾名思义,是引导的意思)框架是用于简化 Spring 应用从搭建到开发的过程。应用开箱即用,只要通过一个指令,包括命令行 `java -jar` 、`SpringApplication` 应用启动类 、 Spring Boot Maven 插件等,就可以启动应用了。另外,Spring Boot 强调只需要很少的配置文件,所以在开发生产级 Spring 应用中,让开发变得更加高效和简易。目前,Spring Boot 版本是 2.x 版本。Spring Boot 包括 WebFlux。 ![image](http://upload-images.jianshu.io/upload_images/1483536-03adf70431e74aa0?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## Spring Boot 2.0 WebFlux 了解 WebFlux ,首先了解下什么是 Reactive Streams。Reactive Streams 是 JVM 中面向流的库标准和规范: - 处理可能无限数量的元素 - 按顺序处理 - 组件之间异步传递 - 强制性非阻塞背压(Backpressure) **Backpressure(背压)** 背压是一种常用策略,使得发布者拥有无限制的缓冲区存储元素,用于确保发布者发布元素太快时,不会去压制订阅者。 **Reactive S...
泥沙砖瓦浆木匠 发布于 6天前 阅读 619 点赞 1

Spring整合Quartz分布式调度

前言 为了保证应用的高可用和高并发性,一般都会部署多个节点;对于定时任务,如果每个节点都执行自己的定时任务,一方面耗费了系统资源,另一方面有些任务多次执行,可能引发应用逻辑问题,所以需要一个分布式的调度系统,来协调每个节点执行定时任务。 Spring整合Quartz Quartz是一个成熟的任务调度系统,Spring对Quartz做了兼容,方便开发,下面看看具体如何整合: 1.Maven依赖文件 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.spri...
ksfzhaohui 发布于 2周前 阅读 3846 评论 14 点赞 12

微服务架构项目实战:Spring Boot 如何创建简单的 REST 服务

你将学习 什么是 REST 服务? 如何使用 Spring Initializr 引导创建 Rest 服务应用程序? 如何创建获取 REST 服务以检索学生注册的课程? 如何为学生注册课程创建 Post REST 服务? 如何利用 postman 执行 rest 服务? 本教程使用的 rest 服务 在本教程中,我们将使用适当的 URI 和 HTTP 方法创建三个服务: @GetMapping(“/ students / {studentId} / courses”):您可以使用请求方法 Get 和示例 uri / students / Student1 / courses 来查询特定学生已注册的课程。 @GetMapping(“/students/{studentId}/courses/{courseId}”):您可以使用请求方法 Get 和示例 uri / students / Student1 / courses / Course1 获取特定学生的特定课程。 @PostMapping(“/students/{studentId}/courses”) :您可以通过向 UURI /students/Student1/courses 发送 POST 请求来为学生注册一门课程 您将需要的工具 Maven 3.0+ 是您的构建工具 你最喜欢的 IDE。我们使用 Eclipse。 JDK 1.8+ 完整的 spring booot rest Maven 项目代码示例子 我们的 Github 存储库包含所有代码示例 - https://github.com/in28minutes/in28minutes.github.io/tree/master/code-zip-files 带有单元和集成测试的 ...
烂猪皮 发布于 2天前 阅读 297 评论 2

你和阿里资深架构师之间,差的不仅仅是年龄(进阶必看)

一个资深架构师所要掌握的各类知识点汇总
茶轴的青春 发布于 1周前 阅读 737 评论 5 点赞 1

提交本地jar到Maven中央仓库(Windows&码云gitee托管代码)的那些小事

提交本地jar到Maven中央仓库(windows)的那些小事 如会遇到 401 403 等错误 使用是gitee(码云)托管的源代码
小帅帅丶 发布于 4天前 阅读 236

有助于提高"锁"性能的几点建议

qq:853089986@qq.com
张泽立 发布于 2周前 阅读 2239 评论 10 点赞 12

简单又灵活的安全框架--Shiro构架和身份认证流程

Shiro可以帮助你完成安全模块的设计与实现,减少代码侵入性,轻松高效地解决安全需求。
我叫刘半仙 发布于 6天前 阅读 229

Elasticsearch source filter检索案例分享

the best elasticsearch highlevel java rest api-----bboss
bboss 发布于 3天前 阅读 194

SpringBoot优雅编码之:Lombok加持

Lombok 通过提供简单的语法注解形式来帮助简化消除一些必须有但显得很臃肿的 java 代码。典型的是对于 POJO对象的简化(如自动帮我们生成Setter和Getter等),有了Lombok的加持,开发人员可以免去很多重复且臃肿的操作,**极大地提高java代码的信噪比**,因此我们必须尝试并应用起来
hansonwang 发布于 2周前 阅读 1039 评论 2 点赞 2

Hadoop 搭建全分布模式子节点的datanode未起来的解决办法

                搭建全分布模式hadoop的时候,子节点的datanode没有起来:   解决办法参考如下网站: https://blog.csdn.net/u013310025/article/details/52796233   总结:在全分布模式下,将hadoop文件用scp -r ~/training/hadoop2.7.3 root@bigdata112 ~/training/后,需要在各节点也执行hdfs namenode -format才行,否则启动hadoop,节点的datanode起不了会报如下的错误。(此结论需要后期再进行验证)   解决办法(选择了方法二,方法一尝试了无效): 方法1.进入tmp/dfs,修改VERSION文件即可,将nameNode里version文件夹里面的内容修改成和master一致的。 方法2.直接删除tmp/dfs,然后格式化hdfs即可(./hdfs namenode -format)重新在tmp目录下生成一个dfs文件     ervices: 2018-04-20 23:41:33,881 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Block pool (Datanode Uuid unassigned) service to bigdata111/169.254.169.111:9000 starting to offer service 2018-04-20 23:41:34,013 INFO org.apache.hadoop.ipc.Server: IPC Server listener on 50020: starting 2018-04-20 23:41:34,072 INFO org.apache.hadoop.ipc.Serve...
yeqiang2015 发布于 3分钟前

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

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

vavr库

http://www.vavr.io/
张宏亮1982 发布于 5分钟前

Golang实现二叉搜索树

现在只实现了很简单的增加、查找、遍历。后面有空会完善。 package main import "fmt" type BNode struct { data int left *BNode right *BNode } type Tree struct { FirstNode *BNode } func (t *Tree) PrintData (node *BNode) { if node.left != nil { t.PrintData(node.left) } fmt.Println(node.data) if node.right != nil { t.PrintData(node.right) } return } // 返回node func (t *Tree) Search(data int, bnode *BNode) *BNode { if bnode == nil { return nil } if data > bnode.data { return t.Search(data, bnode.right) } else if data < bnode.data { return t.Search(data, bnode.left) } else if data == bnode.data { return bnode } return nil } func (t *Tree) Insert(data int, currentNode *BNode) { newNode := &BNode{ data, nil, nil, } if t.FirstNode == nil { t.FirstNode = newNode return } if t.Search(data, t.FirstNode) != nil { panic("该数据已经存在") return } if data > currentNode.data { if currentNode.right == nil { currentNode.right = newNode ...
丶老邪 发布于 12分钟前

CentOs7 安装redis

1. 本文基本参考博文:https://www.cnblogs.com/zuidongfeng/p/8032505.html 2. 下载redis,执行命令:      wget http://download.redis.io/releases/redis-4.0.6.tar.gz 3. 解压,执行命令 tar -zxvf redis-4.0.6.tar.gz 4. yum安装gcc依赖:yum install gcc 5. 移动目录,将下载解压的文件移动到/usr/local下 6. 安装,进入目录/usr/local/redis-4.0.6,执行: make MALLOC=libc  7. 建立redis目录,在/usr/local下新建redis目录,并将redis-4.0.6下的src目录放到/usr/local/redis下,更名为bin;将redis-4.0.6下的redis.conf文件放入/usr/local/redis/etc下。 8. 为了以后台进程方式启动redis,修改redis.conf,将daemonize no改成daemonize yes 9. 启动redis,在/usr/local/redis/bin下,执行./redis-server ../etc/redis.conf...
紫川帝林 发布于 25分钟前 阅读 2 打赏 1

Centos 编译安装配置redis

废话不说,直接上步骤: 1.进入redis官网 复制redis版本地址; 2.通过wget  加刚才复制地址; 3.解压 4.make 编译 5.个人将redis-server,redis.conf,redis-cli 复制到usr/local/redis文件夹中 6.redis.conf文件根据需求进行必要的配置 7.通过编写脚本控制redis 服务启动,停止 脚本如下: REDIS_SERVER="/usr/local/redis/redis-server" REDIS_CONF="/usr/local/redis/redis.conf" REDIS_CLIENT="/usr/local/redis/redis-cli" start_server() {   $REDIS_SERVER $REDIS_CONF } stop_server() {   $REDIS_CLIENT shutdown } cli() {  $REDIS_CLIENT } case "$1" in   'server')   start_server;;   'client')   cli;;   'stop')   stop_server;; *) echo 'nothing to do' esac 8.  ./redis server 启动服务 9.通过查询进程 ps -rf | grep redis 10 ./redis cli  进行编辑set,get  11  ./redis stop 关闭reids  通过查询进程验证                    ...
编译中ing 发布于 34分钟前

https加密

https加密 $sudo apt install software-properties-common $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install python-certbot-apache $ certbot --apache   crontab -e  添加  0 3 * * * certbot renew --quiet --no-self-upgrade
独孤梦杨柳 发布于 46分钟前

降低 Mysql 内存占用

performance_schema = off 
独孤梦杨柳 发布于 46分钟前

install server

install server Ubuntu 1604 root 权限操作 apt update apt upgrade apt install mysql-server phpmyadmin php-curl unoconv imagemagick language-pack-zh-hans php-zip poppler-utils xfonts-utils python-pdfminer     编辑 /etc/php/7.0/apache2/php.ini 修改 short_open_tag = on 修改 upload_max_filesize = 500M 修改 post_max_size = 500M 编辑 /etc/mysql/mysql.conf.d/mysqld.cnf 再 [mysqld] 下方添加 sql-mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 编辑 vim /etc/phpmyadmin/apache.conf  修改 phpmyadmin 默认地址  Alias /_db /usr/share/phpmyadmin 编辑目录配置  <Directory /var/www/>         AllowOverride ALL         Require all granted </Directory>   sudo a2enmod rewite /etc/init.d/apache2 restart /etc/init.d/mysql restart   添加用户 adduser  brantx 加入超级用户 usermod -a -G sudo brantx   // 安装 windows 字体 下载 https://pan.baidu.com/s/1boTyj1P 或 http://官网/fonts.gz 解压到  sudo  tar -xzvf fonts.gz /usr/share/fonts/win cd /usr/share/fonts/win sudo mkfontscale s...
独孤梦杨柳 发布于 47分钟前

JAVA线程的那些事?

1.线程是什么? 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。 同一时刻运行多个程序的能力。每一个任务称为一个线程。可以同时运行一个以上线程的程序称为多线程程序。 Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行。 一般常见的Java应用程序都是单线程的。比如,用java命令运行一个最简单的HelloWorld的Java应用程序时,就启动了一个JVM进程,JVM找到程序程序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称之为主线程。当main方法结束后,主线程运行完成。JVM进程也随即退出 。 对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度...
harries 发布于 1小时前 阅读 1

深度学习框架PaddlePaddle

百度从2013年就开始研发自己的深度学习框架PaddlePaddle,经过长期内部应用后,在2016年正式将其进行开源。 这也让百度成为继谷歌、Facebook、IBM之后,全球第四家、中国第一家开源深度学习开发框架的科技公司,从而让中国在这个关键领域没有陷入长期滞后。百度之后,国内的其他相关企业也纷纷在框架上展现动作,在AI之争可能打响的前夜,中国产业壁垒的高度已和过去不再相同。 可能出现的中美AI对决中,开发框架或是轴心武器
霜叶情 发布于 2小时前 阅读 1

Maven生成可以直接支行的jar包

Maven生成可以直接支行的jar包
yysue 发布于 2小时前 阅读 2 评论 1

Twitter的分布式自增ID算法snowflake (Java版)

概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。   结构 snowflake的结构如下(每部分用-分开): 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点) ,最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号) 一共加起来刚好64位,为一个Long型。(转换成字符串后长度最多19) snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。经测试snowflake每秒能够产生26万个ID。   源码 (JAVA版本的源码) /** * Twitter_Snowflake<br> ...
小王穷遊 发布于 12小时前 阅读 3

JPA @Lob 存储大文本 org.postgresql.util.PSQLException: 大型对象无法被使用在自动确认事物交易模式。问题

在文本字段的@Lob前添加  @org.hibernate.annotations.Type(type = "org.hibernate.type.TextType")
jaakan 发布于 12小时前 阅读 2

chaos-monkey-spring-boot小试牛刀

## 序 本文主要介绍下chaos-monkey-spring-boot ## Chaos Monkey for Spring Boot chaos-monkey-spring-boot是专门为Spring Boot打造的Chaos Monkey ![](https://codecentric.github.io/chaos-monkey-spring-boot/images/sb-chaos-monkey-architecture.png) 主要有有如下几个方面的Assaults - Latency Assault - Exception Assault - AppKiller Assault ## 实例 ### maven ``` de.codecentric chaos-monkey-spring-boot 1.0.1 ``` ### 配置 ``` chaos.monkey.assaults.level=5 chaos.monkey.assaults.latencyRangeStart=10000 chaos.monkey.assaults.latencyRangeEnd=15000 chaos.monkey.assaults.latencyActive=true chaos.monkey.assaults.exceptionsActive=true chaos.monkey.assaults.killApplicationActive=true chaos.monkey.watcher.controller=true chaos.monkey.watcher.restController=true chaos.monkey.watcher.service=true chaos.monkey.watcher.repository=true ``` ### 运行 ``` 2018-04-20 22:50:02.475 INFO 2861 --- [ main] d.c.s.b.c.monkey.component.ChaosMonkey : _____ _ __ __ _ / ____| | | \/ | | | | | | |__ __ _ ___ ___ | \ / | ___ _ __ ...
go4it 发布于 13小时前 阅读 2

go学习之Beego框架

一、下载安装框架 go get github.com/astaxie/beego 二、下载安装bee工具 go get github.com/beego/bee     最好将bin文件夹中的bin.exe加入GOPATH环境变量,全局生效;偷懒的方法是将bin.exe拷贝到需要使用的文件夹下 三、bee工具的使用    在需要创建项目的src目录下使用命令:bee new project即可自动创建一个新项目,在新项目的根目录下使用命令:bee run main.go即可运行,如下图所示     此时可通过在浏览器访问http://localhost:8080/运行此项目,如下图所示
lujc 发布于 13小时前 阅读 2

基于Spring Cloud的微服务落地

微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持。 在Java生态圈,目前使用较多的微服务框架就是集成了包括Netfilix OSS以及Spring的Spring Cloud。它包括: Spring Cloud Config:配置管理工具,支持使用Git存储配置内容,可以实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等。 Spring Cloud Netflix:对Netflix OSS进行了整合。其中又包括: Eureka:服务治理组件,包含服务注册中心、服务注册与发现。 Hystrix:容器管理组件,实现断路器模式,倘若依赖的服务出现延迟或故障,则提供强大的容错功能。 Ribbon:客户端负载均衡的服务调用组件。 Feign:基于Ribbon和Hystrix的声明式服务调用组件。 Zuul:网关组件,提供智能路由、访问过滤等功能。 Archaius:外部化配置组件。 Spring Cloud Bus:事件、消息总线。 Spring Cloud Cluster:针对ZooKeeper、Redis、Hazelcast、Consul的选举算法和通用状态模式的实现。 Spring Cloud Cloudfoundry:与Pivotal Cloudfoundry的整合支持。 Spring Cloud Consul:服务发现与配置管理...
茶轴的青春 发布于 14小时前 阅读 2

Cat 部署

Cat 部署
JUKE 发布于 14小时前 阅读 2

java中的四舍五入——几种四舍五入的写法

// 方式一:BigDecimal方式 double f = 3.1315; BigDecimal b = new BigDecimal( new Double(f).toString ); double f1 = b.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); 注意:这里一定不要直接使用new BigDecimal(double)的构造方法, 而要使用new BigDecimal(new Double(1.1315).toString())的方式,不然会出现精确问题 // 方式二:DecimalFormat方式 //DecimalFormat默认采用了RoundingMode.HALF_EVEN这种类型,而且format之后的结果是一个字符串类型String DecimalFormat df = new DecimalFormat("#.000"); System.out.println(df.format(new BigDecimal(1.0145)));//1.014 System.out.println(df.format(new BigDecimal(1.1315)));//1.132 // 方式三: double d = 3.1415926; String result = String.format("%.2f", d); // %.2f %. 表示 小数点前任意位数 2 表示两位小数 格式后的结果为f 表示浮点型。 //方法四:传统的Math.round四舍五入,改为支持指定精确位数的写法 Math.round(5.2644555 * 100) * 0.01d; private static double myRound(double number,int index){       double result = 0;       double temp = Math.pow(10, index);     ...
霜叶情 发布于 14小时前 阅读 3

总结,总结!!!!java回调,future

qq:853089986@qq.com
张泽立 发布于 16小时前 阅读 2

maven构建项目,整合ssm(3 整合 springmvc)

1 配置spring-mvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-package="com.liuhuxiang.controller" /> <!--避免...
白水_L 发布于 17小时前 阅读 4

Ubuntu 编译ffmpeg 实现GPU 转码

    前言,公司转码集群服务器资源有限,需要考虑GPU方案,本文记录下整个实现ffmpeg gpu 转码的过程。          该文章后续仍在不断的更新修改中, 请移步到原文地址 https://my.oschina.net/u/2950272/blog 环境: DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS" 注意,这里机器启动级别调低,不要加载桌面系统。 本机是2核4G 普通硬盘,gpu 型号:GTX950M 第一部分,安装cuda 8:     1.1 查看是否有显卡: lspci | grep -i nvidia     1.2 查看操作系统是否cuda 官方支持: uname -m && cat /etc/*release     1.3 安装gcc g++ 等编译依赖基础库 apt-get install gcc g++ build-essential     1.4 下载安装cuda 下载cuda: wget --no-check-certificate https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 安装 cuda 源: dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 添加源: deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 / 更新缓存: apt-get update 安装cuda: apt-get i...
鼎铭 发布于 4天前 阅读 1753 评论 23 点赞 4

EMQ百万级MQTT消息服务(小技巧)

![](http://i.imgur.com/vhdeDvX.png) 附上: 喵了个咪的博客:[w-blog.cn](w-blog.cn) EMQ官方地址:[http://emqtt.com/](http://emqtt.com/) EMQ中文文档:[http://emqtt.com/docs/v2/guide.html](http://emqtt.com/docs/v2/guide.html) ## 1.ACL鉴权规则化 在正常业务使用下对于客户端的行为可以使用ACL进行限制,比如A客户端只能订阅 /A/get 队列消息和向 /A/set 发布内容 但是在MYSQL里面处理这样的鉴权就需要写入两条记录,如果设备量有一百万数据库就要承担两百万条鉴权数据量会大大影响数据库的性能 那么有没有什么批量的方式来定义ACL鉴权呢? 在mysql-ACL鉴权的配置文件下关于如何使用鉴权的SQL是可以编辑的,也就意味着你可以通过SQL来实现批量ACL鉴权规则 ```bash > vim /usr/local/emqttd/etc/plugins/emq_auth_mysql.conf # 最下面有这样一条配置 auth.mysql.acl_query = select allow, ipaddr, username, clientid, access, topic from mqtt_acl where ipaddr = '%a' or username = '%u' or username = '$all' or clientid = '%c' ``` 笔者这里就实现每个设备默认可以订阅 /A/get 队列消息和向 /A/set 发布 ![](http://pic.w-blog.cn/ADE78396-BF03-4672-A3E2-07F04...
喵了_个咪 发布于 6天前 阅读 2111 评论 3

有助于提高"锁"性能的几点建议

qq:853089986@qq.com
张泽立 发布于 2周前 阅读 2239 评论 10 点赞 12

从linux源码看socket的阻塞和非阻塞

# 从linux源码看socket的阻塞和非阻塞 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 大部分高性能网络框架采用的是非阻塞模式。笔者这次就从linux源码的角度来阐述socket阻塞(block)和非阻塞(non_block)的区别。 本文源码均来自采用Linux-2.6.24内核版本。 ## 一个TCP非阻塞client端简单的例子 如果我们要产生一个非阻塞的socket,在C语言中如下代码所示: ``` // 创建socket int sock_fd = socket(AF_INET, SOCK_STREAM, 0); ... // 更改socket为nonblock fcntl(sock_fd, F_SETFL, fdflags | O_NONBLOCK); // connect .... while(1) { int recvlen = recv(sock_fd, recvbuf, RECV_BUF_SIZE) ; ...... } ... ``` 由于网络协议非常复杂,内核里面用到了大量的面向对象的技巧,所以我们从创建连接开始,一步一步追述到最后代码的调用点。 ### socket的创建 很明显,内核的第一步应该是通过AF\_INET、SOCK\_STREAM以及最后一个参数0定位到需要创建一个TCP的socket,如下图绿线所示: ![inet_family](https://static.oschina.net/uploads/img/201804/08095807_GSaV.png "inet_family") 我们跟踪源码调用 ``` socket(AF_INET, SOCK_STREAM,...
无毁的湖光-Al 发布于 2周前 阅读 3682 评论 12 点赞 7 打赏 1

深入浅出设计模式——从球赛中悟命令模式

命令模式,顾名思义就是向对象发出命令使其执行指定操作。具体的说就是以命令的形式发出请求交给调用对象,随后调用对象又将命令传送给需要处理这条命令的对象并让目标对象执行该命令。
珂jack 发布于 2周前 阅读 1329 评论 8 点赞 5 打赏 1

Spring整合Quartz分布式调度

前言 为了保证应用的高可用和高并发性,一般都会部署多个节点;对于定时任务,如果每个节点都执行自己的定时任务,一方面耗费了系统资源,另一方面有些任务多次执行,可能引发应用逻辑问题,所以需要一个分布式的调度系统,来协调每个节点执行定时任务。 Spring整合Quartz Quartz是一个成熟的任务调度系统,Spring对Quartz做了兼容,方便开发,下面看看具体如何整合: 1.Maven依赖文件 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.spri...
ksfzhaohui 发布于 2周前 阅读 3846 评论 14 点赞 12

MySQL的索引是什么?怎么优化?

索引对大数据的查询速度的提升是非常大的,Explain可以帮你分析SQL语句是否用到相关索引。
我叫刘半仙 发布于 3周前 阅读 5533 评论 14 点赞 40

Session管理之超时设置和强制下线

Session,强制下线
海岸线的曙光 发布于 3周前 阅读 4189 评论 13 点赞 6

简单搭建ngrok服务器,实现内网穿透

快速搭建ngrok服务器,或者直接运行我制作的ngrok服务器的镜像来启动
绝影jy 发布于 3周前 阅读 4538 评论 26 点赞 7 打赏 1

记又一次解决生产环境宕机问题(业务系统)

OOM low memory 宕机 内存调优
打破突破 发布于 4周前 阅读 4609 评论 36 点赞 27 打赏 2

还在用 Swagger2 生成 Restful API 文档?来试试 Api2Doc 吧!

本文介绍一个非常好用的自动化生成 Restful API 文档的工具——Api2Doc 它基于 SpringBoot ,原理类似于 Swagger2,但比 Swagger2 要简单好用。
terran4j 发布于 4周前 阅读 3473 评论 33 点赞 13

使用git仓库搭建maven私服

自己编写的jar,想要通过maven方式进行分发必须发布到maven仓库。如果没有自己的私服,我们可以使用折中的办法来实现。 maven客户端从maven仓库拉取构件时,实际上就是通过http协议去拉取对应仓库地址上的,对应目录中的metadata文件,查询需要的版本,就可以找到jar文件,下载到本机仓库。从而完成了依赖构件的拉取。 就是说,我们可以使用任何http服务器,按照一定的目录结构部署构件,从而当做一个私服来使用。 http服务器也没有?那好吧,悄悄告诉你,几乎所有的git服务都支持直接通过http访问指定文件的功能。(web界面中的Raw按钮点击就会跳到这个地址) 本文以国内最流行(~~红薯看到一定笑的很开心~~)的git服务——[码云](https://gitee.com) 为例,演示如何创建自己的私服。 ### 创建仓库 首先登录码云,创建项目: ``` 名称: mvnrepo 是否公开:公开 ``` 其他随意填写,然后点“创建”按钮完成创建。 必须公开,否则maven无法使用它作为仓库。 那么你的项目路径应该是:https://gitee.com/{你的域名}/mvnrepo 比如我的仓库地址是:https://gitee.com/pollyduan/mvnrepo.git ### 拉取仓库到本机 首先明确这个git项目拉取到本机的位置,记住,有用。比如我拉取到 ...
polly 发布于 1个月前 阅读 2659 评论 14 点赞 4

spring cloud实现可靠消息一致性

spring cloud实现可靠消息一致性
刘兆明 发布于 1个月前 阅读 2618 评论 10 点赞 7

dubbo vs mac-rpc 性能评测之同步调用

本文结合实践经验,对基于RPC的JAVA微服务框架性能关键点进行了较为深入分析。介绍了mac-rpc的实现原理,从性能方面与Dubbo进行对比测试。
Mac_J 发布于 1个月前 阅读 3251 评论 32

申请Let's Encrypt通配符HTTPS证书

申请Let's Encrypt通配符HTTPS证书
飞奔的萝卜 发布于 1个月前 阅读 7084 评论 72 点赞 22

consul服务注册与服务发现的巨坑

最近使用`consul`作为项目的服务注册与服务发现的基础功能。在塔建集群使用中遇到一些坑,下面一个个的记录下来。 ## consul集群多node consul集群的node也就是我们所说的consul实例。集群由多个node组成,为了集群的可用性,需要超过半数的node启用server。如5个node中起码3个启用server模式,3个node组成的集群就2个node启用server模式。 看到这里的时候你一定觉得没有什么问题呀,但是consul坑就是多。加入你的集群组成如下: ``` Node Address Status Type Build Protocol DC Segment BJ-MQTEST-01 10.163.145.117:8301 alive server 1.0.6 2 iget-topology-aliyun BJ-MQTEST-02 10.163.147.47:8301 alive server 1.0.6 2 iget-topology-aliyun BJ-TGO-01 10.163.145.110:8301 alive client 1.0.6 2 iget-topology-aliyun ``` 那么client可以使用上述的3个ip连接到consul集群,假设client A使用使用10.163.145.117注册了service,重启后使用地址10.163.145.110注册之前的service信息,此时你就会惊喜的发现,UI可以同时看到在同一个servicename下存在两个相同的serviceid。 这就是consul集群多node的坑,因为service底层虽然使用了KV存储,但是service的KEY与serviceid...
梦朝思夕 发布于 1个月前 阅读 2806 评论 31 点赞 5

从零开始写简易读写分离,不难嘛!

最近在学习Spring boot,写了个读写分离。并未照搬网文,而是独立思考后的成果,写完以后发现从零开始写读写分离并不难! 我最初的想法是: 读方法走读库,写方法走写库(一般是主库),保证在Spring提交事务之前确定数据源.   保证在Spring提交事务之前确定数据源,这个简单,利用AOP写个切换数据源的切面,让他的优先级高于Spring事务切面的优先级。至于读,写方法的区分可以用2个注解。 但是如何切换数据库呢? 我完全不知道!多年经验告诉我 当完全不了解一个技术时,先搜索学习必要知识,之后再动手尝试。                                                                                          --温安适 20180309 我搜索了一些网文,发现都提到了一个AbstractRoutingDataSource类。查看源码注释如下 /** Abstract {@link javax.sql.DataSource} implementation that routes {@link #getConnection()}  * calls to one of various target DataSources based on a lookup key. The latter is usually  * (but not necessarily) determined through some thread-...
温安适 发布于 1个月前 阅读 4272 评论 22 点赞 21

Phoenix + WebSocket分布式部署验证

对于无状态的web服务,要做分布式部署相对比较简单,很多时候只要架一个反向代理就行。但是对于有状态的web服务,尤其是包含WebSocket成分的web应用,要做分布式部署一直是一个麻烦。传统做法是搞一个中间层,例如Redis之类的做pubsub,但是这样做就不得不改动源码。Erlang/Elixir这种“面向并发编程”的语言在这方面会不会高人一筹?Phoenix框架是否已经支持WebSocket的横向扩展了呢?下面我们就来做个实验。
Aetherus 发布于 1个月前 阅读 1854 点赞 1

侦探剧场:堆内存神秘溢出事件

小光是一名私家侦探,是小光侦探事务所的负责人。这天,他正在事务所中喝茶,突然接到警官M的电话,说接到线上总共三台机器,有一台机器报警,Java堆内存占用超过95%,无法正常得到服务器的响应。小光安排警官M保留好现场,急匆匆的赶往了现场...
光闪 发布于 2个月前 阅读 2921 评论 33 点赞 29

sql巨慢之utf8mb4的隐藏问题

背景 某天 小伙伴发现一条sql巨慢无比 该sql十分长 我们来看一下 select '1' AS type, '项目' AS type_name, sc.name AS businessName, SUM(IFNULL(a.service_actual_cash,0)) AS cash, SUM(IFNULL(a.service_actual_card,0)) AS bank_card, SUM(IFNULL(a.service_actual_wechat,0)) AS wechat, SUM(IFNULL(a.service_actual_alipay,0)) AS alipay, SUM(IFNULL(a.service_actual_bank_transfer,0)) AS bank_transfer, SUM(IFNULL(a.service_actual_account,0)) AS account, SUM(IFNULL(a.service_actual_coupon,0)) AS coupon, SUM(IFNULL(a.service_actual_czk,0)) AS czk, SUM(IFNULL(a.service_actual_jck,0)) AS jck, SUM(IFNULL(a.service_actual_tck,0)) AS tck, SUM(IFNULL(a.service_actual_hyk,0)) AS hyk, SUM(IFNULL(a.service_actual_owe,0)) AS owe FROM (SELECT sc.name,sc.id FROM dim_service_category sc INNER JOIN dim_company_org o1 ON sc.id_own_org_dim = o1.id LEFT JOIN dim_company_org o ON o1.company_id = o.company_id...
Mr_Qi 发布于 2个月前 阅读 5446 评论 80 点赞 14
顶部