在 docker 集群复制应用程序中禁用 EJB Scuduler

Disable EJB Scuduler in docker swarm replication app

我正在使用 docker swarm 来部署我的应用程序。
我正在使用 payara 图片 (payara/server-full:4.181).
Docker 版本 18.03.1-ce,构建 9ee9f40

version: "3"
services:
  backend:
    container_name: backend
    restart: always
    build: ./../yf-services
    image: 127.0.0.1:5000/yf-services
    entrypoint: "/opt/payara41/bin/startInForeground.sh --passwordfile=/opt/pwdfile -d --postbootcommandfile glassfish/domains/domain1"
    deploy:
      mode: replicated
      replicas: 2
    networks:
      - nginx-proxy
networks:
  nginx-proxy:

是否可以在复制的应用程序中禁用 EJB 调度程序? 是否可以将一些环境变量传递给复制的应用程序?

这里有一些解决方法,也许有人会找到更好的...

在服务中你可以传递环境变量

environment:
  - TASK_NAME={{.Task.Name}}

其中 .Task.Name 将是您的 stackName_serviceName.number 在我的例子中是针对每个副本

yf_backend.1.....
yf_backend.2.....

然后从您的 JAVA 应用程序中您可以获得环境变量并检查多个副本。 将其启用 1,其余禁用。 像这样:

public boolean isEnvVariableEnableScheduler() {
    final String envSchedulerTaskEnvVeriable = System.getenv("TASK_NAME");
    return envSchedulerTaskEnvVeriable == null || envSchedulerTaskEnvVeriable.contains("yf_backend.1");

}