小编Fra*_*hey的帖子

"set -x"在Dockerfile中做了什么?

我正在从现有Dockerfile的学习中开始创建自己的Dockerfile.我注意到大多数时候,命令都是从两个开始的

RUN set -x ...
Run Code Online (Sandbox Code Playgroud)

要么

RUN set -ex; ...
Run Code Online (Sandbox Code Playgroud)

为什么这样做,为什么这是必要的?有必要吗?

docker

14
推荐指数
1
解决办法
2514
查看次数

ContextRefreshedEvent,ContextStartedEvent,ContextStoppedEvent和ContextClosedEvent有什么区别

在Spring 5.x中,以下事件之间有什么区别?

  1. ContextRefreshedEvent
  2. ContextStartedEvent
  3. ContextStoppedEvent
  4. ContextClosedEvent

哪个事件与servlet上下文事件相关(根据https://docs.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html):

  • ServletContextListener.contextInitialized(ServletContextEvent); 和
  • ServletContextListener.contextDestroyed(ServletContextEvent)

我有以下情况:

  • 想要尽快初始化日志记录子系统,是否应该在ContextRefreshedEventContextStartedEvent

  • 我也想尽可能晚地破坏它,如果这样做ContextClosedEvent或者ContextStoppedEvent

events spring

8
推荐指数
1
解决办法
1374
查看次数

在 Java 中控制 docker-compose

我创建了相当多的 docker-compose 脚本,这些脚本产生了几个服务。我现在想控制 JVM 中的 docker-compose。基本上,我希望能够执行upand down,理想情况下带有-p <project name>参数,因此我可以同时生成多个实例。

这在Java中可能吗?

java docker docker-compose docker-java

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

排除约束和唯一约束有区别吗?

假设如下表:

CREATE TABLE zoo (
    cage   INTEGER,
    animal TEXT,
);
Run Code Online (Sandbox Code Playgroud)

以下之间是否存在真正有效的区别:

ALTER TABLE zoo ADD CONSTRAINT x EXCLUDE USING gist (cage WITH =, animal WITH =)
Run Code Online (Sandbox Code Playgroud)

和:

CREATE UNIQUE INDEX ON zoo(cage, animal)
Run Code Online (Sandbox Code Playgroud)

postgresql unique-constraint

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

为什么google-api-client依赖于guava-jdk5?

我在Maven依赖项中依赖于Guava:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.3-jre</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我还依赖于依赖关系中的Google API客户端:

<dependency>
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client</artifactId>
    <version>1.23.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但由于一些奇怪的原因,这具有以下依赖性:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava-jdk5</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

现在我的WAR结束了两个Guava JAR:

  • 番石榴23.3 jre.jar
  • 番石榴jdk5-17.0.jar

这给出了几个问题,因为在guava-jdk5-17.0.jar编译代码时运行时更喜欢guava-23.3-jre.jar.

为什么Google API Client依赖于Guava for JDK5?拥有两个版本会不会更有意义,例如:

  • google-api-client 这取决于常规番石榴,最好是版本23.3(截至目前)
  • google-api-client-jdk5 这取决于Guava的JDK5

java google-api maven google-api-java-client google-api-client

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

我们可以有虚假中断吗?

我正在创建一个任务轮询器,它每分钟查找一次任务。它看起来像这样:

public class Poller {
    private final ExecutorService e = Executors.newSingleThreadExecutor();

    public void start() {
        e.submit(() -> {
            while (!Thread.currentThread().isInterrupted()) {
                final Task task = manager.getTask();

                if (task != null) {
                    // ...
                } else {
                    try {
                        TimeUnit.MINUTES.sleep(1);
                    } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                    }
                }
            }
        });
    }

    public void stop() {
        e.shutdownNow();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我想停止轮询进程时,我执行stop(). 这会触发正在运行的线程上的中断,这将停止轮询器。

这工作正常。但是,我想知道该线程是否有可能被其他人(很可能是 JVM)中断。在这种情况下,轮询器将退出而不应该退出。

我知道我们可能会有虚假的唤醒,所以我们必须wait()用 a来保护awhile (condition) { ... }而不是if (condition) { ... } …

java multithreading

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