java web
文章平均质量分 86
guduyishuai
这个作者很懒,什么都没留下…
展开
-
javaweb——spring cloud分布式系统(1)搭建配置管理中心
原创文章,转载请注明 spring cloud的一个子项目spring cloud config致力于为分布式系统提供一个配置中心,方便分布式系统进行配置文件的加载。实际上它满足了我们两个维度对配置文件的需求。第一个维度,不同系统集群间的统一和区别配置。第二个维度,开发,测试,生产环境的区别配置。借用网上一张图来表示:原创 2017-02-17 17:41:20 · 7776 阅读 · 0 评论 -
集群与负载均衡系列(3)——spring-session实现共享session
前面文章介绍了利用nginx的ip_hash和redis实现共享session,这里继续讨论session,其实spring全家桶里面已经用redis给你实现了一个共享session,其项目名为spring-session。它不单单解决了共享session,在其它场景也可以使用,比如webSocket等等,这里只是简单介绍其作为共享session的使用。 原理原创 2017-05-06 11:38:46 · 644 阅读 · 0 评论 -
集群与负载均衡系列——nginx实现tomcat集群与负载均衡(1)
开个新的系列,研究集群与负载均衡,预想该系列大致内容如下: nginx+tomcat,dubbo+zookeeper,spring-cloud+ducker,mysql主从,redis主从,分布式查询和分布式事务atomikos。并且包括集群中的session共享问题解决,ip hash法和缓存法。另外再加一个消息队列。在这里不准备研究除了http协议以外的其它服务分布式通信方式原创 2017-04-26 00:00:43 · 628 阅读 · 0 评论 -
spring-boot @ConfigurationProperties脑洞真大
搞了一阵子C++,以前感觉C++很牛,现在怎么觉得这东西这么落后了,很多理念完全跟不上时代,关键兼容性让人抓狂了。。。只能说一切为了效率。。。 来看看spring-boot,完全是魔术啊,觉得spring的脑洞真大啊,来说一下今天的主角@ConfigurationProperties。 概述 我们知道,从spring原创 2017-04-27 22:07:44 · 47450 阅读 · 2 评论 -
集群与负载均衡系列——nginx ip_hash或redis实现共享session(2)
上一篇文章介绍了利用nginx进行集群与负载均衡。今天来说说如何共享session。 ip_hash 顾名思义,根据客户端ip,计算hash值并映射到相应服务器。那么同一个用户就始终申请同一个服务器上的服务,这样的话就保证了用户信息始终一致。 当然了,既然是hash,自然免不了hash冲突,而且服务器少的时候hash冲突肯定非常严重原创 2017-04-27 23:35:06 · 3261 阅读 · 0 评论 -
集群与负载均衡系列(7)——消息队列之分布式事务
XA协议: 为了解决分布式事务,各大厂家数据库都提供了xa协议接口。什么是XA协议,就是通过多阶段提交,确保数据一致性。以两阶段提交为例 第一阶段为准备阶段,事务管理器会给每个资源管理器发送Prepare消息。每个资源管理器要么返回失败,要么写本地事务,redo和undo日志写好,但是不提交。原创 2017-05-31 20:21:04 · 2502 阅读 · 0 评论 -
集群与负载均衡系列(8)——redis主从复制+哨兵实现高可用性架构
主从复制 redis主从复制非常简单,只需要在从数据节点配置slaveof master-ip master-port即可。我就不多说了。 举个例子,分别创建3个配置文件,redis-6379.conf,redis-6380.conf,redis-6381.conf。在6380和6381中配置slaveof属性即可。 启动三个redis实例原创 2017-05-31 21:15:56 · 4112 阅读 · 0 评论 -
集群与负载均衡系列(6)——消息队列之rabbitMQ+spring-boot+spring amqp发送可靠的消息
在开始文章之前,可以看一下RabbitMq的总结《rabbitMq的总结》,用的wps的“写得”总结的。后续的很多内容都会涉及到这些基础概念。 上一篇文中很简单的介绍了rabbitMQ与spring的整合,实际上还存在许多问题,因为消息发送是不可靠的。这篇文章将实现可靠消息的发送。 以下是文章的大纲 spring amqp ap原创 2017-05-22 10:24:54 · 6028 阅读 · 4 评论 -
dubbo——广播方式和zoomkeeper方式
架构可以这样: parent:统一管理jar包版本号 common:常用工具类和base类 model:每个model为一个maven聚合工程 model-api:provider接口 model-core:provider实现 在该工程中集合mybatis原创 2017-08-24 21:09:53 · 5829 阅读 · 0 评论 -
引入swagger(1)——与传统spring整合
Swagger是一个rest api文档解决方案。对于有手机端app的企业来说,维护一套api文档是一件麻烦的事情,app端和后端人员的沟通将浪费过多时间。如果人数不够,单元测试也是麻烦的事情。Swagger是一个很好的解决方案。 Swagger的整合准备分两篇文章简绍 1、与传统spring整合 2、与spring-boot整合原创 2017-09-14 14:10:36 · 1695 阅读 · 1 评论 -
引入swagger(2)——与spring-boot整合
第一篇文章介绍了与传统的spring整合,这里介绍如何与spring-boot整合。我们可以发现spring-boot简化了相当多的配置 pom io.springfox springfox-swagger2 2.2.2 io.springfox springfox-swagger-ui 2.2.2原创 2017-09-16 11:41:25 · 1876 阅读 · 0 评论 -
spring-boot mariadb读写分离
在总结这篇文章之前,先把之前相关的文章列出来 《spring-boot系列——与mybaits整合》 《mariaDB在linux7中的安装》《linux7下mariadb主从搭建》 思路 思路其实很简单,一句话能说清楚:多数据源配置+aop自定义配置切换数据源。这样就可以实现主从读写分离了。 注意事项:线程安原创 2017-09-17 08:59:57 · 3574 阅读 · 0 评论 -
redis-lua脚本
redis支持lua脚本,lua脚本的详细语法和简绍不在这篇文章的总结范围。这里只说一下redis和lua的结合。 原子性redis执行lua脚本是原子性的,因此可以作为事务的解决方案。 脚本缓存 为了加快速度,redis在load脚本的时候会生成一个sha加密的token,使用evalsha命令可以传入token执行缓存中的脚本。原创 2017-09-27 09:55:36 · 746 阅读 · 0 评论 -
spring-boot添加到linux服务
在/usr/lib/systemd/system/下创建service文件[Unit]Description=myfee[Service]WorkingDirectory=/usr/share/web-appExecStart=/usr/share/jdk1.8.0_151/bin/java -jar /usr/share/web-app/myfee-api-1.0.0.jar --s...原创 2018-01-04 17:26:30 · 733 阅读 · 0 评论 -
springCloud微服务系列——OAuth2+JWT模式下的feign+hystrix处理
之前的文章说了一下JWT模式下feign调用其他服务的时候,怎么通过一个方法使得http请求头的信息传递到被掉服务中。当然也可以用@RequestHeader注解,但是这样并不是太好,因为我们希望有一个全局的处理。这些问题可以参看之前的文章。 《springCloud微服务系列——OAuth2+JWT模式下的swagger+feign处理》 这篇文章将总结的...原创 2018-06-30 13:54:29 · 4161 阅读 · 1 评论 -
springCloud微服务系列——OAuth2+JWT模式下的【资源服务器】获得【自定义信息】
回过头来说一下资源服务器的问题点吧,这里OAuth2+JWT用的是spring security,具体怎么用spring security搭建资源服务器我就不说了。这里要讨论的问题是这样的,我们希望在spring mvc中,直接通过如下的形式获得登录用户信息@GetMapping("/me")public Authentication me(OAuth2Authentication...原创 2018-06-30 17:01:16 · 8026 阅读 · 1 评论 -
集群与负载均衡系列(5)——消息队列之spring-boot整合Rabbitmq
上一篇文章介绍了如何搭建Rabbitmq,这篇文章说一下如何和spring-boot进行整合。这里主要用java config,当然你也可以用xml或者声明式注释配置 依赖 org.springframework.boot spring-boot-starter-amqp yml原创 2017-05-10 16:56:17 · 3646 阅读 · 1 评论 -
spring-boot整合redis作为缓存(4)——spring-boot引入Redis
分几篇文章总结spring-boot与Redis的整合 1、redis的安装 2、redis的设置 3、spring-boot的缓存 4、自定义key 5、spring-boot引入Redis 依赖 需要添加的依赖如下 org.springf原创 2017-04-14 22:32:13 · 3266 阅读 · 0 评论 -
spring-boot整合redis作为缓存(3)——自定义key
分几篇文章总结spring-boot与Redis的整合 1、redis的安装 2、redis的设置 3、spring-boot的缓存 4、自定义key 5、spring-boot引入Redis 在上一篇文章中说道key是用来分辨同一个缓存中的缓存数据的。key是可以自己制定的原创 2017-04-14 17:28:28 · 10125 阅读 · 0 评论 -
spring-boot系列——与mybaits整合
原创文章,转载请注明 与mybatis的整合有两种方式,一种只依赖于spring,一种需要依赖于spring-mybatis。我们知道,spring-mybatis是由mybatis团队开发的,有一定的历史原因。我们这里用spring的方式。 首先,我们需要依赖原创 2017-02-27 19:44:33 · 895 阅读 · 0 评论 -
spring-boot系列——整合jersey
原创文章,转载请注明 jersey作为一个实现了标准rest风格的接口,还是比较好用的。当然使用spring-boot的话,还是spring-mvc更好吧,这里说一下如何spring-boot整合jersey、 一、依赖 依赖如下: org.springframework.boot spring-boot-starte原创 2017-02-27 19:57:34 · 1010 阅读 · 0 评论 -
跨域问题总结
原创文章,转载请注明 之前调整架构,一直忘了解决跨域问题。趁此机会,总结一下跨域的解决方案。 跨域的解决方案可大致分为客户端,服务端。客户端之间的跨域可以通过写脚本,客户端与服务端的跨域,比如ajax请求的跨域,最好是通过服务端的解决方案。这样对客户端透明。不需要额外的编码,而且这种方式是合理的,因为客户端的解决方案说的不好听一点都是原创 2017-02-27 20:37:26 · 420 阅读 · 0 评论 -
spring-boot系列——使用log4j2
原创文章,转载请注明 spring-boot中使用log4j2其实非常简单,因为spring-boot本身也使用了,而且还不止log4j2。我们如果要用的话必须把spring-boot-starter-logging的依赖去掉,不然会是spring-boot默认的日志,该starter在spring-boot-starter中。既然去除了官方的日志依赖,同时也去除了log4j2的原创 2017-02-27 20:48:12 · 2351 阅读 · 0 评论 -
javaweb——java8和tomcat7的环境问题
最近升级了开发工具,终于也用上了jdk8,但是启动发现tomcat7报错org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15 后来发现需要使用Tomcat 7.0.65或以后版本,经测试确实没问题了,原文地址:http://www.m原创 2017-02-20 16:38:01 · 8553 阅读 · 2 评论 -
javaweb——嵌入tomcat
原创文章,转载请注明出处 该嵌入tomcat的实现可以直接运行类来启动tomcat,也可以在任意路径下运行bat文件启动tomcat,先看一下效果 开发过程,只需要运行类即可 发布过程,只需把war放在bin文件加下,配置的mode项改为release,运行bat文件即可原创 2017-02-14 10:50:31 · 3977 阅读 · 0 评论 -
javaweb——嵌入tomcat(spring-boot)
原创文章,转载请注明出处 关于嵌入tomcat的文章,还可以参考之前写的《javaweb——嵌入tomcat 》 这里使用spring-boot,实际上spring-boot已经嵌入了常用的servlet容器,tomcat和jetty。默认是tomcat。 看下效果吧 我们看一下怎么搭建吧原创 2017-02-14 16:52:57 · 572 阅读 · 0 评论 -
post方式中multipart/form-data类型转json
原创文章,转载请注明 在表单以post方式提交的时候,其post和普通的post是存在差异的。具体表现在请求头和请求体中 当然,在成熟的框架中,这个问题是已经解决的,比如jersey,方法是设置@Consume为multipart/form-data类型。 我这里是介绍如何自己来实现该功能,因为目前项目中jersey的post为公共方法,所有的p原创 2017-03-03 15:08:37 · 13694 阅读 · 4 评论 -
通过GZIP优化性能
原创文章,转载请注明 gzip为一种压缩技术,在网络http传输中得到应用。gzip需要web容器,浏览器的支持。 看一下效果 压缩前: 压缩后: 这里的时间不需要纠结,开发环境在本机,这里的性能损耗主要在cpu原创 2017-03-03 15:41:39 · 5048 阅读 · 0 评论 -
聚合maven+spring-boot打包可执行jar
原创文章,转载请注明 整整搞了一天,终于解决这个问题了。这里是四个module,module之间存在依赖,打包两个可执行jar,看下最终效果吧 聚合maven+spring-boot的搭建很简单,和普通的聚合maven没有什么区别。聚合maven+spring-boot打包成可执行jar就不是那么容易了,主要是因为spring-b原创 2017-03-09 22:12:51 · 42567 阅读 · 15 评论 -
struts2源码分析——配置
之前为了解一个问题,把struts2的源码又大致过了一下。上次看源码还是几年签了,这次把它记录下来。 这篇文章先说一下struts2是怎么进行配置的。分两部分,一部分是日志,第二部分是其余配置。一、日志配置 日志的配置主要流程如下图 filterHostConfig通过filterCon原创 2017-03-22 23:42:15 · 414 阅读 · 0 评论 -
获得方法参数名的多种方法以及javassit的bug
今天碰到一个奇怪的现象,自己机子上单元测试没问题的一个接口,一放到服务器上参数就传不上去。经过排查,问题定位到获取方法参数名上。逻辑是这样的,通过方法中的参数名去解析json中相应的值,然后通过反射调用业务逻辑层。然而通过javassit获取方法的参数名非常不稳定,字节码解析经常解析出错。接下来详细谈谈如何获得方法参数名以及javassit的这个bug的具体表现。 字节码与编译器原创 2017-03-30 00:15:06 · 1860 阅读 · 0 评论 -
事务的那些坑
总结一下事务在使用过程中的一些坑。 在介绍之前,先普及一些基础知识 一、基础知识 事务隔离等级 一般事务的隔离等级有Read uncommitted,Read committed,Repeatable read,Serializable。其中隔离程度越来越严格,到了Serializab原创 2017-03-30 16:14:15 · 3460 阅读 · 1 评论 -
fastjson扩展——多态支持
fastjson在从json字符串解析成对象的时候是不支持多态的。 什么意思呢?就是说我调用JSON.parseObject(jsonstr, XXX.class)方法的时候,如果XXX是一个抽象类,或者接口,我是没有办法根据json字符串中提供的实现类信息解析成相应的实现类的。这样调用后的结果是null。 如何做到对多态的支持呢?我原创 2017-04-01 22:13:43 · 10734 阅读 · 4 评论 -
spring-boot整合redis作为缓存(2)——spring-boot的缓存
分几篇文章总结spring-boot与Redis的整合 1、redis的安装 2、redis的设置 3、spring-boot的缓存 4、自定义key 5、spring-boot引入redis spring-boot对缓存的支持非常不错,少量的配置即可完成。原创 2017-04-14 17:10:13 · 2115 阅读 · 0 评论 -
springCloud微服务系列——不可避免的【分布式事务】之【可靠消息最终一致性】
其实这篇文章和springCloud无关,但是属于微服务不可避免的一个问题,所以拿在这里说一说。这里只可能讨论理论,因为具体实现是有一定复杂度的,不可能放代码。 分布式事务是面向服务,微服务架构不可避免的问题,而且为了性能考虑,一般不使用刚性事务,而使用柔性事务。柔性事务中又有可靠消息最终一致性,TCC,最大努力通知三种解决方案。这里来说一说可靠消息最终一致性。 ...原创 2018-06-30 17:26:41 · 10909 阅读 · 0 评论