Maven 多环境配置打包方式
使用 profiles12345678910111213141516171819202122232425262728293031323334<profiles> <profile> <id>local</id> <properties> <environment>local</environment> <env>LOCAL</env> </properties> </profile> <profile> <id>dev</id> <properties> <environment>dev</environment> <env>DEV</env> ...
根据 「阿里巴巴开发规范」 配置 IDEA 开发环境
google-code-checks-xxx.xml根据 google-code-checks.xml 修改按照官方文档加上中文注释具体的 checkstyle 规则可以查看 google-code-checks.xml
命名规约通过 checkstyle 控制, 所有不符合要求的 包名, 类名, 方法名, 局部变量, 静态变量, 常量 都会提示
接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁 性,并加上有效的 Javadoc 注释
idea 对于多余的修饰符也会标记, 这里使用 checkstyle 提示
常量定义
重复的字符串出现 2 次以上, 就会提示, 应该使用常量字符串代替
当定义一个常量时, 希望使用大写的 L 来代替小写的 l, 原因是小写的 l 和数字 1 很象
long 或者 Long 初始赋值时,必须使用大写的 L,不能是小写的 l,小写容易跟数字 1 混淆,造成误解
格式规约全部使用 checkstyle 约束如果违反规则, 则会给出提示, 按照相应提示修改即可, 修 ...
python 面向对象(进阶篇)原文出处:武沛齐 cnblog
面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用
类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中)
对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数
面向对象三大特性:封装、继承和多态
本篇将详细介绍 Python 类的成员、成员修饰符、类的特殊成员。
类的成员类的成员可以分为三大类:字段、方法和属性
注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段。而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份
字段字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同,
普通字段属于 对象
静态字段属于 类
12345678910111213141516class Province: # 静态字段 country = '中国' def __init__(self, name): # ...
Python 面向对象基础部分
原文出处: 武沛齐 cnblog
概述
面向过程:根据业务逻辑从上到下写垒代码
函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
面向对象:对函数进行分类和封装,让开发“更快更好更强…”
面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处。
123456789101112131415161718while True: if cpu 利用率 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 硬盘使用空间 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 内存占用 > 80%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接
随着时间的推移,开始使用了函数式编程,增强代码的重用性和可读性,就变成了 ...
一个基于 dubbo filter 的日志追溯系统设计
解决的问题
了解线上系统的运行状态
快速准确定位线上问题
发现系统瓶颈
预警系统潜在风险
挖掘产品最大价值
日志的分类
诊断日志, 典型的有:
请求入口和出口
外部服务调用和返回
资源消耗操作: 如读写文件等
容错行为: 如云硬盘的副本修复操作
程序异常: 如数据库无法连接
后台操作:定期执行删除的线程
启动、关闭、配置加载
统计日志:
用户访问统计:用户 IP、上传下载的数据量,请求耗时等
计费日志(如记录用户使用的网络资源或磁盘占用,格式较为严格,便于统计)
审计日志:
管理操作对于简单的系统,可以将所有的日志输出到同一个日志文件中,并通过不同的关键字进行区分。而对于复杂的系统,将不同需求的日志输出到不同的日志文件中是必要的,通过对不同类型的文件采用不同的日志格式
**业务日志 **
分布式日志系统的设计
日志采集器负责把业务系统的方法调用栈和远程服务调用信息从业务系统中传递给处理器
实现方式有:
应用层编写代码主动推送
AOP 拦截
JavaAgent 字节码增强
问题:这里推送给采集器的日志是统一格式的 ...
新时代码农
未读log MDC 的使用
MDC 介绍MDC(Mapped Diagnostic Context, 映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能. 某些应用程序采用多线程的方式来处理多个用户的请求.在一个用户的使用过程中, 可能有多个不同的线程来进行处理. 典型的例子是 Web 应用服务器. 当用户访问某个页面时, 应用服务器可能会创建一个新的线程来处理该请求,也可能从线程池中复用已有的线程. 在一个用户的会话存续期间, 可能有多个线程处理过该用户的请求. 这使得比较难以区分不同用户所对应的日志.当需要追踪某个用户在系统中的相关日志记录时, 就会变得很麻烦.
一种解决的办法是采用自定义的日志格式, 把用户的信息采用某种方式编码在日志记录中. 这种方式的问题在于要求在每个使用日志记录器的类中,都可以访问到用户相关的信息. 这样才可能在记录日志时使用. 这样的条件通常是比较难以满足的. MDC 的作用是解决这个问题.
MDC 可以看成是一个与当前线程绑定的哈希表, 可以往其中添加键值对. MDC 中包含的内容可以被同一线程中执行的代码所访 ...
看到群里有朋友出现了下面的错误, 我也出现了
1com.alibaba.dubbo.rpc.RpcException: Forbid consumer 192.168.1.89 access service com.alibaba.dubbo.monitor.MonitorService from registry zkserver:2181 use dubbo version 2.5.3, Please check registry access list (whitelist/blacklist).
在出现上面的错误时, 都会打印下面一段信息
1INFO [com.alibaba.dubbo.monitor.dubbo.DubboMonitor] - [DUBBO] Send statistics to monitor zookeeper://zkserver:2181/com.alibaba.dubbo.monitor.MonitorService?dubbo=2.5.3&interface=com.alibaba.dubbo.monitor.MonitorSe ...
前提条件群里面有一篇 zheng- 环境搭建及系统部署文档 20170213(三版).docx, 里面详细讲解了各个依赖软件的安装和配置,所以这里不会再讲依赖的搭建过程.假设你已经将所有的依赖环境搭建完毕.
我的环境
名称
版本
系统
MacOS 10.12.6
IDE
Intellij IDEA 2017.2.3
JDK
1.8
Maven
3.3.9
Dubbo
2.5.3
Zookeepe
3.4.10
Nginx
1.12.1
ActiveMQ
5.15.0
MySQL
5.7.16
Redis
3.2.3
Dubbo-admin
Dubbo-monitor
用到的工具
IDEA
LICEcap –> gif 制作
MWeb –> Markdown 编辑器
iTerm –> 替代 Terminal 的工具
环境搭建我记得去年还是前年, 用 Intellij IDEA 的人已经超过了 Eclipse, 如果你还在用 Eclipse, 我想安利你马上转到 IDEA 来, 不是一般的好用, 我已经安 ...
AI:人工智能
未读View project onGitHub
概述当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具。
Dapper–Google 生产环境下的分布式跟踪系统,应运而生。那么我们就来介绍一个大规模集群的跟踪系统,它是如何满足一个低损耗、应用透明的、大范围部署这三个需求的。当然Dapper 设计之初,参考了一些其他分布式系统的理念,尤其是 Magpie 和 X-Trace,但是我们之所以能成功应用在生产环境上,还需要一些画龙点睛之笔,例如采样率的使用以及把代码植入限制在一小部分公共库的改造上。
自从 Dapper 发展成为一流的监控系统之后,给其他应用的开发者和运维团队帮了大忙,所以我们今天才发表这篇论文,来汇报一下这两年来,Dapper是怎么构建和部署的。Dapper 最初只是作为一个自给自足的监控工具起步的,但最终进化成一个监控平台,这个监控平台促生出多种多样 ...
相对于 Hello World 版的插件, 我们可以学习一个 API 的用法.
在接下来的博文中将创建一个翻译插件, 相对于 Hello World 版的插件,我们可以学习一个 API 的用法.
在写之前, 先补充一下上一篇博文中存在的问题.
使用 Gradle 开发 Intellij IDEA Plugin 的问题当我们使用 Intellij 自带的 Intellij Platform Plugin 创建插件项目后, 我们可以通过 Intellij 以图形化界面创建 Action, Module Component 等,就像这样:
OK 之后, 就会自动创建一个 GenerateActionByGui 继承 AnAction 的类, 并且在 plugin.xml 中自动写入插件的配置:
12345<actions> <action id="plugin.demo" class="com.code.demo.GenerateActionByGui" text="demo" description=& ...
IDEA Plugin 开发记录 hello world 篇.
为什么没有 Intellij 插件开发入门, 因为网上已经有很多入门的教程了, 随便一搜, 大部分都是 Hello World 入门教程, 这里再写就没有意义了,接下来的几篇都将围绕自己开发的几个插件, 将用到的没有用到的都写出来, 一是做一个记录, 二是希望能帮助那些想开发自己的插件的老铁.
前期主要是为插件开发做准备, 搜索了很多 Intellij 插件开发的博文, 如果搜到的不满意, 可以尝试以 “Android Stutio 插件开发” 关键字进行搜索, 毕竟Android Stutio 是根据 Intellij IDEA 进行二次开发的.
这里现将看到的有价值的博文地址分享一些, 谢谢他们的分享.
街头客 - 简书一共 9 篇插件开发的博文, 非常好.
使用 Gradle 开发 Intellij 插件官方使用 Intellij 的 Intellij Platform Plugin 来创建插件项目, 用惯了 Maven, 没用项目管理工具, 感觉一下子回到了解放前, 这里不用 Maven 而用Gradle, 是为了 ...
AI:人工智能
未读基于 Zookeeper 实现的一个配置中心
现在架构存在的问题
配置分散比如修改日志配置需要修改 xxx-api, xxx-webgis, …, xxx-server.
只有 dev, test, pro本地开发时需要修改 dubbo.server.version, 提交时忘记改回来造成服务调用出错.
配置类太多, 且有重复的配置类, 不好管理
非开发环境下应用配置在 war 包中,关键配置明文显示
修改配置后, 需要重新打包部署
关键配置随时可修改, 一不小心就会造成生产事故
**为了统一管理配置 **.现将配置从 pom 中迁入到 xxx-common-config, 使用 maven filter 实现根据不同环境从 ${env}.yyyyy.properties 获取配置替换 application.properties配置 (@占位符替换)使用 <context:property-placeholder/> 配合 @Value("${}") 实现自动注入配置到配置类.新增 local 环境用于本地开发
但是仍然解决不 ...
Redis 的几种集成方式
缓存服务组件
依赖于:
jedis
spring-data-redis
spring-session-data-redis
redis 集群使用的是 ShardedJedisPool, redis 3.x 后自带集群负载
jar 中重要的类
JedisConnectionFactory用于获取 jedis 实例, 从而操作 redis
ShardedJedisPool用于连接 redis 集群
cache 重要的类
RedisDataSource使用 JedisConnectionFactory 从 ShardedJedisPool 连接池中获取 jedis
RedisClientTemplate依赖 RedisDataSource 操作 redis 的具体模板方法
RedisCacheServiceImpl对 RedisClientTemplate 再次封装
JedisPool(非切片链接池) 和 ShardedJedisPool(切片链接池) 有什么区别JedisPool 连一台 Redis, ShardedJedisPool 连 Re ...
RESTEasy
RESTEasy 是 JBoss 的一个开源项目,提供各种框架帮助你构建 RESTful Web Services 和 RESTful Java 应用程序。它是 JAX-RS 规范的一个完整实现并通过 JCP 认证。作为一个 JBOSS 的项目,它当然能和 JBOSS 应用服务器很好地集成在一起。但是,它也能在任何运行 JDK5 或以上版本的 Servlet 容器中运行。RESTEasy 还提供一个 RESTEasy JAX-RS 客户端调用框架。能够很方便与 EJB、Seam、Guice、Spring 和 Spring MVC 集成使用。支持在客户端与服务器端自动实现 GZIP 解压缩。
RESTEasy 项目是 JAX-RS 的一个实现,集成的一些亮点:
不需要配置文件,只要把 JARs 文件放到类路径里面,添加 @Path 标注就可以了。
完全的把 RESTEeasy 配置作为 Seam 组件来看待。
HTTP 请求由 Seam 来提供,不需要一个额外的 Servlet。
Resources 和 providers 可以作为 Seam compone ...