首页 文章 精选 留言 我的

精选列表

搜索[修改],共10005篇文章
优秀的个人博客,低调大师

Docker修改默认的网段

第一步 删除原有配置 sudoservicedockerstop sudoiplinksetdevdocker0down sudobrctldelbrdocker0 sudoiptables-tnat-FPOSTROUTING 第二步 创建新的网桥 sudobrctladdbrdocker0 sudoipaddradd172.17.10.1/24devdocker0 sudoiplinksetdevdocker0up 第三步 配置Docker的文件 注意: 这里是 增加下面的配置 vi/etc/docker/daemon.json [root@bogon~]#cat/etc/docker/daemon.json##追加的即可 {"registry-mirrors":["http://224ac393.m.daocloud.io"], "bip":"172.17.10.1/24" } [root@bogon~]#systemctlrestartdocker 本文转自 小小三郎1 51CTO博客,原文链接:http://blog.51cto.com/wsxxsl/2060761,如需转载请自行联系原作者

优秀的个人博客,低调大师

华为云如何修改安全组

1.何为安全组呢? 简单来说,安全组创建后,用户可以在安全组中定义各种访问规则,当云服务器加入该安全组后,即受到这些访问规则保护。安全组默认出方向放行,并且安全组内的云服务器可以相互访问。 2.为何要配置安全组? 如果你要使用服务器提供的相应服务,你就的打开相应端口,就像厂库门锁上了要怎么进厂库拿东西呢,肯定是要把厂库的门打开对吧。 (1)远程连接云服务器 一般都是打开22端口即可,云服务器很少有Windows系统的,其中的奥秘自己体会 (2)弹性云服务器作Web服务器 (3)使用FTP上传或下载文件 3.配置方法 通常买了服务器后,它都是默认设置开启22端口和3389端口,方便远程连接 操作步骤如下: 进入控制台,选择购买的云服务器,点击更多,选择更改安全组 新建安全组 一般这里有3个组,选择默认的那个即可 添加规则 开启相应的端口,确认即可 然后就可以使用该端口做点其他事情了! 以上仅为手写,写的不对的地方,请大家多多指出,然后我坚决不改(开玩笑的)。图片来自于华为云参考文档。

优秀的个人博客,低调大师

使用Mockito修改Bean的依赖

概述 在使用单元测试时经常会遇到某些dependency依赖了外部资源,或者想主动绕过真正的方法执行mock返回结果而快速得到单元测试最终的期望结果,可能有以下两种场景, 对于TestCase A,设单元测试的方法是Service A的execute1方法和execute2方法,在执行execute1和execute2方法时都会调用ServiceB的不同方法,即ServiceA依赖了ServiceB;一个场景是完全对ServiceB进行Mock,如单元测试ServiceA#execute1方法时都通过Mock返回结果;一个场景是部分ServiceB的方法执行真实的业务逻辑(如查询数据库),一部分方法执行Mock返回结果,或Spy,如如单元测试ServiceA#execute2方法时,只mock ServiceB#b2结果,真正执行ServiceB#b1方法。 对TestCase的Service的依赖Bean的完全Mock 当对ServiceA的方法执行单元测试时,如ServiceA -> ServiceB,此时对ServiceB进行Mock,然后将其设置到ServiceA的属性中;后续ServiceA调用ServiceB的方法都降得到Mock后的结果;而对于ServiceB对象的本来的依赖本案暂且将其忽略,后续改进; 思路是在TestCase中依赖ServiceA的同时标示Mock ServiceB,待TestCase依赖注入完成后,新建ServiceB的Mock对象替换ServiceA中的ServiceB依赖; @TestExecutionListeners({MockitoDependencyInjectionTestExecutionListener.class}) publicclassAServiceMockTestextendsBaseTest{ @Mock privateBServicebservice; @Autowired privateAServiceaservice; @Before publicvoidsetup(){ doReturn("mock").when(bservice).b1(); } @Test publicvoidtest(){ a.execute1(); } } @Service publicclassAServiceImplimplementsAService{ @Autowired privateBServicebservice; @Override publicStringexecute1(){ returnbservice.b1();//willreturnmockafterMock } } 当a.execute()执行时将调用aservice的属性bservice的b1方法,返回结果就是在setup方法中指定的结果; 监听TestCase的Service的依赖Bean 当对ServiceA进行单元测试时,依赖了ServiceB,需要获取ServiceB的b1方法的真正执行结果,Mock b2方法的结果,此时可以采用Spy方式;由于ServiceA依赖了ServiceB,而这个属性可能是个AopProxy对象,并不能直接使用Mockito.mock(bservice)或者Mockito.spy(bservice),所以这里@Spy注解指定的是实现类,通过MockitoDependencyInjectionTestExecutionListener处理后,获得一个Spy对象,同时这个Spy对象设置到bservice(AopProxy对象)中去; @TestExecutionListeners({MockitoDependencyInjectionTestExecutionListener.class}) publicclassAServiceMockTestextendsBaseTest{ @Spy privateBServiceImplbserviceImpl; @Autowired privateAServiceaservice; @Before publicvoidsetup(){ doReturn(true).when(bserviceImpl).b2(any(String.class)); } @Test publicvoidtest(){ a.execute(); } } @Service publicclassAServiceImplimplementsAService{ @Autowired privateBServicebservice; @Override publicbooleanexecute2(){ Stringstr=bservice.b1(); returnbservice.b2(str); } } MockitoDependencyInjectionTestExecutionListener的实现 publicclassMockitoDependencyInjectionTestExecutionListenerextendsDependencyInjectionTestExecutionListener{ privateSet<Field>injectFields=newHashSet<>(); privateMap<String,Object>mockObjectMap=newHashMap<>(); @Override protectedvoidinjectDependencies(TestContexttestContext)throwsException{ super.injectDependencies(testContext); init(testContext); } /** *whenAdependencesonB *mockBorSpyontargetObjectofbeangetfromSpringIoCContainerwhosetypeisB.classorbeanNameisBImpl *@paramtestContext */ privatevoidinit(TestContexttestContext)throwsException{ AutowireCapableBeanFactoryfactory=testContext.getApplicationContext().getAutowireCapableBeanFactory(); Objectbean=testContext.getTestInstance(); Field[]fields=bean.getClass().getDeclaredFields(); for(Fieldfield:fields){ Annotation[]annotations=field.getAnnotations(); for(Annotationannotation:annotations){ if(annotationinstanceofMock){ Class<?>clazz=field.getType(); Objectobject=Mockito.mock(clazz); field.setAccessible(true); field.set(bean,object); mockObjectMap.put(field.getName(),object); }elseif(annotationinstanceofSpy){ Objectfb=factory.getBean(field.getName());//maybeaproxythatcannotbespybecause$Proxyisfinal ObjecttargetSource=AopTargetUtils.getTarget(fb); ObjectspyObject=Mockito.spy(targetSource); if(!fb.equals(targetSource)){//proxy if(AopUtils.isJdkDynamicProxy(fb)){ setJdkDynamicProxyTargetObject(fb,spyObject); }else{//cglib setCglibProxyTargetObject(fb,spyObject); } }else{ mockObjectMap.put(field.getName(),spyObject); } field.setAccessible(true); field.set(bean,spyObject); }elseif(annotationinstanceofAutowired){ injectFields.add(field); } } } for(Fieldfield:injectFields){ field.setAccessible(true); Objectfo=field.get(bean); if(AopUtils.isAopProxy(fo)){ ClasstargetClass=AopUtils.getTargetClass(fo); if(targetClass==null) return; ObjecttargetSource=AopTargetUtils.getTarget(fo); Field[]targetFields=targetClass.getDeclaredFields(); for(FieldtargetField:targetFields){ targetField.setAccessible(true); if(mockObjectMap.get(targetField.getName())==null){ continue; } ReflectionTestUtils.setField(targetSource,targetField.getName(),mockObjectMap.get(targetField.getName())); } }else{ ObjectrealObject=factory.getBean(field.getType()); if(null!=realObject){ Field[]targetFields=realObject.getClass().getDeclaredFields(); for(FieldtargetField:targetFields){ targetField.setAccessible(true); if(mockObjectMap.get(targetField.getName())==null){ continue; } ReflectionTestUtils.setField(fo,targetField.getName(),mockObjectMap.get(targetField.getName())); } } } } } privatevoidsetCglibProxyTargetObject(Objectproxy,ObjectspyObject)throwsNoSuchFieldException,IllegalAccessException{ Fieldh=proxy.getClass().getDeclaredField("CGLIB$CALLBACK_0"); h.setAccessible(true); ObjectdynamicAdvisedInterceptor=h.get(proxy); Fieldadvised=dynamicAdvisedInterceptor.getClass().getDeclaredField("advised"); advised.setAccessible(true); ((AdvisedSupport)advised.get(dynamicAdvisedInterceptor)).setTarget(spyObject); } privatevoidsetJdkDynamicProxyTargetObject(Objectproxy,ObjectspyObject)throwsNoSuchFieldException,IllegalAccessException{ Fieldh=proxy.getClass().getSuperclass().getDeclaredField("h"); h.setAccessible(true); AopProxyaopProxy=(AopProxy)h.get(proxy); Fieldadvised=aopProxy.getClass().getDeclaredField("advised"); advised.setAccessible(true); ((AdvisedSupport)advised.get(aopProxy)).setTarget(spyObject); } } 附 maven依赖 JUnit、Mockito

优秀的个人博客,低调大师

IDEA 下如何修改 Elasticsearch 源码

以下所有过程以mac操作系统下(macOS 10.13.6)为例进行。 环境准备 安装jdk10 因为es需要高版本jdk进行开发,所以我们直接安装jdk10。 前往 http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html ,直接下载安装mac的dmg版本即可。 jdk8和jdk10并存 如果平时开发用的jdk8,为了不影响之后使用,jdk8和jdk10将会同时存在。如果之前没用过java低版本请忽略。在 .bash_profile 中设置如下: export JAVA8_HOME=$(/usr/libexec/java_home -v 1.8) export JAVA10_HOME=$(/usr/libexec/java_ho

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle

Oracle

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse

Eclipse

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。