小编And*_*bbs的帖子

比较百里香的枚举常数

我有一个枚举,Constants:

enum Constants {
    ONE,TWO,THREE;
}
Run Code Online (Sandbox Code Playgroud)

如何比较Thymeleaf中的枚举常量.

谢谢.

java spring thymeleaf

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

如何更新火花流中的广播变量?

我相信,我有一个相对常见的火花流用例:

我有一个对象流,我想根据一些参考数据进行过滤

最初,我认为使用广播变量实现这是一件非常简单的事情:

public void startSparkEngine {
    Broadcast<ReferenceData> refdataBroadcast
      = sparkContext.broadcast(getRefData());

    final JavaDStream<MyObject> filteredStream = objectStream.filter(obj -> {
        final ReferenceData refData = refdataBroadcast.getValue();
        return obj.getField().equals(refData.getField());
    }

    filteredStream.foreachRDD(rdd -> {
        rdd.foreach(obj -> {
            // Final processing of filtered objects
        });
        return null;
    });
}
Run Code Online (Sandbox Code Playgroud)

但是,尽管很少,我的参考数据会定期更改

我的印象是我可以在驱动程序上修改和重新广播我的变量,它会传播给每个工作者,但是Broadcast对象不是也不Serializable需要final.

我有什么替代品?我能想到的三个解决方案是:

  1. 将参考数据查找移动到一个forEachPartitionforEachRdd左右,使其完全驻留在工作者上.但是,参考数据存在于REST API中,因此我还需要以某种方式存储计时器/计数器以停止对流中的每个元素访问远程数据库.

  2. 每次refdata更改时,使用新的广播变量重新启动Spark上下文.

  3. 将参考数据转换为RDD,然后join以我现在流式传输的方式将流转换为流Pair<MyObject, RefData>,尽管这会将参考数据与每个对象一起发送.

java scala broadcast apache-spark spark-streaming

29
推荐指数
4
解决办法
2万
查看次数

如何配置nginx X-Forwarded-Port为原始请求端口

我在标准反向代理场景中使用 nginx,将所有请求传递/auth到另一台主机,但是我正在尝试使用非标准端口。

我的最终目标是将X-Forwarded-Port标头设置为请求进入的端口。

这是我在 nginx.conf 中的位置块:

location /auth/ {
    proxy_pass       http://otherhost:8090;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port <VAR>;
}
Run Code Online (Sandbox Code Playgroud)

这个 nginx 运行在一个 docker 容器中,该容器被配置为将请求从 8085 转发到容器中的 80,这样 nginx 进程就可以监听 80:

0.0.0.0:8085->80/tcp

当我点击网址时:

http://localhost:8085/auth/

我正确重定向到http://otherhost:8090,但X-Forwarded-Port标题丢失或错误。

<VAR>原始块中,我尝试了以下操作:

  • $server_port - 这是 nginx 正在侦听的端口 (80),而不是请求端口。

  • $pass_port - 在我的设置中似乎为空,因此 nginx 删除了标头。

  • $http_port - 这是每个请求的随机端口。

  • $remote_port - 这是每个请求的随机端口。

可以在部署时将我的配置更改为硬编码到传入请求的已知端口,但理想情况下,我将能够更改前端端口,而无需对 nginx 配置进行任何更改。

我已经搜索了 …

reverse-proxy nginx docker x-forwarded-for nginx-reverse-proxy

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

配置docker-compose覆盖以忽略/隐藏某些容器

如果我有(简化),则以下docker-compose.yml:

parent:
  image: parent
  links:
    - child

child:
  image: child
Run Code Online (Sandbox Code Playgroud)

我可以构建一个不会创建或启动图像的docker-compose.override.yml文件吗?child


一个不受欢迎的(对我来说)解决方案是反转文件,这样默认的yml文件只会创建parent,而覆盖会创建两者.

但是,我希望配置文件包含最常见的使用方案.

docker docker-compose

14
推荐指数
4
解决办法
3883
查看次数

Spring MVC后台进程

我来自Perl背景,正在使用Spring编写我的第一个Java MVC Web应用程序.

我的webapp允许用户通过调用第三方SOAP服务来提交应用程序同步处理的订单.该项目的下一阶段是允许用户提交批量订单(例如包含500行的CSV)并异步处理它们.这是我现有控制器的片段:

@Controller
@Service
@RequestMapping(value = "/orders")
public class OrderController {

    @Autowired
    OrderService orderService;

    @RequestMapping(value="/new", method = RequestMethod.POST)
    public String processNewOrder(@ModelAttribute("order") Order order, Map<String, Object> map) {

        OrderStatus orderStatus = orderService.processNewOrder(order);

        map.put("orderStatus", orderStatus);

        return "new";
    }
}
Run Code Online (Sandbox Code Playgroud)

我计划创建一个新的@RequestMapping来处理传入的CSV并修改它OrderService以便能够将CSV分开并将各个订单持久保存到数据库中.

我的问题是:在MVC Spring应用程序中创建后台工作程序的最佳方法是什么?理想情况下,我将有5个线程处理这些订单,并且很可能来自队列.我已经读过@Async或提交过Runnable一个SimpleAsyncTaskExecutorbean,我不知道该走哪条路.一些例子对我有帮助.

java spring-mvc background-process

6
推荐指数
1
解决办法
5744
查看次数

我可以发送带外数据和提交吗?

我希望将远程git存储库与RTC服务器集成,通过使用它们的RESTful接口将链接附加到gitweb以获得与特定任务相关联的提交.

理想情况下,这将通过git服务器上的post-receive挂钩完成,但git运行的处理用户不允许用户帐户向RTC进行身份验证.

我能想到的最好的解决方案是以某种方式传递一个身份验证令牌(以cookies.txt的形式从RTC获取)以及git push(但没有将它作为提交的一部分).

替代方案是每个客户端存储库上的后推钩,但它有自己的问题(包括没有这样的钩子).

git authentication rtc githooks

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

如何使用JMockIt对Log4j进行单元测试?

使用静态方法在类中声明Logger(或任何静态字段)时:

public class Foo {
  private static final Logger LOGGER = Logger.getLogger(Foo.getClass);
}
Run Code Online (Sandbox Code Playgroud)

我可以断言调用它的方法(用于审计)的正确方法是什么?

以下方法可行,但setField似乎是错误的方法,使@Tested批注的使用无效以允许自动注入.

@Mocked Logger logger
new Expectations() {
  {
    setField(unitUnderTest, logger);
  }
}
Run Code Online (Sandbox Code Playgroud)

JMockIt似乎提供了@UsingMocksAndStubs(Log4jMocks.class)的解决方案,但是这不允许Expectations,因为它导致调用getLogger()返回一个真实但无用的Logger而不是一个模拟的实例.

java logging unit-testing log4j jmockit

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

无法从Azure容器注册表部署特定映像到App Service

我在Azure中部署了一个Linux应用服务,使用来自私有Azure容器注册表的映像.

服务正常运行,尽管没有对映像进行任何更改(没有新的推送),但App Service已经重新部署.我理解这是Azure如何处理容器,在其认为合适时交换实例的预期部分.

但是,此映像不再能够成功部署,以下是来自Kudu的日志(名称已更改):

2018-04-09 07:28:11.817 INFO  - Starting container for site 
2018-04-09 07:28:11.818 INFO  - docker run -d -p 36165:8080 --name my-service_0 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITES_PORT=8080 -e WEBSITE_SITE_NAME=my-service -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_INSTANCE_ID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -e HTTP_LOGGING_ENABLED=1 myacr.azurecr.io/images/my-image:latest  

2018-04-09 07:28:14.200 INFO  - Issuing docker pull myacr.azurecr.io/images/my-image:latest 
2018-04-09 07:28:14.327 ERROR - docker pull returned STDERR>> Error response from daemon: Get https://myacr.azurecr.io/v2/images/my-image/manifests/latest: unauthorized: authentication required
Run Code Online (Sandbox Code Playgroud)

以下是在本地提取图像的结果:

docker pull myacr.azurecr.io/images/my-image:latest
latest: Pulling from images/my-image 
53478ce18e19: Already exists 
d1c225ed7c34: Already exists 
c6724ba0c09a: Already exists …
Run Code Online (Sandbox Code Playgroud)

azure-web-sites azure-container-service azure-container-registry

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

为什么Gradle在Linux中的包装器必须以这种方式启动?

我有一个具有这种结构的Gradle项目:

ls -alh

drwxr-xr-x 9 Xelian 4.0K Aug  5 22:39 .
drwxrwxr-x 3 Xelian 4.0K Aug  5 16:19 ..
-rw-rw-r-- 1 Xelian  465 Aug  5 16:19 build.gradle
drwxrwxr-x 8 Xelian 4.0K Aug  5 16:38 buildSrc
drwxrwxr-x 3 Xelian 4.0K Aug  5 16:19 gradle
drwxrwxr-x 3 Xelian 4.0K Aug  5 16:45 .gradle
-rwxrwxrwx 1 Xelian 5.0K Aug  5 17:29 gradlew
-rw-rw-r-- 1 Xelian 2.3K Aug  5 16:19 gradlew.bat
-rw-rw-r-- 1 Xelian 17K Aug  5 16:19 README.md
-rw-rw-r-- 1 Xelian   30 Aug …
Run Code Online (Sandbox Code Playgroud)

linux bash wrapper gradle

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

如何在Red Hat Linux服务器中找到RAM大小?

我正在尝试查找用于在Red Hat Enterprise Linux Server 6.5中显示已安装内存(RAM)的命令。

我发现以下命令:

cat /proc/meminfo | grep MemTotal
Run Code Online (Sandbox Code Playgroud)

但是看起来MemTotal值不是实际的RAM值。我想知道系统的实际RAM(类似于Windows中的Installed memory(RAM))。

谢谢你的帮助。

linux bash shell redhat

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

划掉导入的Java包

在我的Java程序中,我已经在一个类中导入了一些Java包。但在那里有1或2个包装被划掉。

为什么会这样?如何解决这种交叉使之交叉?

java eclipse import deprecated

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

当我尝试存储字节数组时,为什么会出现java.lang.NullPointerException?

当我尝试存储字节数组时,为什么会出现java.lang.NullPointerException?你能解释一下为什么它不能这样工作吗?没有NullPointerException,我怎样才能做得更好?

Exception in thread "Thread-3" java.lang.NullPointerException
    at test.Screenblocks_Data.set_Image(Screenblocks_Data.java:13)
    at desktop_share_client.ScreenBlocks.run(ScreenBlocks.java:120)
Run Code Online (Sandbox Code Playgroud)
public class Screenblocks_Data implements java.io.Serializable {
    public int Screenblocks_Counter = 0;
    public int[][] positions = new int[200][2];
    public Jpeg[] sub_images = new Jpeg[200];

    public Screenblocks_Data() {

    }

    public void set_Image(byte[] temp_image) {
        sub_images[Screenblocks_Counter].set_sub_image(temp_image);
    }

    public byte[] get_Image(int position) {
        return sub_images[Screenblocks_Counter].sub_image;
    }
}
Run Code Online (Sandbox Code Playgroud)
public class Jpeg {

    public byte[] sub_image = null;

    public void set_sub_image(byte[] temp_image) {

        sub_image = new byte[temp_image.length];

        sub_image = temp_image;
    }
}
Run Code Online (Sandbox Code Playgroud)

java arrays

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