小编Sma*_*ajl的帖子

Amazon AWS,来自SQS队列的消息多次传递

我有一个在Elastic Beanstalk上运行的worker,它通过队列中的消息接受POST请求.这些消息会触发长时间操作,这需要几分钟(有时甚至是几小时),并且此操作仅执行一次至关重要.

问题是,当我登录到工作台控制台查看进程时,消息似乎每隔一分钟一遍又一遍地传递(通过接收请求触发的方法每分钟调用一次).我怎样才能摆脱这种行为?

我阅读了文档,并将可见超时时间设置为服务队列和死信队列的最大值(12小时).然而,这确实没有任何帮助.

当我发送消息时,它显示为"在飞行中"(这是一种假定的行为,我认为,因为队列等待接收删除请求或某种答案,仅在长时间操作结束时提供) .

有人会暗示我在这种情况下发生了什么吗?我可能错过了配置中的一些重要细节......

编辑:只要它在"飞行中",似乎每分钟都会重新传递消息.完成此过程后,消息最终消失.

messaging amazon-sqs amazon-web-services

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

使用 Mockito 在 REST 控制器中模拟类

我有一个 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)

java testing junit mockito spring-boot

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

强制刷新 REACTjs 应用程序,方式与 ctrl+F5 相同

我有一个简单的问题。我有一个 REACTjs 应用程序,它在启动时向 API 发出一些请求。这些请求通常只执行一次,但有时,用户可能需要手动刷新应用程序。

当执行ctrl+F5(或通过浏览器刷新页面)时,它工作正常。

我尝试在我的应用程序中添加一个具有相同功能的按钮:

<button value="Refresh Page" onClick="window.location.reload(true)">Refresh</button>
Run Code Online (Sandbox Code Playgroud)

但它只执行两个请求:0.junk.js0.junk.js.map都返回 304 状态。

有没有办法实现与使用浏览器刷新相同的行为?

javascript reactjs

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

Spring Boot 验证该字段的类型为字符串

我有一个代表表单提交的类:

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)

java spring spring-boot

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

如何使用流将地图值聚合到集合中

是否有一些简单的方法如何转换Map<Key, List<Value>>Set<Value>获取一组嵌套在地图中的所有唯一元素?我知道这应该可以使用,reduce或者flatmap我正在努力寻找正确的组合。

我知道我可以使用 for 循环执行此操作,但我想使用流执行此操作。

java java-stream

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

健康端点在Spring Boot 1.5中无法通过HTTPS工作

我最近在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

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

根据模式验证XML-找不到元素的声明

我对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)

java xml validation xsd

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

来自属性文件中资源的Spring Boot参考文件位置

我有一个使用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注入路径。变量,但只有在绝对必要时,我才会这样做。

java spring-boot

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

使用 RXJava 监听 Room 数据库插入

我有一个带有 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 相当陌生。

android kotlin rx-java2 android-room

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

JTextArea和长文本格式

这可能是非常基本的问题.我有一个JTextArea,例如:

JTextArea area = new JTextArea();
Run Code Online (Sandbox Code Playgroud)

我有时会在文本区域中插入长文本(例如使用复制粘贴方法) - 此区域用于用户输入.

问题是,文本只插入一个长行而不是调整此组件的大小.有一些简单的方法来解决这个问题吗?

java swing jtextarea

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

如何测试BigDecimal值

我试图对产生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 junit unit-testing bigdecimal

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