小编Art*_*nko的帖子

弹簧.使用java配置解决循环依赖关系,而不使用@Autowired

我有循环依赖和java配置.虽然使用xml配置解析它非常容易,但我无法使用没有@Autowired的java配置解析它.豆子:

public class A {
    private B b;

    public B getB() {
        return b;
    }

    public void setB(B b) {
        this.b = b;
    }
}

public class B {
    private A a;

    public A getA() {
        return a;
    }

    public void setA(A a) {
        this.a = a;
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过这个(我已经读过,使用@Bean注释Spring每次引用bean时都不会调用方法,但在这种情况下它实际上一直被调用):

@Configuration
public class Config {
    @Bean
    public A a() {
        A a = new A();
        a.setB(b());
        return a;
    }

    @Bean
    public B b() {
        B b = new B();
        b.setA(a()); …
Run Code Online (Sandbox Code Playgroud)

java spring dependency-injection

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

如何从多个微服务中过滤和排序数据?

我们有微服务,可以处理不同但相关的数据.例如,广告及其统计信息.我们希望能够为UI过滤,排序和聚合这些相关数据(而不仅仅是为了它).例如,我们希望向用户展示其文字中包含"car"且点击次数超过100次的广告.

挑战:

  • 可能有很多数据.一些用户在过滤后有数百万行
  • 服务没有所有数据.例如,对于没有统计信息的统计服务广告==不存在的广告.它对此类广告一无所知.但是排序和过滤仍然可行(没有统计数据的广告应被视为没有零点击的广告)

要求:

  • 几秒钟内的最终一致性是可以的
  • 数据丢失是不可接受的
  • 对于拥有数百万行的大客户,可以进行5到10秒的过滤和分类

我们可以想到的解决方案:

  • 从所有服务加载查询所需的所有数据,并在内存中对其进行筛选和排序.
  • 将服务更新推送到Elasticsearch(或类似的东西).弹性处理查询并返回随后从服务加载的所需实体的ID.
  • 拥有一切的所有服务的一个大数据库

我们应该注意什么?还有其他方法可以解决我们的问题吗?

architecture microservices

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

杰克逊.将缺少的属性反序列化为空可选

假设我有这样一个类:

public static class Test {

        private Optional<String> something;

        public Optional<String> getSomething() {
            return something;
        }

        public void setSomething(Optional<String> something) {
            this.something = something;
        }

    }
Run Code Online (Sandbox Code Playgroud)

如果我反序列化这个JSON,我得到一个空的可选:

{"something":null}
Run Code Online (Sandbox Code Playgroud)

但是如果缺少属性(在这种情况下只是空JSON),我得到null而不是Optional.我当然可以自己初始化字段,但我认为最好有一个null和缺少属性的机制.那么有没有办法让jackson反序列化缺少的属性为空可选?

java json jackson java-8

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

jsp标记中的动态属性

我想要一个带有动态属性的标签,比如简单的html标签,例如:

<tags:superTag dynamicAttribute1="value" someOtherAttribute="valueOfSomeOther"/>
Run Code Online (Sandbox Code Playgroud)

在我的标签实现中我希望有这样的东西:

public class DynamicAttributesTag {

    private Map<String,String> dynamicAttributes;

    public Map<String, String> getDynamicAttributes() {
        return dynamicAttributes;
    }

    public void setDynamicAttributes(Map<String, String> dynamicAttributes) {
        this.dynamicAttributes = dynamicAttributes;
    }

    @Override
    protected int doTag() throws Exception {
        for (Map.Entry<String, String> dynamicAttribute : dynamicAttributes.entrySet()) {
            // do something
        }
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想指出这些动态属性将由jsp中的手写入,而不是像Map一样传递${someMap}.有没有办法实现这个目标?

java jsp

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

Scala案例类私有构造函数不是私有的

今天我遇到了一个case类构造函数的奇怪问题.我想让一个构造函数私有,似乎它不是问题.所以我在我的一个项目中尝试过它并且有效.但在另一个项目中,我可以调用私有构造函数并进行编译.我认为这是我的ide的东西,所以我创建了一个独立的类并用scalac编译它.它编译.这是代码:

package com.test

object Main {

  def main(args: Array[String]) {
    val bar = Bar("12345")
//    bar.doStuff()
    println(bar)
  }
}

case class Bar private(foo: String){
  private def doStuff():Unit = println("stuff")
}
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我取消注释bar.doStuff()它将无法编译.所以我假设在这种情况下私有工作,但不知何故不适用于构造函数.我究竟做错了什么?Scalac是2.11.8

scala

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

如何在扩展共同特性的对象的Hlist上进行映射?

我有一个特征和扩展它的对象。

trait Common[K] {
  def name: String
  def encode(k: K): String = name + k.toString
}

object A extends Common[Int] {
  override def name: String = "a"
}

object B extends Common[Int] {
  override def name: String = "b"
}

object C extends Common[Int] {
  override def name: String = "c"
}
Run Code Online (Sandbox Code Playgroud)

我想创建此对象的列表并在其上映射:

val hl = A :: B :: C :: HNil
val result: List[Int => String] = hl.map(EncodePoly).toList
Run Code Online (Sandbox Code Playgroud)

和实现Poly功能的不同尝试:

object EncodePoly extends Poly1 {
  implicit def indCase[K]: Case.Aux[Common[K], …
Run Code Online (Sandbox Code Playgroud)

scala shapeless

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

为什么在 then 中使用异步块会使我的流取消固定?

我是 Rust 新手,如果我使用的术语不正确,我很抱歉。也许我对问题的用词选择不正确。

我正在玩流,我需要在流元素之间有一些延迟。所以我写了这个:

use futures::stream;
use futures::StreamExt;
use tokio::time;

#[tokio::main]
async fn main() {
    let mut stream = stream::iter(0..1000).then(|x| async move {
        time::delay_for(std::time::Duration::from_millis(500)).await;
        x + 1
    });
    while let Some(x) = stream.next().await {
        println!("{:?}", x)
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到了很多编译错误,但最重要的错误与固定有关。他们来了:

error[E0277]: `std::future::from_generator::GenFuture<[static generator@src/main.rs:7:64: 10:6 x:_ _]>` cannot be unpinned
  --> src/main.rs:11:32
   |
11 |     while let Some(x) = stream.next().await {
   |                                ^^^^ within `futures_util::stream::stream::then::_::__Then<'_, futures_util::stream::iter::Iter<std::ops::Range<{integer}>>, impl core::future::future::Future, [closure@src/main.rs:7:49: 10:6]>`, the trait `std::marker::Unpin` is not implemented for `std::future::from_generator::GenFuture<[static generator@src/main.rs:7:64: 10:6 x:_ _]>` …
Run Code Online (Sandbox Code Playgroud)

rust

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

由于业务异常而导致错误响应的Http状态。语法正确,要求有意义

关于正确的响应状态有很多问题,但是我不明白应该为正常的业务异常使用哪种状态。我已经读过400的定义,在我看来,它似乎是因为通讯错误。

由于某些东西被认为是客户端错误(例如,格式不正确的请求语法,无效的请求消息框架或欺骗性的请求路由),服务器无法或将不会处理请求。

可以说客户想要确认一些操作。他向我发送了我理解并处理的绝对正确,有效的请求。但是确认码不正确。因此,这是一个错误,但是此错误是正常现象,可以预料,我们的沟通是正确的。或另一个例子:客户想从帐户中提取一些钱。再次,请求是正确和有效的,但是帐户没有足够的钱。我现在要使用400,但是在我看来400是因为客户端和服务器之间的通信错误,而不是应用程序逻辑错误。也许对于此类错误有更合适的状态?你用什么?

rest http http-status-codes

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

阿卡.如何在java中模拟子actor?

假设我有一个自己创建Actor的父演员.

public static class Parent extends UntypedActor {

private ActorRef child = context().actorOf(Props.create(Child.class));

    @Override
    public void onReceive(Object message) throws Exception {
        // do some stuff
        child.tell("some stuff", self());
    }
}

public static class Child extends UntypedActor {

    @Override
    public void onReceive(Object message) throws Exception {

    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能嘲笑这个孩子的演员呢?谷歌没有给我任何合理的结果.Akka的文档告诉我,创建演员是一种很好的做法.但是,如果我甚至无法测试我的演员,我怎么能遵循这种做法呢?

java akka

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

兔子MQ。Java客户端。是否可以确认不在收到消息的同一线程上的消息?

我想获取几条消息,处理它们并在此之后将它们全部确认。所以基本上我收到一条消息,把它放在某个队列中并继续接收来自rabbit 的消息。不同的线程将使用接收到的消息监视此队列,并在数量足够时处理它们。我所能找到的关于 ack 的所有示例仅包含在同一线程上处理的一条消息的示例。像这样(来自官方文档):

channel.basicQos(1);

final Consumer consumer = new DefaultConsumer(channel) {
  @Override
  public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
    String message = new String(body, "UTF-8");

    System.out.println(" [x] Received '" + message + "'");
    try {
      doWork(message);
    } finally {
      System.out.println(" [x] Done");
      channel.basicAck(envelope.getDeliveryTag(), false);
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

还有文档说:

通道实例不能在线程之间共享。应用程序应该更喜欢每个线程使用一个通道,而不是跨多个线程共享同一个通道。虽然通道上的某些操作可以安全地并发调用,但有些操作不是,并且会导致在线上不正确的帧交错。

所以我在这里很困惑。如果我正在确认一些消息,同时通道正在接收来自rabbit 的另一条消息,它是否被认为是当时的两个操作?在我看来,是的。

我试图确认来自不同线程的同一通道上的消息,它似乎有效,但文档说我不应该在线程之间共享通道。所以我试图用不同的频道在不同的线程上做确认,但它失败了,因为这个频道的交付标签是未知的。

是否可以确认不在收到消息的同一线程上的消息?

UPD 我想要的代码示例。它在 Scala 中,但我认为它很简单。

 case class AmqpMessage(envelope: Envelope, msgBody: String)

    val queue = new ArrayBlockingQueue[AmqpMessage](100)

    val consumeChannel = connection.createChannel()
    consumeChannel.queueDeclare(queueName, …
Run Code Online (Sandbox Code Playgroud)

java multithreading rabbitmq

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