开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

异常处理者之UncaughtExceptionHandler

背景 上篇分析了Thread的相关信息你以为的线程就是你以为的线程么 本次分析一下异常handler【想来写Android的开发者对这个接口比较熟悉】 /** * Interface for handlers invoked when a <tt>Thread</tt> abruptly * terminates due to an uncaught exception. * <p>When a thread is about to terminate due to an uncaught exception * the Java Virtual Machine will query the thread for its * <tt>UncaughtExceptionHandler</tt> using * {@link #getUncaughtExceptionHandler} and will invoke the handler's * <tt>uncaughtException</tt> method, passing the thread and the * exception as arguments. * If a thread has not had its <tt>UncaughtExceptionHandler</tt> * explicitly set, then its <tt>ThreadGroup</tt> object acts as its * <tt>UncaughtExceptionHandler</tt>. If the <tt>ThreadGroup</tt> object * has no * special requirements for dealing with the exception, it can forward * the invocation to the {@linkplain #getDefaultUncaughtExceptionHandler * default uncaught exception handler}. * * @see #setDefau...
Mr_Qi 发布于 2小时前 阅读 18

开发人员学Linux(11):CentOS7安装配置持续集成工具Jenkins

本文讲述了如何使用Jenkins来对项目持续集成,分别以Java和C#两类常见的项目类型做了演示。由于时间关系,仅仅简单讲述了如何配置和创建基本的持续集成项目。其实利用Jenkins除了上面演示的功能之外,还可以在构建完成后将失败或者成功的消息发邮件通知到相关人员,甚至自动部署到服务器(一般是部署到测试环境供QA测试,直接发布到正式服务器还是要慎重一点)。
zhoufoxcn 发布于 4小时前 阅读 87

快速了解人工智能结晶之语音转换文字

科技解放生产力,人工智能的应用如今是大热,那么今天就来给各位介绍一下IBM在这方面的一个小的尝试,语音转换文字。咱们来看一看相较于传统的转换,结合Watson的IBM是如何做到让识别率飙升的。
IBM Bluemix

servlet3异步原理与实践

通讯模型中的NIO可以利用很少的线程处理大量的连接,提高了机器的吞吐量。Servlet的异步处理机制使得我们可以将请求异步到独立的业务线程去执行,使得我们能够将请求线程和业务线程分离。通讯模型的NIO跟Servlet3的异步没有直接关系。但是我们将两种技术同时使用就更增加了以tomcat为容器的系统的处理能力。自从Servlet3.1以后增加了非阻塞的IO,这里的非阻塞IO是面向inputstream和outputstream流,通过jdk的事件驱动模型来实现,更一步增强了Servlet异步的高性能,可以认为是一种增强版的异步机制
新栋BOOK 发布于 6小时前 阅读 222 评论 3 点赞 1

疯狂Spring Cloud连载(十一)——Feign的编码器与解码器

        本文节选自《疯狂Spring Cloud微服务架构实战》,本书将于2017年11月出版。         Spring Cloud教学视频:https://my.oschina.net/JavaLaw/blog/1552993 本书代码共享地址:https://gitee.com/yangenxiong/SpringCloud         本文要点              Feign编码器与解码器 11.1 Feign的编码器与解码器         本小节所有的案例都是单独使用Feign,Feign在Spring Cloud的使用将在后面章节讲述,请读者注意该细节。 5.2.1 编码器         向服务发送请求的过程中,有些情况需要对请求的内容进行处理。例如服务端发布的服务接收的是JSON格式参数,而客户端使用的是对象,这种情况就可以使用编码器,将对象转换为JSON字符串。         为服务端编写一个REST服务,处理POST请求,请见代码清单5-7。         代码清单5-7:codes\05\5.1\rest-server\src\main\java\org\crazyit\cloud\MyController.java /** * 参数为JSON */ @RequestMapping(value = "/person/create", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public Stri...
杨大仙的程序世界 发布于 19小时前 阅读 175

SpringCloud(第 049 篇)Netflix Eureka 源码深入剖析(上)

1、Eureka Server 提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。 2、Eureka Client 是一个Java 客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的、使用轮询负载算法的负载均衡器。 3、在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒),如果Eureka Server在多个心跳周期没有收到某个节点的心跳,Eureka Server 将会从服务注册表中把这个服务节点移除(
HMILYYLIMH 发布于 2天前 阅读 1279 评论 1 点赞 2

数据库中间件 Sharding-JDBC 源码分析 —— JDBC实现与读写分离

摘要: 原创出处 http://www.iocoder.cn/Sharding-JDBC/jdbc-implement-and-read-write-splitting/ 「芋道源码」欢迎转载,保留摘要,谢谢! **本文主要基于 Sharding-JDBC 1.5.0 正式版** - [1. 概述](http://www.iocoder.cn/Sharding-JDBC/jdbc-implement-and-read-write-splitting/) - [2. unspported 包](http://www.iocoder.cn/Sharding-JDBC/jdbc-implement-and-read-write-splitting/) - [3. adapter 包](http://www.iocoder.cn/Sharding-JDBC/jdbc-implement-and-read-write-splitting/) - [3.1 WrapperAdapter](http://www.iocoder.cn/Sharding-JDBC/jdbc-implement-and-read-write-splitting/) - [3.2 AbstractDataSourceAdapter](http://www.iocoder.cn/Sharding-JDBC/jdbc-implement-and-read-write-splitting/) - [3.3 AbstractConnectionAdapter](http://www.iocoder.cn/Sharding-JDBC/jdbc-implement-and-read-write-splitting/) - [3.4 AbstractStatementAdapter](http://www.iocoder.cn/Sharding-JDBC/jdbc-implement-and-read-write-splitting/) - [3.5 AbstractPreparedStatementAdapter](http://www.iocoder.cn/Sharding-JDBC/jdbc-implement-and-read-...
芋道源码 发布于 2天前 阅读 142

Golang的docker尝试

golang是一个天生适合在docker中运行的语言,这可能也是为什么golang在develop模式中受欢迎的原因。
dingdayu 发布于 4天前 阅读 175 评论 3

记一次外包项目微信接口开发流程-spring-boot

看到众包上还有贩卖微信接口对接指导,代码,表示此人大才,正好最近接个朋友的运营类小项目,便写下一点开发中的流程和经验
北风刮的不认真了 发布于 4天前 阅读 348 评论 1

SpringBoot项目中的多数据源支持

## 1.概述 项目中经常会遇到一个应用需要访问多个数据源的情况,本文介绍在SpringBoot项目中利用SpringDataJpa技术如何支持多个数据库的数据源。 具体的代码参照该 [示例项目](https://github.com/qihaiyan/boot-multi-datasource) ## 2.建立实体类(Entity) 首先,我们创建两个简单的实体类,分别属于两个不同的数据源,用于演示多数据源数据的保存和查询。 Test实体类: ```java package com.example.demo.test.data; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "test") public class Test { @Id private Integer id; public Test(){ } public Integer getId() { return this.id; } public void setId(Integer id){ this.id = id; } } ``` Other实体类: ```java package com.example.demo.other.data; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "other") public class Other { @Id private Integer id; public Integer getId() { return this.id; } public void setId(Integer id){ this.id = id; } } ```...
QiHaiYan 发布于 4天前 阅读 447 点赞 1

SpringCloud(第 045 篇)链接Mysql数据库简单的集成Mybatis、ehcache框架采用MapperXml访问数据库

1、数据库频繁的操作也会影响性能,所以本章节准备给访问数据库前面添加一层缓存操作; 2、虽然说缓存框架存在很多且各有各的优势,本章节仅仅只是为了测试缓存的操作实现,所以就采用了一个简单的缓存框架ehcache;
HMILYYLIMH 发布于 5天前 阅读 486 评论 1 点赞 1

SpringCloud(第 044 篇)链接Mysql数据库简单的集成Mybatis框架采用MapperXml访问数据库

1、前面章节讲解的是在方法上面添加sql语句操作,虽然说仅仅只是一种简单的操作,在测试期间可以多试试; 2、但是对于复杂的操作,那种简单也仅仅只是简单的自己用用而已,复杂的还是得采用xml配置; 3、因此本章节就试试采用Mybatis框架通过mapperxml进行对数据的操作;
HMILYYLIMH 发布于 5天前 阅读 129

SpringCloud(第 043 篇)链接Mysql数据库简单的集成Mybatis框架访问数据库

1、访问数据库,自然少不了一些持久化框架,而我本身也是Mybatis框架的支持者; 2、Mybatis是那种专注于sql的框架,对象映射以及输入输出都是由框架自动完成; 3、因此本章节就简单小试牛刀尝试下如何使用Mybatis持久化框架进行对数据的操作;
HMILYYLIMH 发布于 5天前 阅读 184

SpringCloud(第 042 篇)链接Mysql数据库,通过JdbcTemplate编写数据库访问,而且支持事物处理机制

1、在数据库操作中,当遇到异常时,我们最关心的是部分回滚还是整体回滚还是不理会,怎么操作怎么来; 2、所以本章节就着重讲解了如何运用Transactional注解来处理事物回滚机制; 3、rollbackFor 属性:抛出的异常是 rollbackFor 异常的子类时都会回滚数据; 4、noRollbackFor 属性:抛出的异常是 noRollbackFor 异常的子类时不会回滚数据;抛出的异常不是 noRollbackFor 异常的子类时会回滚数据;
HMILYYLIMH 发布于 5天前 阅读 88

SpringCloud(第 041 篇)链接Mysql数据库,通过JdbcTemplate编写数据库访问

1、前面章节提到了JPA操作访问数据库,本章节我们讲解一下如何用JdbcTemplate操作访问数据库; 2、使用JdbcTemplate是一个相对更底层的操作,可以直接编写sql语句操作数据,更具灵活性;
HMILYYLIMH 发布于 5天前 阅读 214

基于Gradle使用阿里巴巴Java开发规约进行代码检查

阿里的开发规约插件是基于[PMD](https://pmd.github.io/)进行的代码检测,而且已经有PMD的Gradle插件。 参考[gradle pmd插件的自定义规则的使用](http://blog.csdn.net/smithallenyu/article/details/50388784)这文章后,剩下的问题就是如何把阿里制定的Rule也引进来。 ### 定制RuleSet 新建文件 etc/pmd/ruleset.xml,其内容如下: 自定义Rule set 从上面例子可以看出,非常方便定制rule。甚至还可以使用 exclude 标签排队不需要的rule。 ### build.gradle apply plugin: 'java' apply plugin: 'pmd' ext { p3cPmdVersion = "1.3.0" pmdVersion = '5.5.2' # 与p3c-pmd 中使用pmd的版本一致 } // PMD配置 pmd { toolVersion = pmdVersion // 避免使用比较旧的版本,需要指定pmd的版本 ignoreFailures = true ruleSetConfig = resources.text.fromFile("etc/pmd/ruleset.xml") } dependencies { pmd "com.alibaba.p3c:p3c-pmd:${p3cPmdVersion}" } 通过上面例子可以看出,使用p3c-pmd,其实很简单,只需要把其一些rule 导到ruleSetConfig 文件中即可。 ### 执行检查 PMD插件提供了如下几个任务: 任务名称 ...... 描述 pmdMain ...... 检查src/main/java下的代码 pmdTest .......
qiujiayu 发布于 5天前 阅读 451 评论 1 点赞 1

SpringCloud(第 040 篇)链接Mysql数据库,通过CrudRepository编写数据库访问

1、前面章节提到了用JpaRepository访问数据库,而本章节则是用CrudRepository访问数据,那么他们之间都可以访问数据库,有啥联系呢? 2、从源码我可知JpaRepository继承PagingAndSortingRepository,而PagingAndSortingRepository又继承CrudRepository,从这方面讲他们是子类与父类之间的关系; 3、而CrudRepository仅仅只是提供了最基本的数据库访问操作的方法,而JpaRepository在这些基础上还提供了一些更丰富的操作接口,但是在实际应用中大多数业务场景比较少用,但是还是有用的; 4、因此两
HMILYYLIMH 发布于 5天前 阅读 157

SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问

1、本章节开始讲解一下访问数据库的操作,不过其实这还不算是SpringCloud的范畴,应该说是SpringBoot的操作范畴,这些就先抛开了,我们就还是讲解数据库的操作; 2、JpaRepository操作数据库访问,其实有许多同事都建议最好不要采用,因为我们平常的业务处理中并没有用到Jpa的额外的方法; 3、而且我也找了一篇文章提到了关于对JpaRepository的一些看法,链接地址为 http://jtuts.com/2014/08/26/difference-between-crudrepository-and-jparepository-in-spring-data-jpa; 4、
HMILYYLIMH 发布于 5天前 阅读 150

疯狂Spring Cloud连载(十)——Rest客户端Feign介绍

        本文节选自《疯狂Spring Cloud微服务架构实战》,本书将于2017年11月出版。         Spring Cloud教学视频:https://my.oschina.net/JavaLaw/blog/1552993 本书代码共享地址:https://gitee.com/yangenxiong/SpringCloud 本文要点              REST客户端         Spring Cloud集群中,各个角色的通信基于REST服务,因此在调用服务时,就不可避免的需要使用REST服务的请求客户端。前面的章节中使用了Spring自带的RestTemplate,RestTemplate使用的是HttpClient发送请求。本章中,将介绍另一个REST客户端:Feign。 10 REST客户端Feign介绍         在学习Feign前,先了解REST客户端,本小节将简单地讲述Apache CXF与Restlet这两款Web Service框架,并使用这两个框架来编写REST客户端,最后再编写一个Feign的Hello World例子。通过此过程,让大家可以对Feign有一个初步的印象。如已经掌握这两个REST框架,可直接到后面章节学习Feign。         本章的各个客户端,将会访问8080端口的“/person/{personId}”和“/hello”这两个服务中的一个,服务端项目使用“spring-boot-starter-web”进行搭建,本小节对应的服...
杨大仙的程序世界 发布于 5天前 阅读 210 评论 3 点赞 1

你以为的线程就是你以为的线程么

背景 无论从哪里来看现在web的开发中线程都被各种框架封装的很完善了, 无论选用rpc或者http请求中现在的线程(或者说线程池)都是框架在管理。 那么这是否说明程序员不需要相关线程的知识呢? 当然不是! 基础知识 关于线程通常实现多线程的方法 源码 那么惯例我们先来看一下结构图 类图 构造函数 /** * Allocates a new {@code Thread} object. This constructor has the same * effect as {@linkplain #Thread(ThreadGroup,Runnable,String) Thread} * {@code (null, null, gname)}, where {@code gname} is a newly generated * name. Automatically generated names are of the form * {@code "Thread-"+}<i>n</i>, where <i>n</i> is an integer. */ public Thread() { init(null, null, "Thread-" + nextThreadNum(), 0); } /** * Allocates a new {@code Thread} object. This constructor has the same * effect as {@linkplain #Thread(ThreadGroup,Runnable,String) Thread} * {@code (null, target, gname)}, where {@code gname} is a newly generated * name. Automatically generated names are of the form * {@code "Thread-"+}<i>n</i>...
Mr_Qi 发布于 6天前 阅读 298 评论 3

疯狂Spring Cloud连载(九)——RestTemplate的负载均衡原理

        本文节选自《疯狂Spring Cloud微服务架构实战》,本书将于2017年11月出版。         Spring Cloud教学视频:https://my.oschina.net/JavaLaw/blog/1552993 本书代码共享地址:https://gitee.com/yangenxiong/SpringCloud 9 RestTemplate负载均衡原理         本文要点              RestTemplate的负载均衡原理 9.1 @LoadBalanced注解概述         RestTemplate本是spring-web项目中的一个REST客户端,它遵循REST的设计原则,提供简单的API让我们可以调用HTTP服务。RestTemplate本身不具有负载均衡的功能,该类也与Spring Cloud没有关系,但为何加入@LoadBalanced注解后,一个RestTemplate实例就具有负载均衡的功能呢?实际上这要得益于RestTemplate的拦截器功能。         在Spring Cloud中,使用@LoadBalanced修饰的RestTemplate,在Spring容器启动时,会为这些被修饰过的RestTemplate添加拦截器,拦截器中使用了LoadBalancerClient来处理请求,LoadBalancerClient本来就是Spring封装的负载均衡客户端,通过这样间接处理,使得RestTemplate就拥有了负载均衡的功能。         本小节将模仿拦截器机制,...
杨大仙的程序世界 发布于 6天前 阅读 210 点赞 1

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

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

servlet3异步原理与实践

通讯模型中的NIO可以利用很少的线程处理大量的连接,提高了机器的吞吐量。Servlet的异步处理机制使得我们可以将请求异步到独立的业务线程去执行,使得我们能够将请求线程和业务线程分离。通讯模型的NIO跟Servlet3的异步没有直接关系。但是我们将两种技术同时使用就更增加了以tomcat为容器的系统的处理能力。自从Servlet3.1以后增加了非阻塞的IO,这里的非阻塞IO是面向inputstream和outputstream流,通过jdk的事件驱动模型来实现,更一步增强了Servlet异步的高性能,可以认为是一种增强版的异步机制
新栋BOOK 发布于 6小时前 阅读 222 评论 3 点赞 1

开发人员学Linux(11):CentOS7安装配置持续集成工具Jenkins

本文讲述了如何使用Jenkins来对项目持续集成,分别以Java和C#两类常见的项目类型做了演示。由于时间关系,仅仅简单讲述了如何配置和创建基本的持续集成项目。其实利用Jenkins除了上面演示的功能之外,还可以在构建完成后将失败或者成功的消息发邮件通知到相关人员,甚至自动部署到服务器(一般是部署到测试环境供QA测试,直接发布到正式服务器还是要慎重一点)。
zhoufoxcn 发布于 4小时前 阅读 87

异常处理者之UncaughtExceptionHandler

背景 上篇分析了Thread的相关信息你以为的线程就是你以为的线程么 本次分析一下异常handler【想来写Android的开发者对这个接口比较熟悉】 /** * Interface for handlers invoked when a <tt>Thread</tt> abruptly * terminates due to an uncaught exception. * <p>When a thread is about to terminate due to an uncaught exception * the Java Virtual Machine will query the thread for its * <tt>UncaughtExceptionHandler</tt> using * {@link #getUncaughtExceptionHandler} and will invoke the handler's * <tt>uncaughtException</tt> method, passing the thread and the * exception as arguments. * If a thread has not had its <tt>UncaughtExceptionHandler</tt> * explicitly set, then its <tt>ThreadGroup</tt> object acts as its * <tt>UncaughtExceptionHandler</tt>. If the <tt>ThreadGroup</tt> object * has no * special requirements for dealing with the exception, it can forward * the invocation to the {@linkplain #getDefaultUncaughtExceptionHandler * default uncaught exception handler}. * * @see #setDefau...
Mr_Qi 发布于 2小时前 阅读 18

spring mvc 拦截器

## 拦截器的定义 定义拦截器,实现HandlerInterceptor接口,接口中提供了三个方法 ```java public class className implements HandlerInterceptor{ /**该方法在进入handler之前执行 * 常用于身份认证、身份授权(登录,校验身份),例如,如果登陆失败就可以return false,表示不想下执行。 */ @Override public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception{ //... return false; } /**进入handler方法之前与返回modelAndView之前执行 * 应用场景从modelAndView出发,可以将公用的模型视图传给视图,比如说菜单,导航信息什么的 */ @Overrid public void postHandler(HttpServletRequest quest,HttpServletResponse,response,Object handler,ModelAndView modelAndView) throws Exception{ //... } /**handler完成之后执行 * 应用场景:统一异常处理,日志记录等 */ @Override public void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex) throws Exception{ //... } } ``` ## 拦截器的配置 spring mvc的拦截器是针对handlerMapping进行拦截设置...
张金棒 发布于 10小时前 阅读 14

Thread的wait()和notify()的简单使用

package a0002; public class SimpleWN { final static Object object = new Object(); public static class T1 extends Thread{ @Override public void run() { synchronized (object) { System.out.println(System.currentTimeMillis()+":T1 start!"); System.out.println(System.currentTimeMillis()+":T1 wait for object"); try { object.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(System.currentTimeMillis()+":T1 end!"); } } } public static class T2 extends Thread{ @Override public void run() { synchronized (object) { System.out.println(System.currentTimeMillis()+":T2 start! notify one thread"); object.notify(); System.out.println(System.currentTimeMillis()+":T2 end!"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } } } public static void main(String[] args) { Thread t...
1527 发布于 14小时前 阅读 11

freeSwitch安装步骤 for CentOS

1. 下载: 下载地址:http://files.freeswitch.org/ 或者直接用git安装。可能会失败 git clone -b v1.2.stable git://git.freeswitch.org/freeswitch.git 2. 安装依赖环境: yum install autoconf automake gcc-c++ git-core libjpeg-devel libtool make ncurses-devel pkgconfig yum install unixODBC-devel openssl-devel gnutls-devel libogg-devel libvorbis-devel curl-devel libtiff-devel libjpeg-devel python-devel expat-devel zlib zlib-devel bzip2 which yum install sqlite-devel.x86_64 3. 开始安装,依次执行如下命令: ./configure 如果有问题,系统会自动列出来。 make && make install && make hd-sounds-install && make hd-moh-install && make samples 我碰到的问题: 问题1:configure: error: Library requirements (sqlite3 >= 3.6.20) not met 办法: yum install sqlite-devel.x86_64 问题2:configure: error: Library requirements (libpcre >= 7.8) not met 办法: yum install pcre* 问题3:configure: error: Library requirements (speex >= 1.2rc1 speexdsp >= 1.2rc1) not met 办法:yum install speex* 问题4:configure: error: You...
会哭的鳄鱼 发布于 12小时前 阅读 9

Java注解学习四:@Inherited的使用

Java注解学习四:@Inherited的使用
残刃O 发布于 13小时前 阅读 7

单点登录之实战CAS5.1.x(四) ——自定义验证类

自定义验证类
ViperWhip 发布于 2个月前 阅读 110 评论 19

架设mediawiki服务器续--安装VisualEditor编辑器

架设完Mediawiki后,一直感觉他的编辑器难用,所以在这里添加VisualEditor使用,以下是安装过程,供大家作为参考。
PGSmith 发布于 2个月前 阅读 117

nginx+php windows开发环境

下载地址: http://nginx.org/download/nginx-1.12.2.zip http://windows.php.net/downloads/releases/php-7.1.10-nts-Win32-VC14-x64.zip RunHiddenConsole 配置: nginx.conf root E:\php\eocms; ... location ~ \.php$ { root E:\php\eocms; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } php7.1.10/php.ini-production 拷贝重命名 php.ini start_nginx.bat set PHP_FCGI_MAX_REQUESTS=1000 RunHiddenConsole E:\php\php7.1.10\php-cgi.exe -b 127.0.0.1:9000 -c E:\php\php7.1.10\php.ini RunHiddenConsole E:\php\nginx1.12.2\nginx.exe stop_nginx.bat taskkill /F /IM nginx.exe > nul taskkill /F /IM php-cgi.exe > nul exit 执行start_nginx.bat后,访问http://127.0.0.1,关闭执行stop_nginx.bat。...
eosite 发布于 6小时前 阅读 4

Solr入门学习

在Apache Solr初学者教程的这个例子中,我们将讨论有关如何安装最新版本的Apache Solr,并告诉你如何配置它。此外,我们将告诉你如何进行使用solr的样本数据文件索引。Apache Solr支持不同格式,包括各种数据库,PDF文件,XML文件,CSV文件等等。在这个例子中,我们将研究如何从一个CSV文件索引数据。 首选这个例子的环境是Windows。开始Solr安装之前,确保你已经安装了JDK和正确配置JAVA_HOME。 1.为什么选择Apache Solr Apache Solr是一个功能强大的搜索服务器,它支持REST风格API。Solr是基于Lucene的,Lucene 支持强大的匹配能力,如短语,通配符,连接,分组和更多不同的数据类型。它使用 Apache Zookeeper特别针对高流量进行优化。Apache Solr提供各式各样的功能,我们列出了部分最主要的功能。 先进的全文搜索功能。 XML,JSON和HTTP - 基于开放接口标准。 高度可扩展和容错。 同时支持模式和无模式配置。 分页搜索和过滤。 支持像英语,德语,中国,日本,法国和许多主要语言 丰富的文档分析。 2.安装Apache Solr 要首先让从以下位置下载最新版本的Apache Solr: http://lucene.apache.org/solr/downloads.html 在撰写本文时,可用的稳定版本是5.0.0。Apache So...
wangyanbao 发布于 5小时前 阅读 4 评论 2

并发编程-锁的发展和主流分布式锁比较总结

一、锁的发展        系统结构由传统的“单应用服务--》SOA --》微服务 --》无服务器” 的演进过程中,场景越来越复杂,由单体应用的但进程中多线程并发的内存锁,随着互联网场景越来越复杂,在复杂的系统交互过程中存在大量的并发。分布式并发锁概念就营运而生 二、锁的介绍     1、进程下单线程模式,更改为多钱成并发模式,于是就产生了线程锁,也就是常说的内存锁,是基于单线程中多线程的锁控制,基于这种方式又演变出来文件锁等,但是都是基于控制多线程并发的锁机制     2、分布式以及微服务的兴起,程序逐步从单进程演变为多进程。进程之间就会产生需要处理并发业务,需要实现业务锁,所以就产生了分布式锁的解决方案。  目前市面上解决分布式锁的方案主要有以下几种: (1)基于数据库表做乐观锁(乐观锁和悲观锁定义请参照-锁实例介绍找那个单进程内并发锁的博客),用于分布式锁。 (2)使用memcached的add()方法,用于分布式锁。 (3)基于redisson实现分布式锁(redis官方推荐) 不常用但是可以用于技术方案探讨的: (1)使用memcached的cas()方法,用于分布式锁。  (2)使用redis的setnx()、get()、getset()方法,使用redis的setnx()、expire(...
贾浩v 发布于 4小时前 阅读 4

Vert.x Web中文文档

Vert.x Web中文文档
小明男神 发布于 1个月前 阅读 18

Received disconnect from xx.xxx.xx.xx port 22:2: Too many authentication failures

记一次用key登录报错 ssh -i 1.pem ubuntu@xx.xxx.xx.xx Received disconnect from xx.xxx.xx.xx port 22:2: Too many authentication failures 修改方法: ssh -i 1.pem -o IdentitiesOnly=yes ubuntu@xx.xxx.xx.xx 或者 在 /etc/ssh/ssh_config 加一行 IdentitiesOnly=yes
flyking 发布于 2个月前 阅读 19

Sphinx之匹配方式

sphinx
happy_limit 发布于 3个月前 阅读 9

EasyUI

概述 jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签。 特点 easyui是一种基于jQuery的用户界面插件集合。 easyui为创建现代化,互动,JavaScript应用程序,提供必要的功能。 使用easyui你不需要写很多代码,你只需要通过编写一些简单HTML标记,就可以定义用户界面。 easyui是个完美支持HTML5网页的完整框架。 easyui节省您网页开发的时间和规模。 easyui很简单但功能强大的。 常见版本 1.4 1.5 : 开始支持移动端 使用范围 主要用于后台管理系统的布局 下载 地址 http://www.jeasyui.net/download/ 目录介绍   demo EasyUI网页端示例代码   demo-mobile EasyUI移动端示例代码 locale 语言包 plugins 插件支持包 src js源码包 themes 主题样式包 核心包 easyloader.js jquery.easyui.min.js jquery.easyui.mobile.js jquery.min.js 入门 1. 引入JS和CSS <!-- CSS样式 --> <link rel="stylesheet" type="text/css" href="./css/themes/default/easyui.css"> <link rel="styl...
勤劳的开发者px 发布于 15小时前 阅读 3

Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库

前两天有人私信我,让我爬这个网站,http://bbs.baobeihuijia.com/forum-191-1.html上的失踪儿童信息,准备根据失踪儿童的失踪时的地理位置来更好的寻找失踪儿童,这种事情本就应该义不容辞,如果对网站服务器造成负荷,还请谅解。   这次依然是用第三方爬虫包BeautifulSoup,还有Selenium+Chrome,Selenium+PhantomJS来爬取信息。 通过分析网站的框架,依然分三步来进行。 步骤一:获取http://bbs.baobeihuijia.com/forum-191-1.html这个版块上的所有分页页面链接 步骤二:获取每一个分页链接上所发的帖子的链接 步骤三:获取每一个帖子链接上要爬取的信息,编号,姓名,性别,出生日期,失踪时身高,失踪时间,失踪地点,以及是否报案   起先用的BeautifulSoup,但是被管理员设置了网站重定向,然后就采用selenium的方式,在这里还是对网站管理员说一声抱歉。     1、获取http://bbs.baobeihuijia.com/forum-191-1.html这个版块上的所有分页页面链接   通过分析:发现分页的页面链接处于<div class="pg">下,所以写了以下的代码 BeautifulSoup形式: [python] view plain copy 1. def GetALLPageUrl(siteUrl):   2.     #设置代理IP访问   3.    ...
天才小熊猫QAQ 发布于 3小时前 阅读 4

Servlet 异常处理

转载自https://www.journaldev.com/1973/servlet-exception-and-error-handling-example-tutorial
JavaSon712 发布于 14小时前 阅读 3

HttpClient以及Json传递的一些坑

背景: 记录一下使用中关于HttpClient以及Json传递的坑。 HTTPS: 普通方式: public class Test { public static void main(String[] args) throws Exception { URI uri = new URIBuilder().setScheme("http").setHost("***:**") .setPath("/***/***").build(); HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(uri); httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded"); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("params", "test")); HttpResponse httpResponse = httpClient.execute(httpPost); StatusLine httpStatus = httpResponse.getStatusLine(); HttpEntity httpEntity = httpResponse.getEntity(); System.out.println("httpStatusline: " + httpStatus); System.out.println("strEntity: " + EntityUtils.toString(httpEntity)); EntityUtils.consume(httpEntity); } } 这种适合普通的http的请...
Hosee 发布于 1个月前 阅读 112

SpringBoot配置属性之MQ

activemq spring.activemq.broker-url指定ActiveMQ broker的URL,默认自动生成. spring.activemq.in-memory是否是内存模式,默认为true. spring.activemq.password指定broker的密码. spring.activemq.pooled是否创建PooledConnectionFactory,而非ConnectionFactory,默认false spring.activemq.user指定broker的用户. artemis(HornetQ捐献给apache后的版本) spring.artemis.embedded.cluster-password指定集群的密码,默认是启动时随机生成. spring.artemis.embedded.data-directory指定Journal文件的目录.如果不开始持久化则不必要指定. spring.artemis.embedded.enabled是否开启内嵌模式,默认true spring.artemis.embedded.persistent是否开启persistent store,默认false. spring.artemis.embedded.queues指定启动时创建的队列,多个用逗号分隔,默认: [] spring.artemis.embedded.server-id指定Server ID. 默认是一个自增的数字,从0开始. spring.artemis.embedded.topics指定启动时创建的topic,多个的话逗号分隔,默认: [] spring.artemis.host指定Artemis broker 的host. 默认: localhost spring.artemis.mode指定Artemis 的部署模式, 默认为auto-detected(也可以...
阿恒灬 发布于 3小时前 阅读 2

Nginx反向代理将不同的API代理到同一个域名下

Nginx 通过反向代理将不同的API代理到同一个域名下
tianshl 发布于 1个月前 阅读 107940

Mac OS Microsoft Office(安装与破解)

苹果系统安装office组件
tianshl 发布于 1个月前 阅读 107300

快速了解人工智能结晶之语音转换文字

科技解放生产力,人工智能的应用如今是大热,那么今天就来给各位介绍一下IBM在这方面的一个小的尝试,语音转换文字。咱们来看一看相较于传统的转换,结合Watson的IBM是如何做到让识别率飙升的。
IBM Bluemix

Mac OS 安装启动nginx

### 使用brew安装nginx ``` brew install nginx ``` ### 加入开机启动 ``` sudo cp /usr/local/opt/nginx/homebrew.mxcl.nginx.plist /Library/LaunchDaemons/ sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist ``` ### 配置文件路径 ``` /usr/local/etc/nginx/ ``` ### nginx 帮助信息 ``` tianshl:~ tianshl$ nginx -h nginx version: nginx/1.12.1 Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives] Options: -?,-h : this help -v : show version and exit -V : show version and configure options then exit -t : test configuration and exit -T : test configuration, dump it and exit -q : suppress non-error messages during configuration testing -s signal : send signal to a master process: stop, quit, reopen, reload -p prefix : set prefix path (default: /usr/local/Cellar/nginx/1.12.1/) -c filename : set configuration file (default: /usr/local/etc/nginx/nginx.conf) -g directives : set global directives out of configuration file ``` ### 常用命令 ``` 1. 启动命令: sudo ...
tianshl 发布于 1个月前 阅读 107878

SSH免密登录

每次SSH登录主机都需要输入密码,麻烦。。。
tianshl 发布于 1个月前 阅读 108779

413 Request Entity Too Large

### 问题 ``` 413 Request Entity Too Large ``` ### 原因 ``` nginx默认请求文件的大小受限 ``` ### 解决 ##### 1. 修改nginx配置文件, 将client_max_body_size修改的大一些, 比如改为20M ``` client_max_body_size 20M; ``` ##### 2. 重启nginx, 使配置生效 ``` nginx -s reload ```
tianshl 发布于 3个月前 阅读 108679

SpringMVC配置太多?试试SpringBoot

SpringMVC相信大家已经不再陌生了,大家可能对于Spring的各种XML配置已经产生了厌恶的感觉,Spring官方发布的Springboot 已经很长时间了,Springboot是一款“约定优于配置”的轻量级框架;Springboot首先解决的就是各种繁琐的XML配置,你可以不用任何XML配置,进行web服务的搭建,其次是Springboot本身就继承了web服务器,如果说前端开发人员想在本地启动后端服务不需要进行各种配置,几乎可以做到一键启动。 再有就是目前大热的微服务,而Springboot恰恰满足了快速开发微服务的开发场景;对于目前主流的框架Spring+MyBatis+redis的集成,好吧直接看代码... 以下代码是整个开发框架集成完之后的,关于Spring官方那一套如何编写启动类,如何配置端口这些随便google一大把的我就不再本文说明了。下面的代码,mybatis mapper我就不贴了,平常怎么写现在也一样,还有redis存数据取数据什么的。本文给的都是划的重点啊! 1.数据源以及其他的配置文件(PS:说好了不配置,怎么刚开始就上配置? 答:不配置也可以,如果你想把数据源硬编码写死的话。^_^) 下面给的是YML的配置文件方式,YML被各种主流的开发语言所支持,相当于常见的.properties文件。 jedis : pool : hos...
红暑 发布于 1周前 阅读 3983 评论 43 点赞 10

企业集群平台架构设计与实现

课程介绍 集合目前最热门的集群应用技术LVS/HAPROXY/Keepalived,实战讲述集群技术的应用技巧。 课程内容包括: LVS集群常见架构图 基于IP的负载调度策略 LVS负载调度算法与应用场景 通过prianha实现LVS高可用负载均衡集群 基于keepalived实现LVS高可用负载均衡集群 课程目标  了解LVS/HAPROXY/Keepalived,掌握企业应用常见的集群技术应用技巧 适合人群  运维工程师 课时列表 课时1:企业集群平台架构设计与实现lvs篇1 课时2:企业集群平台架构设计与实现lvs篇2 课时3:企业集群平台架构设计与实现lvs篇3 课时4:企业集群平台架构设计与实现lvs篇4 课时5:企业集群平台架构设计与实现haproxy篇1 课时6:企业集群平台架构设计与实现haproxy篇2 课时7:企业集群平台架构设计与实现haproxy篇3 课时8:企业集群平台架构设计与实现haproxy篇4 开始学习http://click.aliyun.com/m/27899/
mcy0425 发布于 1天前 阅读 525

SpringMVC源码(四)-请求处理

111001001011100010111010111001001011110110100000111001111001101010000100111001011010010110111101111001011010010110000111111001011011111110000011111001111000001010111001111010001011010110011110
青离 发布于 1周前 阅读 614 评论 5

spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的?

# spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的? 消息中间件在解决异步处理,模块间解耦和,和高流量场景的削峰,等情况下有着很广泛的应用 . 本文将跟大家一起讨论以下其中的异常场景,如题. ## 场景 在实际工作中,大家可能也都遇到过这样的需求 : 如 : 系统A中的某些重要的数据,想在每次数据变更的时候,将当前**最新的数据**备份下来,当然,这个备份的动作不能影响当前数据变更的进程. 也更不期望因为备份的操作,影响当前进程的性能. ## 分析 这是一个比较常见的,可以异步处理的需求,业务数据变更 和 数据备份 之间并没有强一致性的要求,大致的架构如下: ![并发消费消息](https://static.oschina.net/uploads/img/201710/17185040_m5SA.png "并发消费消息") producer作为消息产生者,会通过指定的交换机(exchange)和路由键(routingkey),将消息传输到指定的队列(queue)中,通常producer也会有多个节点 consume作为消息的消费者,会依次从队列(queue)中拿到消息,进行业务处理,最终将数据写入数据库中,并且为了更快速的消费消息,consume通常会部署多个节点,并且每个节点中也会有多个线程同时消费消息 queue作为消息队列,保证了消息被消费的时序性,以及唯一性...
wangkang80 发布于 6天前 阅读 343

t-io对quartz的封装,以极简的方式来开发定时任务

定时任务不须多言,几乎是每个项目必备功能,而原生的quartz用起来着实有点哆嗦,市面上也有不少依赖spring的定时任务组件,因为笔者本人已经完全抛弃spring(笔者还抛弃了servlet),所以自己动手对quartz进行了简单封装,使其更容易开发和维护! 引入相关jar <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.t-io</groupId> <artifactId>tio-core</artifactId> <version>2.0.1.v20171015-RELEASE</version> </dependency>   创建任务类 import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * @author tanyaowu * 2017年10月8日 下午4:58:34 */ public class ZzzJob implements Job { public ZzzJob() { } /** * @param context * @throws JobExecutionException * @author: tanyaowu */ @Override public void execute(Jo...
talent-tan 发布于 1周前 阅读 2760 评论 25 点赞 7 打赏 1

SpringBoot项目中的多数据源支持

## 1.概述 项目中经常会遇到一个应用需要访问多个数据源的情况,本文介绍在SpringBoot项目中利用SpringDataJpa技术如何支持多个数据库的数据源。 具体的代码参照该 [示例项目](https://github.com/qihaiyan/boot-multi-datasource) ## 2.建立实体类(Entity) 首先,我们创建两个简单的实体类,分别属于两个不同的数据源,用于演示多数据源数据的保存和查询。 Test实体类: ```java package com.example.demo.test.data; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "test") public class Test { @Id private Integer id; public Test(){ } public Integer getId() { return this.id; } public void setId(Integer id){ this.id = id; } } ``` Other实体类: ```java package com.example.demo.other.data; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "other") public class Other { @Id private Integer id; public Integer getId() { return this.id; } public void setId(Integer id){ this.id = id; } } ```...
QiHaiYan 发布于 4天前 阅读 447 点赞 1

基于Gradle使用阿里巴巴Java开发规约进行代码检查

阿里的开发规约插件是基于[PMD](https://pmd.github.io/)进行的代码检测,而且已经有PMD的Gradle插件。 参考[gradle pmd插件的自定义规则的使用](http://blog.csdn.net/smithallenyu/article/details/50388784)这文章后,剩下的问题就是如何把阿里制定的Rule也引进来。 ### 定制RuleSet 新建文件 etc/pmd/ruleset.xml,其内容如下: 自定义Rule set 从上面例子可以看出,非常方便定制rule。甚至还可以使用 exclude 标签排队不需要的rule。 ### build.gradle apply plugin: 'java' apply plugin: 'pmd' ext { p3cPmdVersion = "1.3.0" pmdVersion = '5.5.2' # 与p3c-pmd 中使用pmd的版本一致 } // PMD配置 pmd { toolVersion = pmdVersion // 避免使用比较旧的版本,需要指定pmd的版本 ignoreFailures = true ruleSetConfig = resources.text.fromFile("etc/pmd/ruleset.xml") } dependencies { pmd "com.alibaba.p3c:p3c-pmd:${p3cPmdVersion}" } 通过上面例子可以看出,使用p3c-pmd,其实很简单,只需要把其一些rule 导到ruleSetConfig 文件中即可。 ### 执行检查 PMD插件提供了如下几个任务: 任务名称 ...... 描述 pmdMain ...... 检查src/main/java下的代码 pmdTest .......
qiujiayu 发布于 5天前 阅读 451 评论 1 点赞 1

jekins自动化部署(linux测试环境和生产环境)

自动化部署属于自动化集成中的一部分,这里的集成我指的是可持续集成。要做到可持续集成的自动化有六点要做到自动化,我觉得必须做到以下几点: (1)自动化的运行测试; (2) 自动产生可部署的二进制成品; (3) 自动将成品自动部署到近似生产环境; (4) 自动为CodeBase打上标签; (5) 自动运行回归测试; (6)自动生成度量报告。 本文只说自动化构建和发布,其他的暂时不考虑
pxk 发布于 6天前 阅读 440 评论 3

Spring Boot 初探

近日发现spring boot挺火,了解了一下,并打算重构以前的单点登录系统(cas)中用户中心模块,作为切入点。
謎之物语 发布于 1周前 阅读 771 评论 1

Spring Boot 整合 Thymeleaf 完整 Web 案例

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! Thymeleaf 是一种模板语言。那模板语言或模板引擎是什么?常见的模板语言都包含以下几个概念:数据(Data)、模板(Template)、模板引擎(Template Engine)和结果文档(Result Documents)。 - 数据 数据是信息的表现形式和载体,可以是符号、文字、数字、语音、图像、视频等。数据和信息是不可分离的,数据是信息的表达,信息是数据的内涵。数据本身没有意义,数据只有对实体行为产生影响时才成为信息。 - 模板 模板,是一个蓝图,即一个与类型无关的类。编译器在使用模板时,会根据模板实参对模板进行实例化,得到一个与类型相关的类。 - 模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。 - 结果文档 一种特定格式的文档,比如用于网站的模板引擎就会生成一个标准的HTML文档。 模板语言用途广泛,常见的用途如下: - 页面渲染 - 文档生成 - 代码生成 - 所有 “数据+模板=文本” 的应用场景 这里案例用途自然是 页面渲染,下面在 Spring Boot 中整合 Thymel...
泥沙砖瓦浆木匠 发布于 1周前 阅读 778 评论 7 点赞 2

我为什么要黑JFinal?

不知道什么时候,流传了Beetl作者黑JFinal的故事,依据是我写了俩篇博客。 - [没看懂“重新定义模板引擎”?](https://my.oschina.net/xiandafu/blog/829499) - [关于极简编程的思考](https://my.oschina.net/xiandafu/blog/894155) 如果你是个技术爱好者,一定能看出来,我在文章中大部分都是摆事实讲道理,说我黑JFinal的人拿不出技术依据,只好在随后很多博客和论坛里对我个人进行了攻击,比如最近的一个文章: - [beetl作者闲大赋为什么如此自负和目中无人?](https://www.oschina.net/question/3631543_2266929),这篇文章在OSChina头条已经快一个月了。 另外还有很多Jfinal粉丝的马甲发的博客对我个人进行了人品攻击,在此就不一一列举了。 每次都有朋友像我求证,问我怎么回事,我在这里做一下申明 ### JFinal首先在文章中攻击了Beetl JFinal以前并不具备模板引擎功能,因此很多功能都受到限制,包括模板,还有模仿BeetlSQL的新的功能。它在3.0中能推出了模板引擎本来是个很好的事情,却在新闻里发表了“[JFinal 3.0 发布,重新定义模板引擎](http://www.oschina.net/news/81225/jfinal-3-0-released)”。里面首先攻击了Beetl的基础Antlr,自以为写了一个解析器,就...
闲大赋 发布于 2周前 阅读 4030 评论 170 点赞 15 打赏 1

SpringCloud(第 041 篇)链接Mysql数据库,通过JdbcTemplate编写数据库访问

1、前面章节提到了JPA操作访问数据库,本章节我们讲解一下如何用JdbcTemplate操作访问数据库; 2、使用JdbcTemplate是一个相对更底层的操作,可以直接编写sql语句操作数据,更具灵活性;
HMILYYLIMH 发布于 5天前 阅读 214

HttpClient4基于Shadowsocks-netty的Socks代理

前言 最近想批量下载一些国外网站的视频,之前写过一个代理程序shadowsocks-netty,打算直接 用它来当作客户端代理程序,而HttpClient4也支持Socks代理;所有准备用HttpClient4来访问国外网站和视频资源 HttpClient4版本 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3.6</version> </dependency> 访问网站 设置代理ip和port分别是:localhost和1080 访问国外网站hostname为:www.google.com 具体代码如下: public class ClientExecuteSOCKS { /** 代理参数 IP+PORT **/ private static String PROXY_IP = "localhost"; private static int PROXY_PORT = 1080; public static void main(String[] args) throws Exception { Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create() .register("http", new MyConnectionSocketFactory()).build(); PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(reg); CloseableHttpClient httpclient = HttpClients.cu...
ksfzhaohui 发布于 6天前 阅读 189

疯狂Spring Cloud连载(十)——Rest客户端Feign介绍

        本文节选自《疯狂Spring Cloud微服务架构实战》,本书将于2017年11月出版。         Spring Cloud教学视频:https://my.oschina.net/JavaLaw/blog/1552993 本书代码共享地址:https://gitee.com/yangenxiong/SpringCloud 本文要点              REST客户端         Spring Cloud集群中,各个角色的通信基于REST服务,因此在调用服务时,就不可避免的需要使用REST服务的请求客户端。前面的章节中使用了Spring自带的RestTemplate,RestTemplate使用的是HttpClient发送请求。本章中,将介绍另一个REST客户端:Feign。 10 REST客户端Feign介绍         在学习Feign前,先了解REST客户端,本小节将简单地讲述Apache CXF与Restlet这两款Web Service框架,并使用这两个框架来编写REST客户端,最后再编写一个Feign的Hello World例子。通过此过程,让大家可以对Feign有一个初步的印象。如已经掌握这两个REST框架,可直接到后面章节学习Feign。         本章的各个客户端,将会访问8080端口的“/person/{personId}”和“/hello”这两个服务中的一个,服务端项目使用“spring-boot-starter-web”进行搭建,本小节对应的服...
杨大仙的程序世界 发布于 5天前 阅读 210 评论 3 点赞 1

SpringCloud(第 045 篇)链接Mysql数据库简单的集成Mybatis、ehcache框架采用MapperXml访问数据库

1、数据库频繁的操作也会影响性能,所以本章节准备给访问数据库前面添加一层缓存操作; 2、虽然说缓存框架存在很多且各有各的优势,本章节仅仅只是为了测试缓存的操作实现,所以就采用了一个简单的缓存框架ehcache;
HMILYYLIMH 发布于 5天前 阅读 486 评论 1 点赞 1

spring boot框架学习学前掌握之重要注解(4)-通过注解方式读取外部资源配置文件2

1:如果是多个配置文件怎么写? 2:如果在propertySource的value值所配置的配置文件不存在怎么办? 想要解决以上两个问题。我们先来看看@PropertySource注解的源码。
凯哥java 发布于 41分钟前 阅读 1

maven nexus 3.x上传jar命令

jar mvn deploy:deploy-file -Dversion=4.5.0 -Dpackaging=jar -DrepositoryId=nexus-releases -Durl=http://118.190.217.66:8081/repository/3rd_party/ -DgroupId=org.dayatang.dddlib -DartifactId=dddlib-db -Dfile=/Users/chenrui/work/temp/dddlib/dddlib-db/4.5.0/dddlib-db-4.5.0.jar -DpomFile=/Users/chenrui/work/temp/dddlib/dddlib-db/4.5.0/dddlib-db-4.5.0.pom pom mvn deploy:deploy-file -Dversion=4.5.0 -Dpackaging=pom -DrepositoryId=nexus-releases -Durl=http://118.190.217.66:8081/repository/3rd_party/ -DgroupId=org.dayatang.dddlib -DartifactId=dddlib-event -Dfile=/Users/chenrui/work/temp/dddlib/dddlib-event/4.5.0/dddlib-event-4.5.0.pom 官方文档: 文档地址   ...
陈尕六 发布于 1小时前 阅读 3

ASP.NET MVC 之controller 找不到action 的处理方式

如果ActionInvoker找不到对应的action,默认会运行contorller类的HandleUnknownAction。而HandleUnknownAction会响应默认HTTP 404 在 asp.net MVC 里面 所有的controller 默认都继承于  System.Web.Mvc.Controller这个类,由于在System.Web.Mvc.Controller里HandleUnknownAction被标注了virtual ,所以 这个方法是可以替换的。 即我们可以自己重写HandleUnknownAction using mytest2.DBContext; using mytest2.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace mytest2.Controllers { public class guestsController : Controller { // // GET: /guests/ public ActionResult Guest() { mytestContext db = new mytestContext(); guests guest = db.guests.FirstOrDefault(); return View(guest); } [HttpPost] public ActionResult Guest(guests guests) { if(ModelState.IsValid) { return Content("success"); ...
可达鸭眉头一皱 发布于 2小时前 阅读 1

异常处理者之UncaughtExceptionHandler

背景 上篇分析了Thread的相关信息你以为的线程就是你以为的线程么 本次分析一下异常handler【想来写Android的开发者对这个接口比较熟悉】 /** * Interface for handlers invoked when a <tt>Thread</tt> abruptly * terminates due to an uncaught exception. * <p>When a thread is about to terminate due to an uncaught exception * the Java Virtual Machine will query the thread for its * <tt>UncaughtExceptionHandler</tt> using * {@link #getUncaughtExceptionHandler} and will invoke the handler's * <tt>uncaughtException</tt> method, passing the thread and the * exception as arguments. * If a thread has not had its <tt>UncaughtExceptionHandler</tt> * explicitly set, then its <tt>ThreadGroup</tt> object acts as its * <tt>UncaughtExceptionHandler</tt>. If the <tt>ThreadGroup</tt> object * has no * special requirements for dealing with the exception, it can forward * the invocation to the {@linkplain #getDefaultUncaughtExceptionHandler * default uncaught exception handler}. * * @see #setDefau...
Mr_Qi 发布于 2小时前 阅读 18

4. golang 函数

函数基本组成: * 关键字func * 函数名 * 参数列表 * 返回值 * 函数体 * 返回语句 go的函数不支持重载、默认参数值,支持不定长变参、多个返回值等。 ```go func main() { /* 定义局部变量 */ var a, b = 4, 5 s := add(a,b) fmt.Println(s) } func add(a, b int) int { return a + b } ``` 注意:小写字母开头的函数只在本包内可见,大写字母开头的函数才能被其他包使用。 不定参类型函数:函数传入的参数个数为不定数量 ```go func main() { myFunc(1,2,3) } func myFunc(args ...int) { for _,arg := range args { fmt.Println(arg) } } ``` #### 匿名函数(不需要定义函数名的一种函数实现方式) 匿名函数由一个不带函数名的函数 明和函数体组成,可以直接赋值给一个变量或直接执行。 ```go f := func(a, b int) int { return a * b } ``` #### 闭包...
antic 发布于 2小时前 阅读 1

spring bean初始化顺序

spring使用BeanFactory来实例化、配置和管理对象,但是它只是一个接口,里面有一个getBean()方法。我们一般都不直接用BeanFactory,而是用它的实现类ApplicationContext,这个类会自动解析我们配置的applicationContext.xml,然后根据我们配置的bean来new对象,将new好的对象放进一个Map中,键就是我们bean的id,值就是new的对象。 常用的设定方式有以下三种: 通过实现 InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法; 通过 <bean> 元素的 init-method/destroy-method属性指定初始化之后 /销毁之前调用的操作方法; 在指定方法上加上@PostConstruct 或@PreDestroy注解来制定该方法是在初始化之后还是销毁之前调用。   public class InitSequenceBean implements InitializingBean { public InitSequenceBean() { System.out.println("InitSequenceBean: constructor"); } @PostConstruct public void postConstruct() { System.out.println("InitSequenceBean: postConstruct"); } public void initMethod() { System.out.printl...
有余力则学文 发布于 2小时前 阅读 1

喜迎十九大,Tomcat版本升级

Tomcat存在已知漏洞,版本升级记录
杜宝 发布于 3小时前 阅读 1

nginx

nginx
swfeng 发布于 3小时前 阅读 2

node.js事件驱动

var events = require('events'); var eventEmitter = new events.EventEmitter(); // 监听器 #1 var listener1 = function listener1() {    console.log('监听器 listener1 执行。'); } // 监听器 #2 var listener2 = function listener2() {   console.log('监听器 listener2 执行。'); } // 绑定 connection 事件,处理函数为 listener1  eventEmitter.addListener('connection', listener1); // 绑定 connection 事件,处理函数为 listener2 eventEmitter.on('connection', listener2); var eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection'); console.log(eventListeners + " 个监听器监听连接事件。"); // 处理 connection 事件  eventEmitter.emit('connection'); // 移除监绑定的 listener1 函数 eventEmitter.removeListener('connection', listener1); console.log("listener1 不再受监听。"); // 触发连接事件 eventEmitter.emit('connection'); eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection'); console.log(eventListeners + " 个监听器监听连接事件。"); conso...
bengozhong 发布于 3小时前 阅读 1

maven的打包插件

1.springboot的maven打包插件 <!--maven的插件--> <build> <finalName>radar-log</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> </plugin> </plugins> </build> 2.有了它将打包为以下的文件目录 运行的时候直接输入java -jar springCloud.jar & 命令即可
啊哈关关 发布于 3小时前 阅读 1

多线程之间的协调问题

多线程之间需要等待协调,才能完成某种工作,问怎么设计这种协调方案?如:子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次。     public class Question {     public static void main(String[] args) throws InterruptedException {         final Object object = new Object();         new Thread(new Runnable() {               public void run() {                 for (int i = 0; i < 50; i++) {                     synchronized (object) {                         for (int j = 0; j < 10; j++) {                             System.out.println("SubThread:" + (j + 1));                         }                         object.notify();                         try {                             object.wait();                         } catch (InterruptedException e) {                             e.printStackTrace();   ...
素雷 发布于 3小时前 阅读 2

java抽象类和接口使用区别

抽象类和接口的对比 参数 抽象类 接口 默认的方法实现 它可以有默认的方法实现 接口完全是抽象的。它根本不存在方法的实现 实现 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现 构造器 抽象类可以有构造器 接口不能有构造器 与正常Java类的区别 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 接口是完全不同的类型 访问修饰符 抽象方法可以有public、protected和default这些修饰符 接口方法默认修饰符是public。你不可以使用其它修饰符。 main方法 抽象方法可以有main方法并且我们可以运行它 接口没有main方法,因此我们不能运行它。 多继承 抽象方法可以继承一个类和实现多个接口 接口只可以继承一个或多个其它接口 速度 它比接口速度要快 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。 添加新方法 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 如果你往接口中添加方法,那么你必须改变实现该接口的类。 什么时候使用抽象类和接口 如果你拥有一些方法并且想让...
beibugulf 发布于 3小时前 阅读 2

SpringBoot配置属性之MQ

activemq spring.activemq.broker-url指定ActiveMQ broker的URL,默认自动生成. spring.activemq.in-memory是否是内存模式,默认为true. spring.activemq.password指定broker的密码. spring.activemq.pooled是否创建PooledConnectionFactory,而非ConnectionFactory,默认false spring.activemq.user指定broker的用户. artemis(HornetQ捐献给apache后的版本) spring.artemis.embedded.cluster-password指定集群的密码,默认是启动时随机生成. spring.artemis.embedded.data-directory指定Journal文件的目录.如果不开始持久化则不必要指定. spring.artemis.embedded.enabled是否开启内嵌模式,默认true spring.artemis.embedded.persistent是否开启persistent store,默认false. spring.artemis.embedded.queues指定启动时创建的队列,多个用逗号分隔,默认: [] spring.artemis.embedded.server-id指定Server ID. 默认是一个自增的数字,从0开始. spring.artemis.embedded.topics指定启动时创建的topic,多个的话逗号分隔,默认: [] spring.artemis.host指定Artemis broker 的host. 默认: localhost spring.artemis.mode指定Artemis 的部署模式, 默认为auto-detected(也可以...
阿恒灬 发布于 3小时前 阅读 2

修改centos的Yum源为mirrors.163.com

网上找了几篇博客,但是版本太老,没有及时更新,修改了不正确,看了下163的帮助文档,希望对其他人有所帮助 步骤:首先备份文件 mv CentOS-Base.repo CentOS-Base.repo.bak ,然后下载对应版本的repo,之后再运行命令更新缓存 cd /etc/yum.repos.d mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget http://mirrors.163.com/.help/CentOS7-Base-163.repo yum clean all yum makecache 注意163的路径中,已经区分不同版本的repo了,在Centos的后面加上了不同的版本的后缀 参考文档:http://mirrors.163.com/.help/centos.html
牛奋Debug 发布于 3小时前 阅读 2

Java常见异常种类

Java Exception: 1、Error  2、Runtime Exception 运行时异常 3、Exception  4、throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系统的错误,不允许捕获;Exception类代表了标准Java库方法所激发的异常。Exception类还包含运行异常类Runtime_Exception和非运行异常类Non_RuntimeException这两个直接的子类。 运行异常类对应于编译错误,它是指Java程序在运行时产生的由解释器引发的各种异常。运行异常可能出现在任何地方,且出现频率很高,因此为了避免巨大的系统资源开销,编译器不对异常进行检查。所以Java语言中的运行异常不一定被捕获。出现运行错误往往表示代码有错误,如:算数异常(如被0除)、下标异常(如数组越界)等。 非运行异常时Non_RuntimeException类及其子类的实例,又称为可检测异常。Java编译器利用分析方法或构造方法中可能产生的结果来检测Java程序中是否含有检测异常的处理程序,对于每个可能的可检测异常,方法或构造方法的throws子句必须列出该异常对应的类。在Java的标准包java.lang java.util 和 java.net 中定义的异常都是非运行异常。   算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异...
阿恒灬 发布于 3小时前

php session阻塞

一个与tag.js开发使用多次异步xhr的时候差不多的问题,当进入页面默认有一个比较慢的xhr,然后进行其他xhr的时候,必须按照顺序返回,即使前面的xhr比较慢,后面的比较快,查阅资料之后是session阻塞的问题 是不是session_start导致了阻塞? 结合了PHP的Session机制,找到了阻塞的原因。由于PHP的Session信息是写入文件的,1个客户端占有1个session文件。因此,当 session_start被调用的时候,该文件是被锁住的,而且是以读写模式锁住的(因为程序中可能要修改session的值),这样,第2次调用 session_start的时候就被阻塞了。 最简解决方法: 使用session_write_close函数,作用是Write session data and end session,也就是写session的数据,同时关闭这个session。因此,我们可以在用完session之后,调用这个函数关闭session 文件即可解除锁定。一般,session是用来记录用户身份信息的,以便PHP进行身份认证,因此完全可以将session的读写放在页面刚开始执行的时候,在执行完以后,马上调用session_write_close函数即可。...
hey_heihei 发布于 3小时前 阅读 2

多线程之间的协调示例

CountDownLatch:倒数N个数,通过调用countDown()倒数。当到0时,countDownLatch.await();线程被唤醒。只阻塞countDownLatch.await();这一个线程,用于等待调用countDown()倒数线程执行到位后再执行。 CyclicBarrier:可循环屏障。设置N个数,调用cyclicBarrier.await();的线程也相当于对N减一并阻塞,当第N个线程调用cyclicBarrier.await()后,所有调用cyclicBarrier.await()阻塞的线程被唤醒继续执行。在创建CyclicBarrier的时候可以传入一个Runnable,用于所有线程到达屏障后,便立即执行的线程,即此线程会与N个调用cyclicBarrier.await()的线程同时执行。另外CyclicBarrier可重置(调用reset()),重复使用。 Semaphore:信号量并发工具类,其提供了aquire()和release()方法来进行并发控制。设置一个N,aquire调用时根据并发数判断是否阻塞,相当于发送令牌,一共有N个令牌,aquire获取令牌,拿到令牌执行,没拿到阻塞,执行完归还令牌。一般用于资源限流,限量的工作场景。   在并发编程中经常会使用到一些并发工具类,来对线程的并发量、执行流程、资源依赖等进行控制。这里我们主要探讨三个经常使用的并发工具类:CountDownLatch,CyclicBarrier和Semaphore。 一:...
素雷 发布于 3小时前

Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库

前两天有人私信我,让我爬这个网站,http://bbs.baobeihuijia.com/forum-191-1.html上的失踪儿童信息,准备根据失踪儿童的失踪时的地理位置来更好的寻找失踪儿童,这种事情本就应该义不容辞,如果对网站服务器造成负荷,还请谅解。   这次依然是用第三方爬虫包BeautifulSoup,还有Selenium+Chrome,Selenium+PhantomJS来爬取信息。 通过分析网站的框架,依然分三步来进行。 步骤一:获取http://bbs.baobeihuijia.com/forum-191-1.html这个版块上的所有分页页面链接 步骤二:获取每一个分页链接上所发的帖子的链接 步骤三:获取每一个帖子链接上要爬取的信息,编号,姓名,性别,出生日期,失踪时身高,失踪时间,失踪地点,以及是否报案   起先用的BeautifulSoup,但是被管理员设置了网站重定向,然后就采用selenium的方式,在这里还是对网站管理员说一声抱歉。     1、获取http://bbs.baobeihuijia.com/forum-191-1.html这个版块上的所有分页页面链接   通过分析:发现分页的页面链接处于<div class="pg">下,所以写了以下的代码 BeautifulSoup形式: [python] view plain copy 1. def GetALLPageUrl(siteUrl):   2.     #设置代理IP访问   3.    ...
天才小熊猫QAQ 发布于 3小时前 阅读 4

PHP 观察者模式

观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。 场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码 观察者模式实现了低耦合,非侵入式的通知与更新机制 /** * 事件产生类 * Class EventGenerator */ abstract class EventGenerator { private $ObServers = []; //增加观察者 public function add(ObServer $ObServer) { $this->ObServers[] = $ObServer; } //事件通知 public function notify() { foreach ($this->ObServers as $ObServer) { $ObServer->update(); } } } /** * 观察者接口类 * Interface ObServer */ interface ObServer { public function update($event_info = null); } /** * 观察者1 */ class ObServer1 implements ObServer { public function update($event_info = null) { echo "观察者1 收到执行通知 执行完毕!\n"; } } /**...
bengozhong 发布于 3小时前

SpringCloud(第 049 篇)Netflix Eureka 源码深入剖析(上)

1、Eureka Server 提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。 2、Eureka Client 是一个Java 客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的、使用轮询负载算法的负载均衡器。 3、在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒),如果Eureka Server在多个心跳周期没有收到某个节点的心跳,Eureka Server 将会从服务注册表中把这个服务节点移除(
HMILYYLIMH 发布于 2天前 阅读 1279 评论 1 点赞 2

疯狂Activiti6.0连载(十一)———Activiti6的流程控制逻辑

11 流程控制逻辑 本文节选自《疯狂Workflow讲义(第2版)》。 本书代码目录:https://gitee.com/yangenxiong/CrazyActiviti         本小节将以一个简单的例子,讲述Activiti关于流程处理的逻辑。 11.1 概述         在Activiti5以及jBPM4,对流程的控制使用的是流程虚拟机这套API,英文为Process Virtual Machine,简称PVM。PVM将流程中的各种元素抽象出来,形成了一套Java API。         新发布的Activiti6.0版本中,PVM及相关的API已经被移除,取而代之的是一套全新的逻辑,本小节将以一个例子,讲述这套全新逻辑,是如何进行流程控制的,本小节的案例,目的是为了让读者了解新版本Activiti是如何进行流程控制的。 11.2 设计流程对象         基于BPMN规范,Activiti创建了对应的模型,由于BPMN规范过于庞杂,为了简单起见,在本例中,我们也先创建自己的规范。代码清单18-1为一份定义我们自己流程的XML文档。         代码清单18-1:codes\18\18.1\my-bpmn\resource\myBpmn.xml <?xml version="1.0" encoding="UTF-8"?> <process id="testProcess"> <start id="start" /> <flows> <flow id="flow1" source="start" target...
杨大仙的程序世界 发布于 7天前 阅读 1757 评论 13 点赞 2

SpringMVC配置太多?试试SpringBoot

SpringMVC相信大家已经不再陌生了,大家可能对于Spring的各种XML配置已经产生了厌恶的感觉,Spring官方发布的Springboot 已经很长时间了,Springboot是一款“约定优于配置”的轻量级框架;Springboot首先解决的就是各种繁琐的XML配置,你可以不用任何XML配置,进行web服务的搭建,其次是Springboot本身就继承了web服务器,如果说前端开发人员想在本地启动后端服务不需要进行各种配置,几乎可以做到一键启动。 再有就是目前大热的微服务,而Springboot恰恰满足了快速开发微服务的开发场景;对于目前主流的框架Spring+MyBatis+redis的集成,好吧直接看代码... 以下代码是整个开发框架集成完之后的,关于Spring官方那一套如何编写启动类,如何配置端口这些随便google一大把的我就不再本文说明了。下面的代码,mybatis mapper我就不贴了,平常怎么写现在也一样,还有redis存数据取数据什么的。本文给的都是划的重点啊! 1.数据源以及其他的配置文件(PS:说好了不配置,怎么刚开始就上配置? 答:不配置也可以,如果你想把数据源硬编码写死的话。^_^) 下面给的是YML的配置文件方式,YML被各种主流的开发语言所支持,相当于常见的.properties文件。 jedis : pool : hos...
红暑 发布于 1周前 阅读 3983 评论 43 点赞 10

t-io对quartz的封装,以极简的方式来开发定时任务

定时任务不须多言,几乎是每个项目必备功能,而原生的quartz用起来着实有点哆嗦,市面上也有不少依赖spring的定时任务组件,因为笔者本人已经完全抛弃spring(笔者还抛弃了servlet),所以自己动手对quartz进行了简单封装,使其更容易开发和维护! 引入相关jar <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.t-io</groupId> <artifactId>tio-core</artifactId> <version>2.0.1.v20171015-RELEASE</version> </dependency>   创建任务类 import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * @author tanyaowu * 2017年10月8日 下午4:58:34 */ public class ZzzJob implements Job { public ZzzJob() { } /** * @param context * @throws JobExecutionException * @author: tanyaowu */ @Override public void execute(Jo...
talent-tan 发布于 1周前 阅读 2760 评论 25 点赞 7 打赏 1

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

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

源码分析之ThreadLocal

前言 Java项目中通常为了并发数据准确性经常使用Lock或者synchronized来作为并发的手段。 也就是说作为共享资源必然需要通过同步等手段来实现。那么转换一下思路, 我们确实在每个地方都需要用到共享资源么? 如果我们所有的变量都是私有的 那自然不需要同步就是thread-safe的 ThreadLocal就是这样应运而生。人如其名就是线程私有对象。 实现 ThreadLocal /* <p>Each thread holds an implicit reference to its copy of a thread-local * variable as long as the thread is alive and the <tt>ThreadLocal</tt> * instance is accessible; after a thread goes away, all of its copies of * thread-local instances are subject to garbage collection (unless other * references to these copies exist). * * @author Josh Bloch and Doug Lea * @since 1.2 */ public class ThreadLocal<T> { /** * ThreadLocals rely on per-thread linear-probe hash maps attached * to each thread (Thread.threadLocals and * inheritableThreadLocals). The ThreadLocal objects act as keys, * searched via threadLocalHashCode. This...
Mr_Qi 发布于 2周前 阅读 2165 评论 7 点赞 5

疯狂Spring Cloud连载(六)——负载均衡框架Ribbon介绍

6 负载均衡框架Ribbon介绍         本文节选自《疯狂Spring Cloud微服务架构实战》,本书将于2017年11月出版。         Spring Cloud教学视频:https://my.oschina.net/JavaLaw/blog/1552993                  本书代码共享地址:https://gitee.com/yangenxiong/SpringCloud                  本文要点              认识Ribbon              第一个Ribbon程序         负载均衡是分布式架构的重点,负载均衡机制将决定着整个服务集群的性能与稳定。根据前面章节可知,Eureka服务实例可以进行集群部署,每个实例都均衡处理服务请求,那么这些请求是如何被分摊到各个服务实例中的?本章将讲解Netflix的负载均衡项目Ribbon。   6.1 Ribbon介绍 6.1.1 Ribbon简介         Ribbon是Netflix下的负载均衡项目,它在集群中为各个客户端的通信提供了支持,它主要实现中间层应用程序的负载均衡。Ribbon提供以下特性:               负载均衡器,可支持插拔式的负载均衡规则。               对多种协议提供支持,例如HTTP、TCP、UDP。        ...
杨大仙的程序世界 发布于 2周前 阅读 2982 评论 9 点赞 4

Java 9 中的 GC 调优基础

在经过了几次跳票之后,Java 9终于在原计划日期的整整一年之后发布了正式版。Java 9引入了很多新的特性,除了闪瞎眼的Module System和REPL,最重要的变化我认为是默认GC(Garbage Collector)修改为新一代更复杂、更全面、性能更好的G1(Garbage-First)。JDK的维护者在GC选择上一直是比较保守的,G1从JDK 1.6时代就开始进入开发者的视野,直到今天正式成为Hotspot的默认GC,也是走了很长的路。 本文将主要讲解GC调优需要知道的一些基础知识,会涉及到一些GC的实现细节,但不会对实现细节做很全面的阐述,如果你看完本文之后,能对GC有一个大致的认识,那本文的写作目的也就达到了。由于在这次写作过程中,恰逢Java 9正式版发布,之前都是依赖Java 8的文档写的,如果有不正确的地方还望指正。本文将包含以下内容: GC的作用范围 GC负责的事情 JVM中的4种GC G1的一些细节 使用Java 9正式版对G1进行测试 一些简单的GC调优方法 一、GC的作用范围 要谈GC的作用范围,首先要谈JVM的内存结构,JVM内存中主要有以下几个区域:堆、方法区(JVM规范中的叫法,Hotspot大致对应的是Metaspace)、栈、本地方法栈、PC等,其中GC主要作用在堆上,如下图所示: JVM内存结构 其中堆和方法区...
心梦无双 发布于 3周前 阅读 1864 评论 8 点赞 5

疯狂Activiti6.0连载(三)——Activiti开发环境搭建

3 Activiti开发环境搭建         本文节选自《疯狂Workflow讲义(第2版)》。                  本书代码目录:https://gitee.com/yangenxiong/CrazyActiviti         本书的common-lib项目,是各个案例的依赖项目,可从以下地址获得:         https://gitee.com/yangenxiong/CrazyActiviti/tree/master/codes                  要点              安装JDK与MySQL              安装Eclipse以及Activiti插件              编写第一个Activiti程序 3.1 安装开发环境         本小节所说的Activiti开发环境包括以下内容:               Eclipse IDE               Eclipse的Activiti插件 3.1.1 下载Eclipse         本书使用Eclipse作为开发工具,如果想使用Activiti的Eclipse设计器,官方建议使用Kepler(4.3)或者 Luna(4.4)版本,本书所使用的版本为Luna,大家可以从以下的地址得到该版本的Eclipse:         http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/lunasr2          ...
杨大仙的程序世界 发布于 1个月前 阅读 2124 评论 4 点赞 5

SpringCloud(第 018 篇)Zuul 服务 API 网关微服务之代理与反向代理

1、API 服务网关顾名思义就是统一入口,类似 nginx、F5 等功能一样,统一代理控制请求入口,弱化各个微服务被客户端记忆功能; 2、本章节主要讲解了使用 zuul 的代理功能与反向代理功能,当然 zuul 还有很多属性设置,我就没一一列举所有的测试方法了; 3、http://localhost:8150/routes 地址可以查看该zuul微服务网关代理了多少微服务的serviceId;
HMILYYLIMH 发布于 1个月前 阅读 1913 评论 7 点赞 2

疯狂Activiti6.0连载(一)——Activiti介绍

1 Activiti介绍         本文节选自《疯狂Workflow讲义(第2版)》。                           在计算机尚未普及时,许多工作流程采用手工传递纸张表单的方式,一级一级审批签字,工作效率非常低下,对于数据统计以及生成报表的功能,需要经过大量的手工操作才能实现。随着电脑的普及,这些工作的参与者只需要在电脑的系统中填入工作内容,系统就会按照定义好的流程自动执行,各级审批者可以得到工作的信息并作出相应的审批和管理操作,数据统计和报表的生成均由系统代为完成,这样大大提高了工作效率,在这种背景下,各种的工作流应用以及中间件应运而生。         工作流应用在日常工作中的应用越来越广泛,JavaEE领域出现了许多优秀的工作流引擎,例如JBoss社区的jBPM、OpenSymphony的OSWorkflow等,在2010年5月17日,以Tom Baeyens为首的工作流小组发布了一个全新的工作流引擎——Activiti,该工作流引擎的第一个版本为5.0alpha1,由于Tom Baeyens是jBPM的创始人(由于意见分歧离开JBoss),因此Activiti的团队希望该流程引擎是jBPM4的延伸,希望在jBPM中积累的经验和知识的基础上,继续进行新一代工作流解决方案的建设,因...
杨大仙的程序世界 发布于 1个月前 阅读 3122 评论 26 点赞 9

关于Python 列表操作 ,最常见问答Top10

列表是最常用的数据类型之一,本文整理了 StackOverflow 上关于列表操作被访问最多的10个问答,如果你在开发过程中遇到这些问题,不妨先思考一下如何解决。 1、迭代列表时如何访问列表下标索引 普通版: items = [8, 23, 45] for index in range(len(items)): print(index, "-->", items[index]) >>> 0 --> 8 1 --> 23 2 --> 45 优雅版: for index, item in enumerate(items): print(index, "-->", item) >>> 0 --> 8 1 --> 23 2 --> 45 enumerate 还可以指定元素的第一个元素从几开始,默认是0,也可以指定从1开始: for index, item in enumerate(items, start=1): print(index, "-->", item) >>> 1 --> 8 2 --> 23 3 --> 45 2、append 与 extend 方法有什么区别 append表示把某个数据当做新元素追加到列表的最后面,它的参数可以是任意对象 x = [1, 2, 3] y = [4, 5] x.append(y) print(x) >>> [1, 2, 3, [4, 5]] extend 的参数必须是一个可迭代对象,表示把该对象里面的所有元素逐个地追加到列表的后面 x = [1, 2, 3] y = [4, 5] x.extend(y) print(x) >>> [1, 2, 3, 4, 5] # 等价于: for i in y: x.append(i) 3、检查列表是否为空 普通版:...
liuzhijun 发布于 1个月前 阅读 1183 评论 3 点赞 10

从0开始的微服务架构:(一)重识微服务架构

导语 虽然已经红了很久,但是“微服务架构”正变得越来越重要,也将继续火下去。 各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,要么就是以高端的专业术语来讲述何为微服务架构。就是没有一个做到成熟地将技术传播出来,同时完美地照顾“初入微服务领域人员”,从0开始,采用通俗易懂的语言去讲解微服务架构的系列。 所以,本文试图开启微服务架构专题“Re:从0开始的微服务架构”,为还没有入门该领域的技术人员开路,也帮助微服务架构老手温故知新。   这是专题的第一篇文章,从最基础的地方入手,让我们重识微服务架构。 前言 得益于2013年Docker的诞生,微服务概念及架构的推广和落地变得更加的可靠和方便。在2016年及之前,微服务架构的讨论更多的是活跃于互联网企业及社区。现如今,随着Docker和微服务架构组件与Docker等相关技术的逐步成熟,微服务架构已然步入传统企业及传统行业。 但是,程序员作为一个理性消费的群体,需要冷静地思考,避免挖个大坑把自己给埋了。所以,我们需要冷静地搞清楚:微服务(架构)是什么?它有什么优势劣势?我们为什么需要采用微服务架构?如...
git.toutiao.im 发布于 1个月前 阅读 3580 评论 18 点赞 24

微服务后如何做一次系统梳理

微服务治理的特点,网络延迟、分布式事务、异步消息。因此我们针对微服务的梳理也是从这几个方面入手。微服务后依赖关系从代码依赖变成了通讯依赖,我们梳理微服务系统的关键点,就是找出通讯依赖,确定是强依赖,还是弱依赖。
新栋BOOK 发布于 1个月前 阅读 1999 评论 7 点赞 4

LVM锁机制分析

## LVM支持的锁类型 0. 无锁(No Locking) - 不使用锁,此状态下不能并行执行命令,或者由使用者处理并行问题。 1. 本地锁(Local Locking) - 当使用本地flock锁,只能在单机环境下使用;当use_lvmlockd=1时,同时使用lvmlockd提供的锁,可用于集群环境。 2. 外部锁(External Locking) - 使用外部共享库提供的锁功能,可以在配置文件中设置库的名称,在共享库中只要按要求。 3. 集群锁(Clustered Locking) - 使用内建的集群锁,必须配合clvmd来使用,同时必须关闭lvmetad缓存功能。 4. 只读锁(Read-Only Locking) - 只读模式,禁止元数据修改。 5. 哑巴锁(Dummy Locking) - 只读模式,被不需要锁的工具使用。 配置文件: ```sh $ cat /etc/lvm/lvm.conf ... # Configuration option global/locking_type. # Type of locking to use. # # Accepted values: # 0 # Turns off locking. Warning: this risks metadata corruption if # commands run concurrently. # 1 # LVM uses local file-based locking, the standard mode. # 2 # LVM uses the external shared library locking_library. # 3 # LVM uses built-in clustered locking with clvmd. # This is inco...
LastRitter 发布于 1个月前 阅读 1606 评论 1 点赞 1

Eclipse中怎么将JRE换成JDK

关于JDK 和 JRE 的介绍 JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。 JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。 如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。 以上解释来源:知乎 在Eclipse我们项目中的Libraries库默认是JRE的,一般需求都能满足,但是当需要编译java文件时就不行了,这就需要我们把它换成JDK。 步骤: 点击相应项目->右键BuildPath-> configureBuildPAth 点击Libraries 出现下面的界面 点击一下JRE System Library(选中) 然后 ->  点击右边的 Edit (不选中Edit是灰的) 出现下面的界面    (这个JDK是我已经加进来后的,你的可能没有)   如果开始你就有那直接选一下就行了。。。。QAQ 如果没有就 点击Installed JREs 出现下面界面 这个JDK(黄色箭...
为了美好的明天 发布于 1个月前 阅读 2151 点赞 1

用docker搭建elasticsearch集群

## 概述 用docker进行elasticsearch的部署非常简单,如果要实现集群配置,需要进行一些特殊的处理,本文介绍如何利用docker进行elasticsearch集群的搭建。 具体的配置可以参照该 [示例](https://github.com/qihaiyan/fluentd-boot) ## 主节点配置 ### docker-compose.yml配置文件 ```yml es: image: elasticsearch volumes: - ./es:/usr/share/elasticsearch/data - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml ports: - 9200:9200 - 9300:9300 ``` 其中的```./es:/usr/share/elasticsearch/data```是将elasticsearch的数据文件挂在到本机的一个目录上,这儿指定的本机目录是./es,可以修改为其它有权限的目录。 ### elasticsearch.yml配置文件 ``` yml cluster.name: elasticsearch_cluster node.name: node-master node.master: true node.data: true http.port: 9200 network.host: 0.0.0.0 network.publish_host: master-ip discovery.zen.ping.unicast.hosts: ["master-ip"] ``` ```network.publish_host: master-ip```指定了本机ip,需要将master-ip修改为真实的机器ip。```discovery.zen.ping.unicast.hosts```中的master-ip同样需要修...
QiHaiYan 发布于 2个月前 阅读 1582 点赞 1

数据异构的武器-BINLOG+MQ

分库分表中有一个最为常见的场景,为了提升数据库的查询能力,我们都会对数据库做分库分表操作。比如订单库,开始的时候我们是按照订单ID维度去分库分表,那么后来的业务需求想按照商家维度去查询,比如我想查询某一个商家下的所有订单,就非常麻烦。这个时候通过数据异构就能很好的解决此问题。
新栋BOOK 发布于 2个月前 阅读 1625 评论 13 点赞 1

Redis实现参数的集中式管理

系列文章 Zookeeper实现参数的集中式管理 JMS实现参数的集中式管理 Redis实现参数的集中式管理 前言 上一篇文件JMS实现参数的集中式管理中使用JMS作为中间层,利用的JMS的发布订阅功能实现了对参数的集中式管理;同样分布式缓存Redis也提供了类似的发布订阅功能,并且Redis本身提供了缓存和持久化的功能,本文将介绍通过Redis实现简单的参数集中式管理。 Maven引入 Spring相关的jar引入参考上一篇文章 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.4.0</version> </dependency> 目标 1.可以同时配置监听多个节点如/app1,/app2; 2.希望只需要配置如/app1,就能够监听其子节点如/app1/modual1以及子节点的子节点如/app1/modual1/xxx/…; 3.服务器启动能获取当前指定父节点下的所有子节点数据; 4.在添加节点或者在更新节点数据的时候能够动态通知,这样代码中就能够实时获取最新的数据; 5.spring配置中可以从Zookeeper中读取参数进行初始化。 虽然在实现的方式上有点区别,但是最终达成的目标是一致的,同样列出了这5条目标 实现 RedisWatcher主要用来和Redis进行连接,然后对监听的节点进行初始化,模糊订阅需...
ksfzhaohui 发布于 2个月前 阅读 3304 点赞 2

基于Redis实现分布式应用限流

限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务。
冷冷gg 发布于 2个月前 阅读 4788 评论 9 点赞 9

spring boot / cloud (十五) 分布式调度中心进阶

# spring boot / cloud (十五) 分布式调度中心进阶 在[](https://my.oschina.net/wangkang80/blog/983208)这篇文章中介绍了如何在spring boot项目中集成quartz. 今天这篇文章则会进一步跟大家讨论一下设计和搭建**分布式调度中心**所需要关注的事情. 下面先看一下,总体的逻辑架构图: ## 分布式调度-逻辑架构示意 ![分布式调度-逻辑架构示意](https://static.oschina.net/uploads/img/201708/29201705_LnBY.png "分布式调度-逻辑架构示意") ## 架构设计 总体思路是,将**调度**和**执行**两个概念分离开来,形成**调度中心**和**执行节点**两个模块: ### **调度中心** 是一个公共的平台,负责所有任务的调度,以及任务的管理,不涉及任何业务逻辑,从上图可以看到,它主要包括如下模块: - **核心调度器quartz** : 调度中心的核心,按照jobDetail和trigger的设定发起作业调度,并且提供底层的管理api - **管理功能** : 可通过restful和web页面的方式动态的管理作业,触发器的CURD操作,并且实时生效,而且还可以记录调度日志,以及可以以图表,表格,等各种可视化的方式展现调度中心的各个维度的指标信息 - **RmsJob和RmsJobDisallowConcurrent** : 基于http远程调用(RMS)的作业和禁止并发执...
wangkang80 发布于 2个月前 阅读 3782 评论 9 点赞 2
顶部