202011-29 Spring Cloud 优雅下线以及灰度发布实现 前言在生产环境中,如何保证在服务升级的时候,不影响用户的体验,这个是一个非常重要的问题。如果在我们升级服务的时候,会造成一段时间内的服务不可用,这就是不够优雅的。那什么是优雅的呢?主要就是指在服务升级的时候,不中断整个服务,让用户无感知,进而不会影响用户的体验,这就是优雅的。实际上,优雅下线是目标,而不是手段,它是一个相对的概念,例如killPID和kill-9PID都是暴力杀死服务,相对于kill-9PID来说,ki... 继续阅读 >
202011-29 解决spring结合mybatis时一级缓存失效的问题 之前了解到mybatis的一级缓存是默认开启的,作用域是sqlSession,是基HashMap的本地缓存。不同的SqlSession之间的缓存数据区域互不影响。当进行select、update、delete操作后并且commit事物到数据库之后,sqlSession中的Cache自动被清空<settingname="localCacheScope"value="SESSION"/>结论spring结合mybatis后,一级缓存作用:在未开启事物的情况之下,每次查询,spring都会关闭旧的sqlSession而创建新的sqlSession,因此此时的... 继续阅读 >
202011-29 spring boot加载freemarker模板路径的方法 1,之前用的eclipse开发工具来加载springboot加载freemarker模板路径,现在换用idea却不能使用了,所以来记录一下加载freemarker模板三种方式,如下publicvoidsetClassForTemplateLoading(Classclazz,StringpathPrefix);publicvoidsetDirectoryForTemplateLoading(Filedir)throwsIOException;publicvoidsetServletContextForTemplateLoading(ObjectservletContext,Stringpath);看名字也就知道了,分别基于类路径、... 继续阅读 >
202011-29 Spring MVC创建项目踩过的bug 前言最近在学springMVC,做为一个初学者,踩了不少坑,导致项目各种出错在这里向大家分享一下我的项目开发操作,开发springMVC项目步骤:打开idea我的项目运行环境在idea2020版+jdk8+maven选择createnewproject创建一个新的项目idea2020版,第二步选择Maven工程,勾选createfromarchetype选择Maven骨架,选择webapp,注意是第二个webapp不要选错了之后就是选择项目名字,个人随意最后选择自己的Maven,点击finish,Maven工程创... 继续阅读 >
202011-29 Spring MVC项目开发踩过的一些bug SpringMVC项目创建,我踩过的bug前言最近在学springMVC,做为一个初学者,踩了不少坑,导致项目各种出错在这里向大家分享一下我的项目开发操作,开发springMVC项目步骤:打开idea我的项目运行环境在idea2020版+jdk8+maven选择createnewproject创建一个新的项目idea2020版,第二步选择Maven工程,勾选createfromarchetype选择Maven骨架,选择webapp,注意是第二个webapp不要选错了之后就是选择项目名字,个人随意最后选择自己的... 继续阅读 >
202011-25 模仿Spring手写一个简易的IOC 这个小项目是我读过一点Spring的源码后,模仿Spring的IOC写的一个简易的IOC,当然Spring的在天上,我写的在马里亚纳海沟,哈哈感兴趣的小伙伴可以去我的github拉取代码看着玩地址:https://github.com/zhuchangwu/CIOC项目中有两种方式实现IOC:第一种是基于dom4j实现的解析XML配置文件版第二种是基于自定义注解实现全配置版全注解版模仿Spring原生的IOC机制如下:Interface类型的beanDefinition不会被实例化**String类型的beanD... 继续阅读 >
202011-25 详解Spring Boot 打包分离依赖JAR 和配置文件 1:自定义路径<properties><!--自定义路径--><directory>d:/im/</directory></properties>2:把配置文件打包出来<build><plugins><!--上线部署JAR启动分离依赖lib和配置--><!--打包jar--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><!--不打包资源文件--><excludes>... 继续阅读 >
202011-25 解决spring中redistemplate不能用通配符keys查出相应Key的问题 有个业务中需要删除某个前缀的所有Redis缓存,于是用RedisTemplate的keys方法先查出所有合适的key,再遍历删除。但是在keys(patten+"*")时每次取出的都为空。解决问题:spring中redis配置中,引入StringRedisTemplate而不是RedisTemplate,StringRedisTemplate本身继承自RedisTemplate,即<beanid="redisTemplate"class="org.springframework.data.redis.core.RedisTemplate"><propertyname="connectionFactory"ref="connectio... 继续阅读 >
202011-25 spring boot拦截器注入不了java bean的原因 一、如何实现拦截器在SpringBoot项目中,拦截器经常被用来做登陆验证,日志记录等操作。拦截器是Spring提供的,所以可以将拦截器注成bean,由IOC容器来管理。实现拦截器的方式很简单,主要由以下两个步骤:自定义拦截器类实现HandlerInterceptor接口自定义WebMvc配置类实现WebMvcConfigurer接口,添加自定义拦截器类简要实现代码如下:自定义拦截器LoginInterceptor:publicclassLoginInterceptorimplementsHandlerInter... 继续阅读 >
202011-25 Spring Aop如何给Advice传递参数 给Advice传递参数Advice除了可以接收JoinPoint(非AroundAdvice)或ProceedingJoinPoint(AroundAdvice)参数外,还可以直接接收与切入点方法执行有关的对象,比如切入点方法参数、切入点目标对象(target)、切入点代理对象(this)等。1获取切入点方法参数假设我们现在有一个id为userService的bean中定义了一个findById(intid)方法,我们希望定义一个Advice来拦截这个方法,并且把findById()的参数作为Advice处理方法的参数,... 继续阅读 >
202011-25 Spring Boot Maven Plugin打包异常解决方案 【背景】spring-boot项目,打包成可执行jar,项目内有两个带有main方法的类并且都使用了@SpringBootApplication注解(或者另一种情形:你有两个main方法并且所在类都没有使用@SpringBootApplication注解),pom.xml如下<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.5.3.RELEASE</version><executions><execution><goals><goal>rep... 继续阅读 >
202011-25 通过实例解析Spring argNames属性 最近学习Spring,一直不太明白Srping的切面编程中的的argNames的含义,经过学习研究后,终于明白,分享一下需要监控的类:packagebean;publicclassHelloApi{publicvoidaspectTest(Stringa,Stringb){System.out.println("inaspectTest:"+"a:"+a+",b:"+b);}}类HelloApi的aspectTest方法是需监控的方法,目标是调用前获取获得入参a和b的值,并打印出来。切面类:packageaspect;importorg.aspectj.lang.ann... 继续阅读 >
202011-22 Spring定时服务QuartZ原理及代码案例 在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等。我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但时调度控制非常不方便,并且我们需要大量的代码。使用Quartz框架无疑是非常好的选择,并且与Spring可以非常方便的集成。Spring提供了支持时序调度的整合类。整个构建任务调度服务需要三步:1)向项目中添加jar包:添加quartz.jar包,将他... 继续阅读 >
202011-22 Spring Boot + Mybatis-Plus实现多数据源的方法 前段时间写了一篇基于mybatis实现的多数据源博客。感觉不是很好,这次打算加入git,来搭建一个基于Mybatis-Plus的多数据源项目Mybatis-Plus就是香前言:该项目分为master数据源与local数据源。假定master数据源为线上数据库,local为本地数据库。后续我们将通过xxl-job的方式,将线上(master)中的数据同步到本地(local)中项目git地址抽时间把项目提交到git仓库,方便大家直接克隆sql文件已置于项目中,数据库使用的mysql创建项目... 继续阅读 >
202011-22 Spring Boot优雅地处理404异常问题 背景在使用SpringBoot的过程中,你肯定遇到过404错误。比如下面的代码:@RestController@RequestMapping(value="/hello")publicclassHelloWorldController{@RequestMapping("/test")publicObjectgetObject1(HttpServletRequestrequest){Responseresponse=newResponse();response.success("请求成功...");response.setResponseTime();returnresponse;}}当我们使用错误的请求地址(POSThttp://1... 继续阅读 >
202011-22 基于Spring Cloud Zookeeper实现服务注册与发现 服务注册1.添加SpringCloudZookeeper依赖:<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zookeeper-discovery</artifactId><exclusions><exclusion><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactI... 继续阅读 >