我们最近遇到了一个Java服务器应用程序的问题,其中应用程序抛出了未捕获的错误,因为Error是Throwable的一个单独的子类,我们只捕获异常.
我们通过捕获Throwables而不是Exceptions解决了当前的问题,但是这让我想到为什么你想要捕获Exceptions而不是Throwables,因为你会错过错误.
所以,当你能捕获Throwables时,你为什么要捕捉异常呢?
最初从映像运行Docker容器时,可以指定选项:
--restart="always"
Run Code Online (Sandbox Code Playgroud)
这可确保Docker守护程序始终重新启动容器,如果由于某种原因它停止.所以你可以像这样运行一个容器:
docker run --restart="always" <IMAGE>
Run Code Online (Sandbox Code Playgroud)
您还可以通过指定其容器ID来重新启动现有的Docker容器,即:
docker start <CONTAINER ID>
Run Code Online (Sandbox Code Playgroud)
但是,我无法确定是否可以更改现有容器(最初未使用该--restart="always
选项运行),以将其转换为将来始终重新启动.
目前我能想到的唯一方法是将容器保存为新映像,然后将该映像作为带有该--restart="always"
选项的新容器运行.这实际上是这样做的正确方法吗?
编辑:我最初可能没有说清楚的是,我正在考虑容器自最初运行以来发生变化的情况,需要持续存在.因此,仅从原始图像运行新容器是不够的.
我有一个XPath查询正在做我想要的,即选择'surname'和'given-names'与给定谓词的联合(它实际上是或者我需要的,但联合工作正常):
/header/authors/surname[./text() and @id='1']
|
/header/authors/given-names[./text() and @id='1']
Run Code Online (Sandbox Code Playgroud)
然而,这对我来说似乎过于冗长,我觉得应该可以做一些更简洁的事情,例如:
/header/authors/(surname|given-names)[./text() and @id='1']
Run Code Online (Sandbox Code Playgroud)
...但此版本无效XPath.
任何人都可以告诉我一个更简洁的方式来编写原始的XPath表达式,它不需要两次写入完整路径吗?
谢谢
理查德
近年来,我一直致力于使用Spring MVC框架编写用Java编写的Web应用程序.这些项目在JUnit和Selenium上有很好的测试覆盖率.但是,有两次Spring配置中的错误已通过测试过程.
在一种情况下,对controllerContext.xml中的父bean进行了更改,这也需要更改两个继承bean.但是所需的更改只针对两个继承bean中的一个.该错误仅在Web应用程序的一个小但关键的部分中可见.后来扩展了Selenium UA测试以直接在Web App中进行检查.在部署之前,但是当错误进入实时环境时已经完成了损坏.
在另一种情况下,设置数据格式所需的属性未通过applicationContext.xml正确注入.唯一可见的错误是从Web应用程序下载的生成报告的日期格式.难以用Selenium进行测试.
使用Spring MVC的一个优点是能够在JUnit测试中设置注入的对象(即模拟对象),但是这并不能告诉您在应用程序在现场运行时实际将要注入的内容环境.
答案可能是集成测试,但过去设置和运行集成测试已经证明是困难的...但这是另一个问题......
所以,我真的很想学习人们如何尝试捕捉Spring配置文件中引入的可能错误.
所以我的问题是:
测试Spring配置中的错误的最佳方法是什么?