我有一个在Elastic Beanstalk上运行的worker,它通过队列中的消息接受POST请求.这些消息会触发长时间操作,这需要几分钟(有时甚至是几小时),并且此操作仅执行一次至关重要.
问题是,当我登录到工作台控制台查看进程时,消息似乎每隔一分钟一遍又一遍地传递(通过接收请求触发的方法每分钟调用一次).我怎样才能摆脱这种行为?
我阅读了文档,并将可见超时时间设置为服务队列和死信队列的最大值(12小时).然而,这确实没有任何帮助.
当我发送消息时,它显示为"在飞行中"(这是一种假定的行为,我认为,因为队列等待接收删除请求或某种答案,仅在长时间操作结束时提供) .
有人会暗示我在这种情况下发生了什么吗?我可能错过了配置中的一些重要细节......
编辑:只要它在"飞行中",似乎每分钟都会重新传递消息.完成此过程后,消息最终消失.
我有一个 spring-boot 应用程序,它通过控制器公开一个 REST 接口。这是我的控制器的一个例子:
@RestController
public class Controller {
@Autowired
private Processor processor;
@RequestMapping("/magic")
public void handleRequest() {
// process the POST request
processor.process();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试为这个类编写单元测试,我必须模拟处理器(因为处理需要很长时间,我试图在测试控制器行为期间避免这一步)。请注意,为了这个问题,提供的示例已简化。
我正在尝试使用 mockito 框架来完成这项任务:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = App.class)
@WebAppConfiguration
@ActiveProfiles("test")
public class ControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
Processor processor = Mockito.mock(Processor.class);
ReflectionTestUtils.setField(Controller.class, "processor", processor);
}
@Test
public void testControllerEmptyBody() throws Exception {
this.mockMvc.perform(post("/magic")).andExpect(status().isOk());
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这失败了
java.lang.IllegalArgumentException: Could not …Run Code Online (Sandbox Code Playgroud) 我有一个简单的问题。我有一个 REACTjs 应用程序,它在启动时向 API 发出一些请求。这些请求通常只执行一次,但有时,用户可能需要手动刷新应用程序。
当执行ctrl+F5(或通过浏览器刷新页面)时,它工作正常。
我尝试在我的应用程序中添加一个具有相同功能的按钮:
<button value="Refresh Page" onClick="window.location.reload(true)">Refresh</button>
Run Code Online (Sandbox Code Playgroud)
但它只执行两个请求:0.junk.js和0.junk.js.map都返回 304 状态。
有没有办法实现与使用浏览器刷新相同的行为?
我有一个代表表单提交的类:
Class Form {
// @String(message = "Invalid type")
private String name;
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找javax.validation放在name字段顶部的注释,这将验证该字段确实是字符串类型,如果不是,则显示适当的错误消息,但我找不到。有什么办法呢?
澄清:
困扰我的是有人发送以下有效载荷之一的情况,但我仍然没有看到解决方案:
{
name: true
}
Run Code Online (Sandbox Code Playgroud)
或者
{
name: 1234
}
Run Code Online (Sandbox Code Playgroud) 是否有一些简单的方法如何转换Map<Key, List<Value>>为Set<Value>获取一组嵌套在地图中的所有唯一元素?我知道这应该可以使用,reduce或者flatmap我正在努力寻找正确的组合。
我知道我可以使用 for 循环执行此操作,但我想使用流执行此操作。
我最近在1.4到1.5.1的应用程序中更新了Spring Boot的版本,我注意到在部署到AWS上的Elastic Beanstalk后,healtch检查开始失败.
在我们的AWS环境中,所有通信都通过HTTPS进行,包括运行状况,并且它曾经与Spring Boot和Actuator 1.4一起正常工作,但我们开始在第1.5节中的执行器运行状况端点上获得401.
有没有人有同样的问题?不确定此版本中有关此主题的更改,但我没有通过阅读发行说明找到任何解决方案.很高兴得到任何帮助.
java spring-boot amazon-elastic-beanstalk spring-boot-actuator
我对XML验证非常陌生,因此很抱歉基本问题。我有以下文件:
<tincan xmlns="http://projecttincan.com/tincan.xsd">
<activities>
<activity id="TestActivity" type="course">
<name lang="und">MyCourse</name>
<description lang="und"/>
<launch lang="und">start.html</launch>
</activity>
<activity id="p001" type="objective">
<name lang="und">First Page</name>
<description lang="und">First Page</description>
</activity>
</activities>
</tincan>
Run Code Online (Sandbox Code Playgroud)
我正在尝试根据以下架构对其进行验证:http : //projecttincan.com/tincan.xsd(我还尝试从XML中删除该架构并从外部提供该架构)。
我总是收到以下异常: cvc-elt.1: Cannot find the declaration of element 'tincan'
通过查看模式,我看到该tincan元素已在其中定义,并且也存在于我的XML中,因此我无法理解此异常的根源。如果有人可以解释验证的工作原理,我将感到非常高兴。
编辑:我的验证代码:
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = parser.parse(stream);
// create a SchemaFactory capable of understanding WXS schemas
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// load a WXS schema, represented by a Schema instance
Source schemaFile = new StreamSource(getClass().getClassLoader().getResource("tincan.xsd").getFile()); …Run Code Online (Sandbox Code Playgroud) 我有一个使用Google Pub Sub API的Spring Boot应用程序。我需要使用file注入Google凭据和其他属性credentials.json。我将文件放入我的文件中src/main/resources(否则,它将不会将文件放入构建的jar中),如下所示:
spring.cloud.gcp.credentials.location=file:src/main/resources/credentials.json
Run Code Online (Sandbox Code Playgroud)
但是,当我构建jar时,此文件将放置在根目录中,并且该路径不再有效。因此,我能够从Eclipse运行我的应用程序,因为到那时,该文件仍位于我的资源目录中,但是构建后我无法将其作为独立的jar运行,因为该路径突然只是file:credentials.json。
有什么简单的方法可以将路径指定为相对路径,以便它既可以在IDE中运行,又可以在运行jar时使用?我可以通过env注入路径。变量,但只有在绝对必要时,我才会这样做。
我有一个带有 Room 数据库的简单 Android 应用程序,我正在尝试@Insert使用 RxJava对查询做出反应,但我无法正确链接调用。
这是我调用插入的视图模型方法:
fun insertTopic(): Single<Long> {
val topic = Topic(null, topicText.value!!, difficulty.value!!, false)
return Single.create<Long> { Observable.just(topicDao.insert(topic)) }
}
Run Code Online (Sandbox Code Playgroud)
这是我的活动中触发保存操作的代码:
disposable.add(RxView.clicks(button_save)
.flatMapSingle {
viewModel.insertTopic()
.subscribeOn(Schedulers.io())
}.observeOn(AndroidSchedulers.mainThread())
.doOnError { Toast.makeText(this, "Error inserting topic", Toast.LENGTH_SHORT).show() }
.subscribe { id ->
// NOT INVOKED
hideKeyboard()
Toast.makeText(this, "Topic inserted. ID: $id", Toast.LENGTH_SHORT).show()
this.finish
})
Run Code Online (Sandbox Code Playgroud)
当我单击按钮时,实体被保存但没有调用任何订阅代码(没有显示吐司)。有人可以向我指出我做错了什么吗?我对 RX java 相当陌生。
这可能是非常基本的问题.我有一个JTextArea,例如:
JTextArea area = new JTextArea();
Run Code Online (Sandbox Code Playgroud)
我有时会在文本区域中插入长文本(例如使用复制粘贴方法) - 此区域用于用户输入.
问题是,文本只插入一个长行而不是调整此组件的大小.有一些简单的方法来解决这个问题吗?
我试图对产生BigDecimal输出的一些方法进行单元测试,但我对变化的precissio很困惑:
assertEquals(BigDecimal.valueOf(20), result);
Run Code Online (Sandbox Code Playgroud)
我最近使用构造函数(new BigDecimal(value)使用valueOf(value))切换了创建BigDecimal值,我的测试正在抱怨:
Expected :20
Actual :20.00
Run Code Online (Sandbox Code Playgroud)
设置BigDecimal.valueOf(20.00)没有用,所以我的问题是,测试这些浮点BigDecimal实例的正确方法是什么?我的大多数测试用例在浮点后都会有零.
java ×8
spring-boot ×4
junit ×2
amazon-sqs ×1
android ×1
android-room ×1
bigdecimal ×1
java-stream ×1
javascript ×1
jtextarea ×1
kotlin ×1
messaging ×1
mockito ×1
reactjs ×1
rx-java2 ×1
spring ×1
swing ×1
testing ×1
unit-testing ×1
validation ×1
xml ×1
xsd ×1