小编Nir*_*jan的帖子

在Java中,按位操作比模数/提醒操作符更快吗?

我在几个博客中读到,在Java模数/提醒操作符中比按位-EN慢.所以,我编写了以下程序进行测试.

public class ModuloTest {
    public static void main(String[] args) {
        final int size = 1024;
        int index = 0;

        long start = System.nanoTime();
        for(int i = 0; i < Integer.MAX_VALUE; i++) {
            getNextIndex(size, i);
        }
        long end = System.nanoTime();
        System.out.println("Time taken by Modulo (%) operator --> " + (end - start) + "ns.");

        start = System.nanoTime();
        final int shiftFactor = size - 1;
        for(int i = 0; i < Integer.MAX_VALUE; i++) {
            getNextIndexBitwise(shiftFactor, i);
        }
        end = System.nanoTime();
        System.out.println("Time …
Run Code Online (Sandbox Code Playgroud)

java bit-manipulation

5
推荐指数
1
解决办法
4986
查看次数

如何将 Jackson 映射器用于 java.io.Serialized 类型字段?

我遇到过一种情况,POJO 扩展了一个抽象超类,它定义了类似getId()setId()usingjava.io.Serializable类型的方法(代码如下所示)。每当我将 JSON 字符串反序列化为具体的 POJO 时,都会出现以下异常:

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of java.io.Serializable, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information
 at [Source: java.io.StringReader@6fd90825; line: 1, column: 2] (through reference chain: com.demo.jackson.AClass["id"])
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
    at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:716)
    at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:140)
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:525)
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:99)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:242)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118)
    at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1270)
    at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:897)
Run Code Online (Sandbox Code Playgroud)

Java代码:

抽象超类

public abstract class AbstractClass { …
Run Code Online (Sandbox Code Playgroud)

java json

5
推荐指数
2
解决办法
6965
查看次数

Spring Boot 嵌入式 tomcat 未从类路径加载 SSL 密钥库文件

我正在为我的应用程序使用 Spring boot 1.2.7,并且作为一项要求,我必须从类路径加载 SSL 证书。所以,我在我的类路径中添加了我的 PKCS12 文件并使用以下代码(在AppInitializer类中加载它:

final String sslKeystoreFilepath = this.getClass().getClassLoader().getResource(sslKeystoreFilename).getFile();
Run Code Online (Sandbox Code Playgroud)

我在这里注意到两件事:

  1. 字符串包含file:在其中。如果我通过带有main方法的普通独立程序运行相同的代码,我将看不到类似file:.

  2. 当我运行 Spring Boot 应用程序(使用生成的 fat jar)时,它抛出异常说:

SEVERE: Failed to load keystore type PKCS12 with path /Users/my_user/Projects/my_app/build/libs/myapp-1.0-SNAPSHOT-dev.jar!/dev_keystore.p12 due to /Users/my_user/Projects/my_app/build/libs/myapp-1.0-SNAPSHOT-dev.jar!/dev_keystore.p12 (No such file or directory) java.io.FileNotFoundException: /Users/my_user/Projects/my_app/build/libs/myapp-1.0-SNAPSHOT-dev.jar!/dev_keystore.p12 (No such file or directory)

我究竟做错了什么?

java ssl-certificate spring-boot

5
推荐指数
1
解决办法
1万
查看次数

为什么 log4j 2 不记录应用程序和单元测试的方法名称

我的 Log4j2 配置文件如下所示:

<Appenders>
  <RollingRandomAccessFile name="APP_LOG_APPENDER" fileName="${sys:baseLogPath}/${appLogFileName}.log"
            filePattern="${sys:baseLogPath}/backups/$${date:yyyy-MM}/${appLogFileName}-%d{yyyy-MM-dd}-%i.log.gz" immediateFlush="false">
    <PatternLayout>
      <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [Thread: %t] %level [%c][%M] - %msg%n</Pattern>
    </PatternLayout>
    <Policies>
      <TimeBasedTriggeringPolicy />
      <SizeBasedTriggeringPolicy size="50 MB" />
    </Policies>
    <DefaultRolloverStrategy max="20"/>
  </RollingRandomAccessFile>
</Appenders>
<Loggers>
  <Root level="debug" additivity="false">
    <AppenderRef ref="APP_LOG_APPENDER" />
  </Root>
</Loggers>
Run Code Online (Sandbox Code Playgroud)

类中的记录器语句MyClass

public class MyClass {
  private final static org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(MyClass.class);
  public void someMethod() {
    logger.debug("Some sample string at DEBUG level....");
    logger.info("Some sample string at INFO level....");
    logger.warn("Some sample string at WARN level....");
    logger.error("Some sample string at ERROR …
Run Code Online (Sandbox Code Playgroud)

java slf4j log4j2

5
推荐指数
1
解决办法
7180
查看次数

如何在没有控制器类的情况下对 spring mvc 拦截器进行单元测试

我正在尝试为 spring-mvc Rest 应用程序中的拦截器之一编写单元测试。我在用:

- 测试NG 6.8.7
- 莫基托 1.9.5
- 春季4.0.0

是否必须让控制器对拦截器进行单元测试?我们可以在不编写控制器的情况下编写单元测试吗?

谢谢,NN

java spring unit-testing spring-mvc

3
推荐指数
1
解决办法
1万
查看次数

Java中的分布式序列ID(长)生成器 - 有人可以验证此设计是否正确吗?

要求:序列ID(长)生成器,可在分布式环境(多个JVM)中工作.每个JVM上都会有多个线程.

解决方案:我们有一个集中的持久键值存储.但我们不希望对每个传入请求进行远程调用,因此我们考虑从此集中键值存储中获取批量序列ID并保留在本地JVM中然后使用它.

Key Value Store:这是我们的集中键值存储,我们在其中保存一个SEQUENCE_ID具有Long值的对象.我们的这个键值存储具有通过版本号控制并发更新的功能.

BatchRetriever:这执行以下操作:

  1. SEQUENCE_ID从键值存储获取当前值
  2. 将批量大小添加到检索的值
  3. 更新新值 SEQUENCE_ID

多个线程可能正在尝试执行此操作,因此所有这三个步骤将作为单个原子工作执行.我们使用此键值存储的版本号功能来控制此并发更新.

SequenceHolder:基于队列的数据结构,它将保存一批序列ID.

SequenceObserver:观察者(通过Observer设计模式实现),可以检查大小SequenceHolder是否已降至阈值,它将BatchRetriever用于检索下一批.

感谢是否有人可以验证此设计并建议更好的设计.

~NN

java multithreading

3
推荐指数
1
解决办法
1506
查看次数

为什么对 Kafka 的 seekToBeginning 和 seekToEnd API 的调用永远挂起?

我的环境:

  • 卡夫卡版本: kafka_2.10-0.10.0.0
  • Kafka Java API 版本(客户端): kafka-clients-0.10.0.0

我的配置:

  • 话题: event_notification
  • 分区: 20
  • 客户端消费者线程: 1
  • 消费者组标识: event_cg01
  • 自动提交标志: false

按照要求,我的应用程序,基于标记的启动过程中,我必须设置偏移要么开始结束。为此,我使用以下代码:

final List<PartitionInfo> partitionsInfos = kafkaConsumer.partitionsFor(this.topic);

final List<TopicPartition> assignedPartitions = FluentIterable
      .from(partitionsInfos)                                                             
      .filter(Predicates.notNull())
      .transform(new Function<PartitionInfo, TopicPartition>() {                                                           
          @Override
          public TopicPartition apply(final PartitionInfo input) {                                                                         
            return new TopicPartition(topic, input.partition());
          }
      }).toList();

switch (listenMode) {
case OLDEST:
  kafkaConsumer.seekToBeginning(assignedPartitions);
  break;
case LATEST:
  kafkaConsumer.seekToEnd(assignedPartitions);
  break;
default:
  break;
}
Run Code Online (Sandbox Code Playgroud)

此代码未按预期工作。它永远挂在seekToBeginningseekToEnd电话。

我错过了什么吗?

java apache-kafka

3
推荐指数
1
解决办法
1779
查看次数

使用ThreadLocal的最佳方法是什么 - 通过静态或非静态方法?

对于我的应用程序,我必须将某些信息携带到应用程序的每一层(一个示例可能是为传入请求生成的唯一事务ID).

所以,我打算创建一个引用的类ThreadLocal<ConcurrentMap<String, Object>>.

感谢有人可以提供帮助; 我有一个混乱,出于以下方法,哪一个更好:

1. AppContext.java有静态方法

public final class AppContext {
  private static final ThreadLocal&lt;ConcurrentMap&lt;String, Object&gt;&gt; context = new ThreadLocal<>();

  public static void set(final String key, final Object value) {
    // set key value in thread local
  }

  public static Object get(final String key) {
    // get value from thread local
  }
}
Run Code Online (Sandbox Code Playgroud)

2.具有非静态方法的AppContext.java

public final class AppContext {
  private static final ThreadLocal&lt;ConcurrentMap&lt;String, Object&gt;&gt; context = new ThreadLocal<>();

  public void set(final String key, final Object value) { …
Run Code Online (Sandbox Code Playgroud)

java thread-local

2
推荐指数
1
解决办法
3002
查看次数

单个gradle工人进行单元测试

是否有可能让gradle知道使用单个工作线程进行所有单元测试?在控制台中,我可以看到并行调用许多gradle worker来执行单元测试.在我的情况下,这是不希望的,我希望Gradle以特定的顺序调用单元测试.我已经创建了多个测试任务并添加了dependsOn属性,因此已经应用了一个级别的排序.但是,对于某些测试任务,有多个单元测试,并且这些测试任务未按顺序排列.Gradle在这里聘请了多名工人.有没有办法使这也顺序?

java unit-testing gradle

2
推荐指数
1
解决办法
2630
查看次数

如何在spring-boot应用程序中从YML文件加载多个属性

我们有一个YML配置,看起来像:

datasurces: 
  readDataSource:
    ssl-enabled: false
    driver-class-name: oracle.jdbc.driver.OracleDriver
    host: db1.abc.com
    port: 1232
    sid: ABC_DB
    trust-store-fileName: abcdb.jks
    connection-pool:
      initial-size: 10
      max-size: 20

  writeDataSource:
    ssl-enabled: false
    driver-class-name: oracle.jdbc.driver.OracleDriver
    host: db2.abc.com
    port: 1232
    sid: XYZ_DB
    trust-store-fileName: xyzdb.jks
    connection-pool:
      initial-size: 10
      max-size: 20
Run Code Online (Sandbox Code Playgroud)

我们必须将它加载到一个DataSources看起来像的自定义类

@ConfigurationProperties(prefix = "datasources")
public class DataSources {
  @Value("${datasources.readDataSource}")
  private DataSource readDataSource;

  @Value("${datasources.writeDataSource}")
  private DataSource writeDataSource;

  //...getters/setters
}

public class DataSource {
  private String id;
  private boolean sslEnabled;
  private String driverClassName;
  private String host;
  private int port;
  private String trustStoreFileName; …
Run Code Online (Sandbox Code Playgroud)

java configuration spring spring-boot

0
推荐指数
1
解决办法
4317
查看次数