摘要:
线上运行的Java应用突然没有响应、响应缓慢,进程突然消失,遇到这些情况应该如何应对呢?http://www.rowkey.me/blog/2018/11/22/online-debug/ 本文主要讲解了Linux下故障排查方法, 包括一些工具的使用. 另外就是java的工具包使用, 还有java程
阅读全文
posted @ 2019-01-09 14:18
harrychinese
阅读(173)
推荐(0)
摘要:
RabbitMQ 术语 RabbitMQ 有很多术语和Kafka不一样, 理解这些术语十分重要. 1. Broker: 一个RabbitMQ实例就是一个 Broker. 2. VHost(Virtual Host): 一个RabbitMQ实例可包含多个VHost, 每个VHost都有自己的身份验证机
阅读全文
posted @ 2019-01-08 14:32
harrychinese
阅读(889)
推荐(0)
摘要:
市场上有不少项目计划类系统, 很多都是收费的, 还有很多都是web版, 这些都自然被排除了. 免费好用的还真不多, 今天简单介绍一下 gantt project 这个软件, 开源并且免费, 基于 java se 实现的, 跨平台. 网站是 http://ganttproject.biz 功能点: 1
阅读全文
posted @ 2019-01-07 17:10
harrychinese
阅读(8606)
推荐(0)
摘要:
C/S / Tuxedo 架构/ B/S 架构演进 Tuxedo 推广使用之前, 典型的程序是C/S两层架构, 两层架构的缺点有:1. client端直连数据库, 因为数据库会为每个连接分配一定的内存, 所以C/S架构中的client数量不能太多, 所以只适合中小型系统. 2. client端不仅仅
阅读全文
posted @ 2019-01-04 16:42
harrychinese
阅读(832)
推荐(0)
摘要:
Shiro 的加深理解: 1. Shiro 和 Spring 系组件的对标, Shiro = Spring Security + Spring Session. 就是说 Shiro 不仅仅是一个安全框架, 同时也是一个 Session 管理框架. 其实这也是很自然的事情, Shiro 会拦截所有的
阅读全文
posted @ 2018-12-29 14:59
harrychinese
阅读(941)
推荐(0)
摘要:
Session 工作原理是什么? 因为 http 协议是无状态的, 对于服务器端来讲, 如何为不同的访问用户提供不一样的体验呢? 比如邮箱系统, 只有登录用户才能收发邮件. 这就需要服务器能识别每一个客户端访问, 知道哪些访问是来自一个同一个客户端, 显然这个事情光靠服务器端是做不到的, 需要浏览器
阅读全文
posted @ 2018-12-29 12:42
harrychinese
阅读(2411)
推荐(0)
摘要:
背景 在系统生命周期中, 免不了要做升级部署, 对于关键服务, 我们应该能做到不停服务完成升级 (perform a zero downtime upgrade), 对于一般系统, 应该做到优雅地停服务. 如何做到不停服务的升级? 需要做到下面两点:1. 服务本身应该部署多份, 前面应该有 LVS/
阅读全文
posted @ 2018-12-26 14:30
harrychinese
阅读(24291)
推荐(4)
摘要:
原始代码 RoleService 类有删除角色和锁定角色两个函数. 问题分析:可以看到上面这两个函数逻辑完全一致, 仅仅是最终调用的函数不同, 应该能优化, 一个思路是: 将框架部分封装为一个公用函数, deleteRole() 和 lockRole() 函数调用该公共函数, 并将最终的 actio
阅读全文
posted @ 2018-12-19 21:42
harrychinese
阅读(641)
推荐(0)
摘要:
对于项目而言, 我们一般会有DAO->Service->Controller分层设计, 这些层次体现了每层的作用, 而层次之间的数据传递对象设计很少被提及, 下面是一个相对完整的数据转换过程:Table层--(DO对象)-->DAO层--(DO对象)-->Service层--(DTO对象)-->Co
阅读全文
posted @ 2018-12-18 12:29
harrychinese
阅读(2876)
推荐(1)
摘要:
注意点有:1. 不要启用 spring-boot-devtools, 如果启用 devtools 后, 不管是热启动还是手工重启, devtools总是试图重新恢复之前的session数据, 很有可能会导致session混乱.2. 在配置 Shiro 的filterChainDefinitionMa
阅读全文
posted @ 2018-12-12 17:08
harrychinese
阅读(1487)
推荐(0)
摘要:
之前发了SpringBoot 单元测试的博客, https://www.cnblogs.com/harrychinese/p/springboot_unittesting.html , 内容较少, 现在补齐SpringBoot单元测试的主要知识点. 测试有很多种, 有单元测试 、集成测试 、冒烟测试
阅读全文
posted @ 2018-12-11 17:32
harrychinese
阅读(1923)
推荐(0)
摘要:
消息的基本属性 消息的几个属性:type: 定义消息的 category, 比如 SQL 或 RPC 或 HTTPname: 代表一个动作 action, 详细的内容应该记录到 data 属性中, 而不是 name 属性, 比如: 对于 SQL type 来讲, name 应该是一个 SQL 模板,
阅读全文
posted @ 2018-12-11 09:22
harrychinese
阅读(2348)
推荐(1)
摘要:
我们有三种部署方式:1. docker 部署2. 采用官方的 war 包部署. 3. 源码部署 很显然 docker 部署是最简单的, 我尝试了多次, 都在 cat docker 容器镜像的编译过程失败了. 原因是: 镜像编译需要先编译 java 源码为 war 包, 这中间要从 maven 官网库
阅读全文
posted @ 2018-12-10 10:36
harrychinese
阅读(3761)
推荐(0)
摘要:
面上有很多优秀的 OS 级监控系统 (比如 falcon), 这些监控系统主要聚焦在 CPU/IO/Mem/Disk 和应用端口, falcon 甚至可以监控到 JVM. 但对于应用系统内部的一些监控, 比如程序的 exception/接口性能/调用链, 这些系统级的监控系统就不太好用了. 大众点评
阅读全文
posted @ 2018-12-10 10:03
harrychinese
阅读(1996)
推荐(0)
摘要:
本文讲解如何在 Java 程序中集成 Apollo 配置, 主要涉及到一些基础用法. 对于一些高级用法, 比如如何加密/解密配置项 (可用于数据库密码配置), 如何动态切换数据源地址,如何动态切换日志级别, 可以参考官方的 user cases git 库, 官方代码库 https://github
阅读全文
posted @ 2018-12-05 15:42
harrychinese
阅读(3771)
推荐(0)
摘要:
本博客讲详细讲解如何在 Windows 搭建携程 Apollo 服务器 (用户个人开发). 开发服务器有多种搭建方式:(1) docker, 搭建过程非常简单, 推荐有 docker 环境(2) 部署 Quick start 发行版, 本文采用 Quick start 版部署. Windows 服务
阅读全文
posted @ 2018-12-03 16:40
harrychinese
阅读(3859)
推荐(0)
摘要:
这篇是 maven 项目管理的第二篇, 讲解使用 maven 进行多个项目管理, 之前有一篇是 maven 的基础知识. SpringBoot系列: Eclipse+Maven环境准备 一个完整的解决方案通常都会包含多个项目, 这些项目往往会有一些公用的依赖, 比如都依赖 SpringBoot, 各
阅读全文
posted @ 2018-12-01 16:50
harrychinese
阅读(1811)
推荐(0)
摘要:
本文主要参考了 https://segmentfault.com/a/1190000016449865 , 感谢作者的付出. 另外, 在本文中, 演示了Windows+Maven+Docker Toolbox环境下的制作全过程. 和 CI 工具的集成, 可以参考下面文章: https://sprin
阅读全文
posted @ 2018-11-30 15:09
harrychinese
阅读(7243)
推荐(0)
摘要:
很多 Java 基础的东西都忘记了, 有必要再复习一些基本的知识点. 本文主要参考 https://github.com/Snailclimb/JavaGuide Java 访问限定符的可见性 参考: https://o7planning.org/en/10319/access-modifiers-
阅读全文
posted @ 2018-11-27 16:39
harrychinese
阅读(303)
推荐(0)
摘要:
自定义异常类 稍具规模的项目, 一般都要自定义一组异常类, 这样做的好处是:1. 可以充分利用异常的中断特性, 简化代码的逻辑控制. 2. 在自定义的异常类, 可以设置 BusinessErrorCode 和 error message, 有了统一的 BusinessErrorCode, 排查和联调
阅读全文
posted @ 2018-11-24 21:02
harrychinese
阅读(2681)
推荐(0)
摘要:
视图函数返回 status code 的方式 Spring 有一个专门的枚举类型 HttpStatus, 比如 HttpStatus.NOT_FOUND1. 视图函数返回 ResponseEntity 类型的对象. 2. 在 exception 类加注解 @ResponseStatus, 一旦视图函
阅读全文
posted @ 2018-11-22 13:17
harrychinese
阅读(2353)
推荐(1)
摘要:
JSR 303 规范了bean validation, Hibernate validator实现了JSR 303所有的规范, 同时也是最常用的validator 工具包. 使用 Hibernate validator 可以大大简化数据验证工作. 对于 Web 项目, 通常前端需要做一些输入验证,
阅读全文
posted @ 2018-11-20 17:51
harrychinese
阅读(1955)
推荐(0)
摘要:
Web UI项目中, 很多 Spring controller 视图函数直接返回 html 页面, 还有一些视图函数是要重定向或转发到其他的 url 上. redirect 和 forward的区别: 重定向 redirect: 完整的重定向包含两次request-response过程, 第一次是访
阅读全文
posted @ 2018-11-19 18:19
harrychinese
阅读(110715)
推荐(2)
摘要:
在本示例中, 使用 INI 文件来定义用户和角色. 首先学习一下 INI 文件的规范. Shiro INI 的基本规范 [main]# 在这里定义 SecurityManager 和 Realms 等 [users]# 每一行定义一个用户, 格式是 username = password, role
阅读全文
posted @ 2018-11-18 16:48
harrychinese
阅读(758)
推荐(0)
摘要:
和 Spring Security 项目一样, Apache Shiro 也是一个被广泛使用安全框架, 它们都能完成认证、授权、会话管理等. 简单对比一下 Apache Shiro 和 Spring Security: 1. 适用范围: Spring Security 必须和 Spring MVC
阅读全文
posted @ 2018-11-18 11:21
harrychinese
阅读(1140)
推荐(0)
摘要:
Spring Security 是一个安全框架, 可以简单地认为 Spring Security 是放在用户和 Spring 应用之间的一个安全屏障, 每一个 web 请求都先要经过 Spring Security 进行 Authenticate 和 Authoration 验证. 不得不说, Sp
阅读全文
posted @ 2018-11-13 14:23
harrychinese
阅读(8855)
推荐(2)
摘要:
本文转载自 https://blog.fundebug.com/2018/01/10/how-to-clean-docker-disk/ , 感谢原作者. 摘要:用了Docker,好处挺多的,但是有一个不大不小的问题,它会一不小心占用太多磁盘,这就意味着我们必须及时清理。 作为一个有信仰的技术公司,
阅读全文
posted @ 2018-11-11 22:14
harrychinese
阅读(515)
推荐(0)
摘要:
本文基于Pebble官方文档, 对pebble的语法做一些介绍. Pebble 官方资料 主页: https://pebbletemplates.io/github wiki: https://github.com/PebbleTemplates/pebble/wiki Pebble 基本语法 表达
阅读全文
posted @ 2018-11-11 22:09
harrychinese
阅读(2001)
推荐(0)
摘要:
Java 模板引擎选择 SpringBoot Starter项目向导中可选的Java模版引擎有:1. Thymeleaf (百里香草叶子)2. Freemarker3. Mustache4. Groovy Templates 简单评价这些模版引擎吧, 1. Thymeleaf: SpringBoot
阅读全文
posted @ 2018-11-11 19:39
harrychinese
阅读(4953)
推荐(0)
摘要:
使用 CommandLineRunner 对Spring Bean进行额外初始化 如果想要在Spring 容器初始化做一些额外的工作, 比如要对Spring Bean 对象做一些额外的工作, 首先想到的方式是, 直接将代码写在 main() 函数的 SpringApplication.run()后,
阅读全文
posted @ 2018-11-09 18:18
harrychinese
阅读(3326)
推荐(1)
摘要:
RESTful 架构REST 并非一种技术或规范, 而是一种架构风格, 如果一个架构符合Rest的约束条件和原则, 就可以称作是 RESTful 架构. REST全称是Representational State Transfer, 省略了定语 Resource, 完整的讲法是"资源表现性状态转移"
阅读全文
posted @ 2018-11-08 13:06
harrychinese
阅读(750)
推荐(0)
摘要:
Spring Boot 通用配置参数https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html Spring 下所有项目的文档, Spring boot 只是其中一
阅读全文
posted @ 2018-11-07 12:16
harrychinese
阅读(5596)
推荐(3)
摘要:
Basic Authorization 规范 Request 头部:Authorization: Basic QWxpY2U6MTIzNDU2其中 QWxpY2U6MTIzNDU2 是user:pwd做 base64 编码, 格式是 user:pwd response 头部: WWW-Authent
阅读全文
posted @ 2018-11-06 21:43
harrychinese
阅读(4952)
推荐(0)
摘要:
默认情况下, Spring Security 并不启用方法级的安全管控. 启用方法级的管控后, 可以针对不同的方法通过注解设置不同的访问条件. Spring Security 支持三种方法级注解, 分别是 JSR-205 注解/@Secured 注解/prePostEnabled注解. 这些注解不仅
阅读全文
posted @ 2018-11-05 15:00
harrychinese
阅读(5628)
推荐(1)
摘要:
SpringBoot非常适合开发 Restful API程序, 我们都知道为API文档非常重要, 但要维护好难度也很大, 原因有: 1. API文档如何能被方便地找到? 以文件的形式编写API文档都有这个问题, 使用在线 Wiki 等知识平台部分地能解决这个问题. 2. API文档经常过期. API
阅读全文
posted @ 2018-11-02 15:33
harrychinese
阅读(1752)
推荐(0)
摘要:
web 项目鉴权 主要的鉴权方式有:1. 用户名/密码鉴权, 然后通过 Session/Cookie 保存鉴权结果. 2. 用户名/密码鉴权, 通过 Basic authentication 方式, 每次请求都要将 appId/appSecret 加到 HTTP [Authorization] he
阅读全文
posted @ 2018-10-31 17:01
harrychinese
阅读(2378)
推荐(0)
摘要:
相关的文章 SpringBoot系列: 与Spring Rest服务交互数据https://www.cnblogs.com/harrychinese/p/Springboot_SpringRest.html SpringBoot系列: Spring MVC视图方法的补充https://www.cnb
阅读全文
posted @ 2018-10-30 17:34
harrychinese
阅读(13267)
推荐(1)
摘要:
本文基本上摘自纯洁的微笑的博客 http://www.ityouknow.com/springcloud/2018/07/20/spring-cloud-consul.html . 感谢作者的付出. 服务注册基础组件选择 在服务注册这个环节, 业界有很多组件可供选择, 主要有:1. Spring C
阅读全文
posted @ 2018-10-29 15:38
harrychinese
阅读(12533)
推荐(2)
摘要:
Spring JdbcTemplate 事务控制 之前使用 JDBC API 操作, 经常用到的对象有: connection 和 preparedStatement. dbConnection.setAutoCommit(false); //transaction block start //so
阅读全文
posted @ 2018-10-26 17:42
harrychinese
阅读(21225)
推荐(1)
摘要:
对于一些小的项目, 我们没有必要使用MyBatis/JPA/Hibernate等重量级技术, 直接使用Spring JDBC 即可, Spring JDBC 是对 jdbc的简单封装, 很容易掌握. Spring JdbcTemplate 和 JDBC API 对比 JDBC API的缺点:1. 我
阅读全文
posted @ 2018-10-26 15:52
harrychinese
阅读(1363)
推荐(0)