首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏软件开发-青出于蓝

    代码质量之Archunit的使用 原

    官网的英文介绍很好,建议阅读原文,"ArchUnit is a free, simple and extensible library for checking the architecture of your Java code using any plain Java unit test framework. 来记录日志 */ @ArchTest private final ArchRule NO_JAVA_UTIL_LOGGING = NO_CLASSES_SHOULD_USE_JAVA_UTIL_LOGGING ; }     List-2中的代码中已经给出注释,自己可以在项目中运行看下结果。 结尾(List-2中定义不能以Interface结尾),未以I开头(List-2中定义要以I开头): ?                                                    

    2.6K20发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    Hadoop ha之Journal Storage Directory nor formatted

    RPC.java:989) at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:847) at org.apache.hadoop.ipc.Server $RpcCall.run(Server.java:790) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs (Subject.java:422)     原因知道了,怎么解决呢,重新format namenode是不行的,这样集群数据都丢了。 关停namenode,执行下List-2中的内容即可,hadoop会自动将namenode中的edits文件全部同步到QJM中. List-2 hdfs namenode -initializeSharedEdits

    2.7K50发布于 2020-01-08
  • 来自专栏软件开发-青出于蓝

    Spark集群安装方式2 原

    文件夹放到三台机器的/opt下     修改spark的conf下的spark-env.sh文件(如果不存在,则cp  spark-env.sh.template   spark-env.sh),修改为如下List -2,这个修改三台机器上都要做: List-2 export JAVA_HOME=/opt/jdk1.8 export SPARK_DIST_CLASSPATH=$(/opt/hadoop-2.7.7 /bin/hadoop classpath);     为什么List-2中需要将hadoop的classpath加入到其中,是因为spark自1.4之后,编译都是没有将hadoop的classpath

    46910发布于 2019-05-06
  • 来自专栏软件开发-青出于蓝

    Disruptor之生产者阻塞

    (LockSupport.java:338) at com.lmax.disruptor.MultiProducerSequencer.next(MultiProducerSequencer.java (RingBuffer.java:263) ......     原因,同事写的功能,在static{ }块中从数据库中查询数据,但是测试环境该表不存在,所以报了"java.lang.NoClassDefFoundError: Could not initialize Disruptor中FatalExceptionHandler来处理异常,但是呢,它的handleEventException方法中如下List-2,它又把异常给抛出去了。 List-2 @Override public void handleEventException(final Throwable ex, final long sequence, final Object

    2.2K10发布于 2020-04-23
  • 来自专栏软件开发-青出于蓝

    SpringFramework之AnnotationAwareOrderComparator

    来看lookupOrder方法: 首先,判断Object类型的参数是否是Ordered.java,它是个接口,如下List-2所示。 如果参数不是Ordered接口,那么判断参数是否是Class<? >,那么取出它上面的注解Order.java;如果参数是对象,那么先获取参数的Class<?>,再判断是否有Order.java注解(如List-3所示),之后调用Order的value()。 List-2 public interface Ordered { /** * Useful constant for the highest precedence value. * @see java.lang.Integer#MIN_VALUE */ int HIGHEST_PRECEDENCE = Integer.MIN_VALUE; /** * Useful * @see java.lang.Integer#MAX_VALUE */ int LOWEST_PRECEDENCE = Integer.MAX_VALUE; /** * Get

    1.1K30发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    Redis之SpringDataRedis对象写入到Redis中

    <property name="port" value="6379"/> <property name="database" value="7"/> </bean> 2.用JDK序列化方式 List org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/> </property> </bean>     如List 先来定义实体类,如下List-3和List-4 List-3 Department.java /** * @author dmj1161859184@126.com 2018-09-18 01:21 this.officeStaffs = officeStaffs; this.strings = strings; } } List-4  OfficeStaff.java \"com.mjduan.project.objectRedisTemplate.model.Department\",\"name\":\"System\",\"officeStaffs\":[\"java.util.ArrayList

    1.2K30发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    GC之jstack 原

    MainGenericRunner     用jstack命令jstack -l 18261>./18261jstack.txt拉取线程信息,18261是进程ID,文件18261jstack.txt的内容如下: List $Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked List-2中的只是文件的开头内容,后面还有Spring的线程,tomcat的线程,JVM自己的线程,通过线程名称可以看出来。 > (a java.lang.Object) at java.lang.Thread.run(Thread.java:748) "Thread-0": at com.mjduan.project.TestDeadLock ) - locked <0x000000076b40a858> (a java.lang.Object) at java.lang.Thread.run(Thread.java

    1.1K20发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    openJDK之lambda——List的forEach如何实现的

    integers.forEach(i->{ System.out.println(i); }); }     Arrays.asList中底层上是ArrayList,forEach的实现是在接口java.lang.Iterable 中,如下List-2所示,JDK8中interface是可以有实现方法的(JDK的特性),由于该方法在Iterable中,所以直接用迭代的方式遍历整个List,之后对每个元素,调用Consumer.accept List-2 Iterable的forEach方法 /** * Performs the given action for each element of the {@code Iterable

    86630发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    SpringFramework之ProxyFactory

    service的hello方法"); return "Hello"; } } import org.springframework.aop.MethodBeforeAdvice; import java.lang.reflect.Method System.out.println("beforeAdvice的before方法"); } } import org.springframework.aop.AfterReturningAdvice; import java.lang.reflect.Method proxyFactory.getProxy(); String result = proxy.hello(); System.out.println(result); } }     运行结果如下List -2 List-2 beforeAdvice的before方法 service的hello方法 AfterAdvice的afterReturning方法 Hello     proxyFactory.addAdvice

    1.1K30发布于 2019-07-15
  • 来自专栏软件开发-青出于蓝

    Springsecurity-oauth2之TokenStore

    TokenStore是个interface,如下List-1 List-1 package org.springframework.security.oauth2.provider.token; import java.util.Collection JwtTokenStore,如下List-2所示 List-2 public class JwtTokenStore implements TokenStore { private JwtAccessTokenConverter

    7.2K20发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    JDK之伪分享的情况下该使用填充还是@Contended

    @Contended注解的value List-1 Intellij Idea中打开的Oracle JDK @Contended没有注释 package sun.misc; import java.lang.annotation.ElementType ; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target ElementType.FIELD, ElementType.TYPE}) public @interface Contended { String value() default ""; } List * @return contention group tag. */ String value() default ""; }     openJDK的Contended.java 查google,查到Stackoverflow上别人的回复,说的和List-2注释差不多,理解字面意思,但是没理解含义,原文地址。我把别人的回答截图,如下图1。

    1.7K30发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    JDK之JVM中Java对象的头部占多少byte

    java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)      我用openJDK的jol来查看对象的layout,源码如下,直接运行main方法, List-2 package layout = ClassLayout.parseInstance(a); } public static class A { // no fields } }  List 图1 List-2中main运行的结果     图1中,第一个红框中的就是对象头部的mark word,占了8bytes,即64bits,这个也可以直接参考openJDK8的hotspot的markOop.hpp 所以可以看到数组和普通的Java对象头部是有区别的。

    1.5K50发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    Springsecurity-oauth2之ClientDetailsService

    List-2 InMemoryClientDetailsService package org.springframework.security.oauth2.provider.client; import java.util.HashMap; import java.util.Map; import org.springframework.security.oauth2.provider.ClientDetails this.clientDetailsStore = new HashMap<String, ClientDetails>(clientDetailsStore); } }     InMemoryClientDetailsService如List

    5.7K41发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    Hive on spark下insert overwrite partition慢的优化

    set hive.execution.engine=mr,不使用spark作为引擎,这样就解决了一直卡住不动的问题     之后hive又报错了,提示超过了单个node的max partition数,如List -2 List-2 ... (ExecMapper.java:160) ... 8 more Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [ (Operator.java:879) at org.apache.hadoop.hive.ql.exec.SelectOperator.process(SelectOperator.java:95) (TableScanOperator.java:130) at org.apache.hadoop.hive.ql.exec.MapOperator$MapOpCtx.forward(MapOperator.java

    3K20发布于 2020-08-10
  • 来自专栏软件开发-青出于蓝

    Springsecurity之AuthenticationEntryPoint

    List-1 package org.springframework.security.web; import java.io.IOException; import javax.servlet.ServletException 这个对应的代码在ExceptionTranslationFilter中,如下List-2,当ExceptionTranslationFilter catch到异常后,就会间接调用AuthenticationEntryPoint List-2 public class ExceptionTranslationFilter extends GenericFilterBean { private AuthenticationEntryPoint

    4.6K62发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    SpringFramework之ClassPathBeanDefinitionScanner

    ClassPathBeanDefinitionScanner的最重要的方法是scan(),scan()又调用doScan(),如下List-2 List-2 protected Set<BeanDefinitionHolder scanning"); } catch (ClassNotFoundException ex) { // JSR-250 1.1 API (as included in Java metadataReader.getAnnotationMetadata()); }     List-3中,将符合要求的类解析为BeanDefinition,并返回BeanDefiniton集合,回到了List List-5中处理完了后,回到List-2,方法registerBeanDefinition将这个BeanDefinition注册到Spring容器中。 2.

    1.1K20发布于 2019-06-28
  • 来自专栏软件开发-青出于蓝

    Springsecurity之AuthenticationEntryPoint

    > <property name="sendRenew" value="false"/> </bean>     CasAuthenticationEntryPoint的commence方法中,如下List createRedirectUrl是构建调用CAS server的url,方法preCommence是空方法体,最后设置respose的redirect地址,这样浏览器收到的是302状态码,然后浏览器访问List List-2  public final void commence(final HttpServletRequest servletRequest, final HttpServletResponse urlEncodedService); preCommence(servletRequest, response); response.sendRedirect(redirectUrl); }     注:List

    3K60发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    Docker运行Kibana 原

    获取镜像 List-1 docker pull kibana:6.5.1 本地已经有elasticsearch在运行,我的elasticsearch运行在Docker上,如下List-2 List- Up 14 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch 启动kibana,如下List

    1K30发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    Spring-security-oauth2之DaoAuthenticationProvider

    我们来看父类AbstractUserDetailsAuthenticationProvider中的authenticate方法,如下List-2,注意List-2中的"this.additionalAuthenticationChecks List-2 public Authentication authenticate(Authentication authentication) throws AuthenticationException } return this.createSuccessAuthentication(principalToReturn, authentication, user); }     List

    2.8K20发布于 2019-04-15
  • 来自专栏软件开发-青出于蓝

    Ribbon的RandomRule和RoundRobinRule 原

    ILoadBalancer获取所有的服务,如果服务个数是0则直返回null 调用chooseRandomInt方法,参数是服务个数,这样返回的随机值是在0与服务数之间,有趣的是出于多线程安全的考虑,使用了java.util.concurrent.ThreadLocalRandom 图2     RoundRobinRule是轮循算法实现,choose(Object)方法会调用choose(ILoadBalancer lb, Object key),如下List-2所示 List

    1.7K20发布于 2019-10-06
领券