中间件
文章平均质量分 62
__HelloWorld__
这个作者很懒,什么都没留下…
展开
-
JAVA注解
Java注解Annotations主要用于为目标程序提供额外补充的说明信息。注解以@符号标识注解并不改变编译程序的行为注意可以为程序元素:实例变量、构造方法、方法或者类添加元数据信息注解并不是单纯的注释,但却可以修改编译器如何来处理目标程序下面我们举例说明,为什么说注解并非单纯的注解,下面这段代码将抛出编译错误,因为我们使用了@Override注解,但却没有Override重写父类方法,而是重载Overload父类方法,因此编译器将抛出编译异常/* Java program to demon原创 2020-07-09 21:47:49 · 555 阅读 · 0 评论 -
CodeMirror使用笔记
最近因工作需要,在项目中使用了CodeMirror代码编辑器,以下是使用笔记。首先,看下最终的效果引入基本的需要资源<script src="<%=request.getContextPath()%>/resources/js/codemirror/codemirror.js" type="text/javascript"></script><...原创 2019-12-09 11:03:30 · 1821 阅读 · 0 评论 -
Java异常处理的九个最佳实践
确保在Finally程序块中完成资源释放或者使用Try-With语句比如对于InputStream,当我们使用完毕,我们要确保资源被正确关闭,比如下面我们常见的错误用法,不要在try模块中关闭资源,因为一旦try语句块中的其他方法发生异常,很有可能无法执行到inputStream.close()方法的。public void doNotCloseResourceInTry() { Fi...原创 2019-11-21 22:09:12 · 718 阅读 · 0 评论 -
Linux scp 命令
Secure Copy Protocol SCP 是一种网络协议,基于BSD RCP协议,支持网络间文件传输。SCP使用SSH进行认证和文件传输,从而确保传输中的数据的真实性和机密性,默认情况下,SCP使用3-DES算法加密传输数据,可以通过-c参数使用Blowfish加密算法来提高传输效率。SCP支持上传文件到服务器,也可以从服务器执行下载操作。SCP默认使用TCP 22端口。...原创 2018-08-21 20:28:34 · 496 阅读 · 0 评论 -
Elastic Job 入门教程(三)— 作业监听
接Elastic Job 入门教程(二)— Spring Boot框架下是实现Elastic Job 脚本作业(Script Job),本章我们讨论作业Job的监听。定义监听器@Component@Slf4jpublic class CommonElasticJobListener implements ElasticJobListener { @Override publ...原创 2018-09-24 21:06:16 · 1500 阅读 · 0 评论 -
Elastic Job 入门教程(一)— 与Spring Boot集成
注册中心配置@Configurationpublic class RegistryCenterConfig { @Value(&amp;amp;quot;${reg-center.server-list}&amp;amp;quot;) private String serverList; @Value(&amp;amp;quot;${reg-center.namespace}&amp;amp;quot;原创 2018-09-19 19:37:32 · 3476 阅读 · 0 评论 -
约定由于配置(Convention over Configuration)
###约定优于配置约定优于配置(convention over configuration)[1],也称作按约定编程[2],是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。本质是说,开发人员仅需规定应用中不符约定的部分。例如,如果模型中有个名为Sale的类,那么数据库中对应的表就会默认命名为sales。只有在偏离这一约定时,例如将该表命名为"produc...转载 2018-09-25 21:02:59 · 684 阅读 · 0 评论 -
Elastic Job 入门教程(四)— 事件追踪
Elastic-Job提供了事件追踪功能,用于查询、统计和监控作业执行历史和执行状态。Elastic-Job-Lite在配置中提供了JobEventConfiguration,目前支持数据库方式配置。事件追踪所配置的DataSource数据库中会自动创建JOB_EXECUTION_LOG和JOB_STATUS_TRACE_LOG两张表以及若干索引。以下是代码示例:定义数据源@Getter@S...原创 2018-09-26 10:44:34 · 4789 阅读 · 3 评论 -
RabbitMQ VS Apache Kafka (二)—— Kafka简介
接上一章【RabbitMQ VS Apache Kafka (一)】,本章我们讨论Kafka。Kafka Kafka is a distributed, replicated commit log.Kafka本身没有队列的概念,作为一个消息中间件,乍看起来,这略显奇怪,这可能与我们长期以来的形成的一个固化思维有关——但凡消息系统,肯定离不开消息队列。让我们重新回头来看,如何理解distri...翻译 2018-10-11 21:10:16 · 678 阅读 · 0 评论 -
Elastic Job 入门教程(五)— 配置Zookeeper集群注册中心
在我们之前的示例中,注册中心配置ZookeeperConfiguration中的serverLists配置属性,我们都是使用的Zookeeper单服务器reg-center: server-list: "192.168.43.61:2181" namespace: elastic-job-lite-spring-bootserverLists属性本身是支持多个地址,如: host1:...原创 2018-09-27 15:37:10 · 8646 阅读 · 6 评论 -
RabbitMQ VS Apache Kafka (三)—— 基本结论
在有了前两章的基本介绍,关于RabbitMQ和Kafka,我们简单总结如下:RabbitMQ VS Apache Kafka (二)RabbitMQ VS Apache Kafka (一)结论RabbitMQ提供了类似瑞士军刀功能多样的消息模式。当用户仅仅需要部分消息子集的时候,借助其强大的路由功能,无需消费者过多干预,即可轻松实现消息的检索、反序列化以及检测需求。RabbitMQ非常...翻译 2018-10-12 14:30:27 · 424 阅读 · 0 评论 -
Elastic Job 入门教程(六)— “动态”新增脚本类型作业(Script Job)
在Elastic Job 入门教程(二)— Spring Boot框架下是实现Elastic Job 脚本作业(Script Job)中,我们简单介绍了如何在SpringBoot框架下以注解的方式实现脚本类型作业(Script Job),这里我们要提出一个问题?如何在不修改源码的情况下,仅通过增加配置就可以达到新增一个脚本类型的作业?这是有意义的,因为在实际的业务场景中,我们不可能只有一个...原创 2018-09-27 21:55:58 · 1539 阅读 · 0 评论 -
Elastic Job 入门教程系列
Elastic Job 入门教程(一)— 与Spring Boot集成Elastic Job 入门教程(二)— Spring Boot框架下是实现Elastic Job 脚本作业(Script Job)Elastic Job 入门教程(三)— 作业监听Elastic Job 入门教程(四)— 事件追踪Elastic Job 入门教程(五)— 配置Zookeeper集群注...原创 2018-09-28 13:38:31 · 2907 阅读 · 0 评论 -
Elastic Job 入门教程(二)— Spring Boot框架下是实现Elastic Job 脚本作业(Script Job)
在Elastic Job 入门教程(一)— 与Spring Boot集成这篇文章中,我们简单介绍了Spring Boot与Elastic Job 的集成,并见简单实现了SimpleJob类型作业。本章,我们介绍Spring Boot框架下如何实现Elastic Job的Script Job类型作业。...原创 2018-09-23 18:46:01 · 1800 阅读 · 0 评论 -
Spring Boot 1.0多数据源配置
在Spring Boot 1.x下,我们的多数据源配置如下:读数据库@Configuration@EnableTransactionManagement@EnableJpaRepositories(entityManagerFactoryRef = &quot;entityManagerFactoryPrimary&quot;, transactionManagerRef = &quot;transactionMa...原创 2018-09-13 10:54:58 · 677 阅读 · 0 评论 -
Atomic Variables and ConcurrentMap
AtomicIntegerjava.concurrent.atomic包中包含了许多可以执行原子操作的类,所谓的原子操作是指在多线程并发的情况下无需使用synchronized或者其他锁同步机制的情况下,仍旧可以正确执行的操作,我们就称之为原子操作。 在JVM内部实现上,这些类通过使用compare-and-swap (CAS)来实现原子操作,CAS是CPU内部的一种原子指令,执行速度远比通...翻译 2018-09-04 11:17:18 · 304 阅读 · 1 评论 -
Thread.join
Waits for this thread to die 确保线程先后顺序执行public class ThreadJoinTest { public static void main(String[] args) throws Exception { Thread thread0 = new Thread(() -> System.out.p...原创 2018-08-30 14:12:15 · 320 阅读 · 0 评论 -
Java中的sleep与wait区别
sleep让当前线程休眠指定时间。休眠时间的准确性依赖于系统时钟和CPU调度机制。不释放已获取的锁对象,如果sleep方法在同步上下文中调用,那么其他线程是无法进入到当前同步块或者方法中的。可通过调用interrupt()方法来唤醒休眠线程。wait让当前线程进入等待状态,当别的其他线程调用notify()或者notifyAll()方法时,当前线程进入就绪状态wait方法...翻译 2018-08-30 14:49:46 · 22551 阅读 · 1 评论 -
Spring Batch简单入门(三)- ItemReader 与 ItemWriter
接上一章,Spring Batch本身提供了许多开箱即用的ItemReader与ItemWriter实现。Spring Batch 4针对这些组件又提供了Builder实现,用户可以很方便的通过Builder模式来使用这些组件。本章,我们重点讨论以下几种ItemReader和ItemWriter的使用。ItemReaderFlatFileItemReader对于FlatFi...原创 2018-09-11 11:51:35 · 11173 阅读 · 0 评论 -
Spring Batch简单入门(四) - Job启动与监控
接上一章,本章我们介绍Job的启动与监听。Running a JobSpring Boot默认支持自动启动已配置好的Job,我们可以通过配置项**spring.batch.job.enabled=false**来禁止Spring容器自动启动Job。正常情况下,当我们通过调度器调用Job时,整个流程如下: A JobExecution,is the primary storage...原创 2018-09-11 16:21:54 · 7150 阅读 · 0 评论 -
Threads and Executors
Threads and RunnablesJava自JDK1.0就支持线程,一般来说,在启动线程之前,我们需要指定线程实际执行方法体,通常我们可以通过重写Runnable接口中的run方法来完成。Runnable task = () -&gt; { String threadName = Thread.currentThread().getName(); System....翻译 2018-09-03 14:43:41 · 319 阅读 · 0 评论 -
Synchronization and Locks
Synchronized上一章节中,我们初步了解了如何通过ExecutorService来执行并发代码,注意,我们并没有深入讨论多线程间的同步问题,本章,我们将重点讨论线程间同步问题,深入剖析多线程间如何优雅的共享变量,首先,我们从一个简单的例子入手。int count = 0;void increment() { count = count + 1;}如果没有任何同步措...翻译 2018-09-03 16:37:17 · 317 阅读 · 0 评论 -
Spring Batch简单入门(一)- 简介
从本章开始的接下来几篇,我们将介绍关于Spring Batch的相关知识。本章,是一个关于Spring Batch的简单入门。Spring Batch根植于Spring Framework大家庭,是一个轻量级的批处理框架,在企业级应用中,我们常见一些批处理业务场景,借助Spring Batch我们可以很方便的开发出健壮、易用的批处理应用。因为Spring Framework框架可以说满...原创 2018-09-10 20:03:26 · 20739 阅读 · 0 评论 -
Spring Batch简单入门(二)- Job配置
上一章,我们简单介绍了Spring Batch相关知识,今天我们进一步学习有关如何配置一个简单的Job。我们重新看下这张图。 一个Job对应N个Step(N&gt;=1),一个Step包含一个Reader,一个Processor,一个Writer。我们的代码组织如下: 定义ItemReader @Bean @Qualifier("repositoryItemRe...原创 2018-09-10 21:20:04 · 5958 阅读 · 0 评论 -
Spring Boot 2.0多数据源配置
两个数据库实例,一个负责读,一个负责写。datasource-reader: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://192.168.43.61:3306/test?useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=tru...原创 2018-09-13 09:57:46 · 612 阅读 · 0 评论 -
YAML - Spring Boot 下更好的配置选择?
YAML an alternative to Properties file … with Spring Boot对于许多Java工程师来说,一直习惯于使用properties文件或者xml文件来定义应用程序配置。但SpringBoot允许我们仅通过单个yml文件就可以完成所有与应用相关的配置。补充说明一下:比较不同格式的配置文件的优劣,都会有一定的主观性。但对于SpringBoot配置来说...翻译 2018-09-29 16:02:36 · 1226 阅读 · 0 评论 -
ZooKeeper介绍
我本人曾经使用过 ZooKeeper 作为 Dubbo 的注册中心,另外在搭建 Solr 集群的时候,我使用到了 ZooKeeper 作为 Solr 集群的管理工具。前几天,总结项目经验的时候,我突然问自己 ZooKeeper 到底是个什么东西?想了半天,脑海中只是简单的能浮现出几句话:Zookeeper 可以被用作注册中心。Zookeeper 是 Hadoop 生态系统的一员。构建...转载 2018-09-30 09:42:48 · 398 阅读 · 0 评论 -
Jenkins使用笔记
本章简单记录Jenkins的使用笔记首先,我们从官网中下载安装介质,可以看到这里有适合各种操作系统版本的安装源介质,简单起见,我们直接下载一个通用的war程序包执行命令java -jar jenkins.war --ajp13Port=-1 --httpPort=8081,可根据实际情况指定启动端口,启动Jenkins注意,首次启动时会生成管理员初始密码,初始密码也可通过查...原创 2018-12-17 10:10:10 · 547 阅读 · 0 评论 -
GitLab 与 Jenkins 持续集成实践
首先,我们简单说明下我们的部署环境:GitLab:192.168.43.61 Jenkins:192.168.43.116Jenkins中系统设置中,配置GitLab连接信息,这里需要我们指定URL地址,Credentials连接凭据。我们可以通过Add按钮新增一个连接凭据API Token需要GitLab提供,我们在GitLab中的User Settings - Acc...原创 2018-12-17 10:55:16 · 1070 阅读 · 0 评论 -
什么是微服务——微服务架构体系介绍
Why Microservices?回答这个问题前,我们先看下之前大行其道的单体架构 - Monolithic Architecture,对于非专业人士来讲,所谓的单体架构,其就像一个超大容器,容器内集中包含了该应用的所有软件组件,并且组件与组件之间紧密耦合。对于这种架构,其缺陷或者说潜在不足也很明显,简单总结如下:臃肿僵化不灵活: 单体架构很难采用多种技术可靠性较差: 这种架构最明显...翻译 2019-06-15 22:02:08 · 2669 阅读 · 0 评论 -
微服务架构特征
一个典型的微服务架构(MSA)通常包含以下组件:客户端身份标识提供者: 提供访问服务所需的身份密钥,服务网关会负责完成对请求客户端的基本验签工作API服务网关: 客户端访问目标服务的入口点,经服务请求经服务网关路由到目标服务提供方。服务网关的优点:服务更新操作对客户端透明服务与服务之间的消息路由协议不一定非得基于WEB服务网关可以统一进行安全授权或者负载均衡等操作消息:...翻译 2019-06-16 16:25:12 · 901 阅读 · 0 评论 -
Java之keytool命令学习
Java Keytool is a key and certificate management utility. It allows users to manage their own public/private key pairs and certificates. It also allows users to cache certificates. Java Keytool store...原创 2019-06-20 21:46:54 · 768 阅读 · 0 评论 -
微服务架构系列——API服务网关
本章我们简单介绍微服务架构下的API服务网关,本章我们将讨论以下话题:什么是API服务网关为什么需要API服务网关API服务网关的工作机制处理横切关注点当我们在开发设计大型软件应用时,我们一般都会采用分层的架构模式,比如,在WEB应用程序中,下面的这种架构是我们最为常见的设计模式在这样的一个分层架构中,我们可以看到应用被分成了web层、业务层、数据层。在分层架构设计中,我们可以看...翻译 2019-06-17 19:07:45 · 954 阅读 · 0 评论 -
MyBatis动态SQL中Map参数处理
在MyBatis中,如果我们需要传递两个参数,有一种方式是通过Map作为传入参数,在动态SQL中,我们需要对传入的Map参数中的值进行判断,然后进行动态SQL的条件拼接处理。假设我们有传入参数map如下:map.put("name",name);map.put("level",level);对应的,我们有配置文件如下,可以看到,在test表达式中,我们不用再通过#,$取值符了,就直接这样...原创 2019-06-25 18:30:28 · 18106 阅读 · 0 评论 -
HashMap 与 HashTable的区别
HashMap实现了Map接口非线程同步,非线程安全不允许重复键键和值均允许为nullHashMap<Interger,String> employeeHashmap=new HashMap<Integer,String>();employeeHashmap.put(1,"Arpit");employeeHashmap.put(2,null); // w...原创 2019-06-23 16:45:51 · 342 阅读 · 0 评论 -
MyBatis框架下防止SQL注入
与之前的ORM框架不同,MyBatis使用XML描述符将对象映射到SQL语句或者存储过程中,这种机制带给我们更大的灵活度通过SQL来操作数据库对象,因此,我们必须小心这种便利下SQL注入的可能性安全用法<select id="getPerson" parameterType="int" resultType="org.application.vo.Person">SELECT *...翻译 2019-06-26 22:25:16 · 2231 阅读 · 0 评论 -
ubuntu中GitLab的安装与配置
这里,我们采用离线安装的方式安装GitLab首先,我们从清华大学开源软件镜像站中下载软件包,用户可根据实际的服务器操作系统版本来选择不同的镜像资源,这里我们以ubuntu为例。执行命令sudo dpkg -i gitlab-*.deb,安装GitLab,若无报错,会提示修改external_url,打开/etc/gitlab/gitlab.rb,根据实际情况修改属性值,之后执行命令su...原创 2018-12-14 16:49:56 · 2803 阅读 · 0 评论 -
Ng Alain分页控件的使用
在【Ng Alain】官方示例源码中,关于pagination分页控件的代码如下: &lt;ng-template #pagination&gt; &lt;nz-pagination [nzTotal]="50" [nzPageSize]="5" (nzPageIndexChange)="getData()"&gt原创 2018-11-29 14:49:12 · 3256 阅读 · 1 评论 -
IntelliJ IDEA 中Java 9 模块化实战
右键-New-Module,输入模块基本信息新建module-info.java文件输入module-info.java内容如下:module helloworld { exports com.hello;}新建HelloWorld.java文件package com.hello;import java.util.Calendar;public class Hel...原创 2018-11-15 11:54:27 · 2922 阅读 · 1 评论 -
RabbitMQ VS Apache Kafka (八)—— Kafka消息路由原语与路由保证
Kafka的路由保证主要基于以下实现:消息持久化:一旦消息存储到主题中,则确认不会出现丢失消息的问题消息确认:Kafka(或者是Zookeeper)与发布者、订阅者之间的消息通信消息批量Kafka与RabbitMQ一个最大的不同之处在于Kafka支持在消息发送和处理时批量操作。当然,RabbitMQ也可以实现类似批量的操作:每多少条消息暂停一次直至收到所有的消息确认。...翻译 2018-10-23 20:49:39 · 1051 阅读 · 0 评论