小编rob*_*ins的帖子

如何从Java8 lambda创建Runnable

我遇到了一些代码,尽管有点阅读,但我仍然难以理解.调用一个方法,该方法接收两个args,其中一个是Runnable.而不是传入一个Runnable对象虽然有一个lambda.

例如:

public class LambdaTest {

    private final Lock lock = new ReentrantLock();

    @Test
    public void createRunnableFromLambda() {
        Locker.runLocked(lock, () -> {
            System.out.println("hello world");
        });
    }

    public static class Locker {
        public static void runLocked(Lock lock, Runnable block) {
            lock.lock();
            try {
                block.run();
            } finally {
                lock.unlock();
            }
        }
    }
}

所以我的问题是,你能解释一下如何从lambda创建Runnable,还请有人解释语法() - > {}.具体来说,()括号是什么意思?

谢谢.

java lambda java-8

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

Spring Security、无状态 REST 服务和 CSRF

I have a REST service, built using Java, Spring-boot and using Spring Security with Basic Access Authentication. There are no Views, no JSP etc, no 'login', just stateless services which can be called from a React app hosted separately.

I've read a variety of documentation about CSRF protection, but can't decide whether I should be using spring-security CSRF config, or just disabling it? If I disable the csrf protection I can call the service with curl using my basic auth …

java rest csrf spring-security spring-boot

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

如何在 Gradle for OpenAPI 3.0 中使用 Swagger Codegen?

我有一个 OpenAPI 3.0 规范(采用 YAML 格式),并且想为 API 生成 Java 代码。我想将此作为自动化构建的一部分(最好使用 Gradle),以便我可以创建服务接口,并将接口的实现作为自动化过程的一部分。

这个工作示例展示了如何做到这一点,但它使用 Swagger 2.0 规范 YAML:https : //github.com/galovics/swagger-codegen-gradle/tree/first-server-side

我已经分叉了这个例子并添加了一个 OpenAPI 3.0 规范,但是它无法构建:https : //github.com/robjwilkins/swagger-codegen-gradle/tree/openapi_v3_test

错误是:

无法读取资源列表 com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'openapi': was expected (JSON String, Number, Array, Object or token 'null', 'true' or 'false') at [来源: (字符串)"openapi: 3.0.0

(公关显示变化:https : //github.com/robjwilkins/swagger-codegen-gradle/pull/1/files

我的理解是需要更新的代码在build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("io.swagger.codegen.v3:swagger-codegen:3.0.16")
    }
}
Run Code Online (Sandbox Code Playgroud)

可能io.swagger.codegen.v3:swagger-codegen:3.0.16无法识别 OpenAPI 3.0?

Swagger Core v3 项目似乎专注于从代码(而不是来自规范的代码)生成 YAML/JSON 规范:https …

java gradle swagger openapi swagger-codegen

7
推荐指数
1
解决办法
9457
查看次数

EHCache 3.5 获取所有缓存键/条目

我正在使用 EHCache 3.5.2 并且在获取所有缓存键和缓存条目时遇到问题。

我正在使用 CacheManager 创建缓存。然后我用一些数据填充它。然后我想检索缓存中的所有条目。

一些示例代码:

Cache<String, Foo> cache = cacheManager.createCache("fooCache",
     CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, Foo.class,
         ResourcePoolsBuilder.heap(20)).build());

cache.putAll(repository.findAll().stream().collect(toMap(Foo::getId, foo -> foo)));

List<Foo> foos = cache.???
List<String> keys = cache.???
Run Code Online (Sandbox Code Playgroud)

v3.5 可以实现吗?似乎在旧版本的 EHCache 中是可能的。

谢谢

java ehcache ehcache-3

6
推荐指数
2
解决办法
8798
查看次数

从 Java8 lambda 返回相同的对象

我有以下代码:

@Test
public void testAverageFromArray() {
    final Double[] dbls = { 1.1, 1.2, 1.3, 1.4, 1.5 };
    final double av = Stream.of(dbls).mapToDouble(d -> d).average().getAsDouble();
    assertEquals(1.3, av, 0);
}
Run Code Online (Sandbox Code Playgroud)

问题:是否可以用其他语法替换d -> d lambda?看来没必要。

*我不确定这个问题的标题 - 如果不合时宜,请编辑。

谢谢

lambda java-8

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

Kafka 主题消息版本控制

我以订阅者可以理解的格式将消息发布到 kafka 主题 (outputTopic)。我现在希望以破坏现有主题消费者的方式修改这些消息的格式。

例如,我发布以 json 格式序列化的对象,但需要更改对象,因此需要更改架构。

管理此类变更的最佳方法是什么?我应该改变生产者以便它发布到新主题(outputTopic2)吗?有没有更好的方法来管理这个问题?

json apache-kafka

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

带数值的 Couchbase 参数化查询

我正在尝试将数值添加到参数化中AnalyticsQuery,但在查询运行时不断收到错误。创建查询的 java 如下所示:

  private ParameterizedAnalyticsQuery aggregateQuery(String userId, Long from, Long to) {
    return AnalyticsQuery.parameterized(
        "select d.field1,"
            + " d.field2"
            + " from data d"
            + " where d.userId = $userId"
            + " and d.timestamp between $from and $to",
        JsonObject.create()
            .put("userId", userId)
            .put("from", from)
            .put("to", to)
    );
  }
Run Code Online (Sandbox Code Playgroud)

运行查询时返回以下错误:

<< Encountered \"from\" at column 213. ","code":24000}]
Run Code Online (Sandbox Code Playgroud)

如果我将查询更改为以下内容,那么它将起作用并返回行:

    return AnalyticsQuery.parameterized(
        "select d.field1,"
            + " d.field2"
            + " from data d"
            + " where d.userId = $userId"
            + " and d.timestamp …
Run Code Online (Sandbox Code Playgroud)

java couchbase couchbase-java-api

4
推荐指数
1
解决办法
87
查看次数