如何在Java中以字符串格式获取时间戳?"yyyy.MM.dd.HH.mm.ss"
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的,但Timestamp()需要一个参数......
我正在尝试为使用Spring Boot 2.x开发的Kafka监听器编写单元测试.作为一个单元测试,我不想启动一个完整的Kafka服务器作为Zookeeper的一个实例.所以,我决定使用Spring Embedded Kafka.
我的听众的定义非常基本.
@Component
public class Listener {
private final CountDownLatch latch;
@Autowired
public Listener(CountDownLatch latch) {
this.latch = latch;
}
@KafkaListener(topics = "sample-topic")
public void listen(String message) {
latch.countDown();
}
}
Run Code Online (Sandbox Code Playgroud)
此外,latch在接收消息后验证计数器等于零的测试非常容易.
@RunWith(SpringRunner.class)
@SpringBootTest
@DirtiesContext
@EmbeddedKafka(topics = { "sample-topic" })
@TestPropertySource(properties = { "spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}" })
public class ListenerTest {
@Autowired
private KafkaEmbedded embeddedKafka;
@Autowired
private CountDownLatch latch;
private KafkaTemplate<Integer, String> producer;
@Before
public void setUp() {
this.producer = buildKafkaTemplate();
this.producer.setDefaultTopic("sample-topic");
}
private KafkaTemplate<Integer, String> …Run Code Online (Sandbox Code Playgroud) Java 9即将推出,更多功能将添加到Java接口,如私有方法.default接口中的方法是在Java 8中添加的,主要是为了支持在集合中使用lambda,而不会破坏与该语言的早期版本的复古兼容性.
在Scala中,traits中的方法非常有用.但是,Scala使用不同的方法处理traits而不是Java default.考虑多重继承解决方案或使用traits作为mixin.
除了以上使用,哪些是使用default方法的真实场景值得?这几年是否出现了一些使用它们的模式?使用这种方法可以解决哪些问题?
我用Google搜索了一下,找到了上述两种远程处理策略之间差异的一个很好的解释,即透明的远程处理和位置透明度.
据我所知,前者是基地Java RMI,后者是基地Akka.我非常清楚Java RMI,我理解透明的远程处理意味着什么,但是怎么样Akka?
非常感谢所有回复.
我正在接近Haskell编程语言,我有Scala和Java开发人员的背景.
我正在阅读类型构造函数背后的理论,但我无法理解它们是否可以被视为类型.我的意思是,在Scala中,您使用关键字class或trait定义类型构造函数.想想List[T],或者Option[T].同样在Haskell中,您使用相同的关键字data,用于定义新类型.
那么类型构造函数也是类型吗?
我试图<KStream>.process()用a TimeWindows.of("name", 30000)来批量处理一些KTable值并发送它们.似乎30秒超过了消费者超时间隔,之后Kafka认为该消费者已经解散并释放分区.
我已经尝试提高轮询频率和提交间隔以避免这种情况:
config.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, "5000");
config.put(StreamsConfig.POLL_MS_CONFIG, "5000");
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些错误仍在发生:
(很多这些)
ERROR o.a.k.s.p.internals.RecordCollector - Error sending record to topic kafka_test1-write_aggregate2-changelog
org.apache.kafka.common.errors.TimeoutException: Batch containing 1 record(s) expired due to timeout while requesting metadata from brokers for kafka_test1-write_aggregate2-changelog-0
Run Code Online (Sandbox Code Playgroud)
其次是:
INFO o.a.k.c.c.i.AbstractCoordinator - Marking the coordinator 12.34.56.7:9092 (id: 2147483547 rack: null) dead for group kafka_test1
WARN o.a.k.s.p.internals.StreamThread - Failed to commit StreamTask #0_0 in thread [StreamThread-1]:
org.apache.kafka.clients.consumer.CommitFailedException: Commit cannot be completed since the group has …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用Akka的应用程序,其中Actors旨在避免请求 - 响应模式.使用Extra或Cameo模式可以将actor之间的交互建模为消息的"流".
下图总结了这些演员的架构.
Cameo模式用于处理来自SK演员的响应.
现在,假设我要保证在-至少一次的语义SF和SK演员.我怎样才能做到这一点?使用Akka持久性实现ato语义需要在这些actor之间实现请求 - 响应模式.
如何确保使用Cameo处理响应的actor之间至少有一次语义?
非常感谢
我正在使用Spring Boot 1.5,我有一个异步执行的控制器,返回一个CompletableFuture<User>.
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private final UserService service;
@GetMapping("/{id}/address")
public CompletableFuture<Address> getAddress(@PathVariable String id) {
return service.findById(id).thenApply(User::getAddress);
}
}
Run Code Online (Sandbox Code Playgroud)
该方法UserService.findById可以抛出一个UserNotFoundException.所以,我开发了专门的控制器建议.
@ControllerAdvice(assignableTypes = UserController .class)
public class UserExceptionAdvice {
@ExceptionHandler(UserNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
@ResponseBody
public String handleUserNotFoundException(UserNotFoundException ex) {
return ex.getMessage();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,在向控制器发出未知用户请求的情况下,测试不会返回HTTP 500状态而不是404状态.
这是怎么回事?
当我查看一些代码时,我遇到了这个代码片段.
List<User> users = /* Some code that initializes the list */;
users.stream()
.filter(user -> user.getAddress().isPresent())
.map(/* Some code */)
// And so on...
Run Code Online (Sandbox Code Playgroud)
方法的调用user.getAddress()返回一个Optional<Address>.遵循着名的德米特法则(LoD),上面的代码并不干净.但是,我无法弄清楚如何重构它以使其更清洁.
第一次尝试可能是向User类中添加一个方法hasAddress(),但是这种方法克服了拥有Optional<Address>IMO 的需要.
我该如何重构上面的代码?在这种情况下,是否值得满足LoD?
编辑:我错过了在map方法中指定我不想返回地址.
我有一些使用Java 8功能编写的代码,这意味着流和lambdas.现在,我必须在使用Java 7的项目中重用这些代码.是否有可能使用IntelliJ自动重构代码?
例如,我必须将一些看起来如下的代码重构为一个简单的for/ while循环.
Arrays.stream(values)
.distinct()
.limit(2)
.count();
Run Code Online (Sandbox Code Playgroud) java ×6
java-8 ×3
akka ×2
apache-kafka ×2
refactoring ×2
scala ×2
spring-boot ×2
date ×1
datetime ×1
haskell ×1
interface ×1
java-7 ×1
java-9 ×1
optional ×1
remoting ×1
rmi ×1
spring ×1
spring-kafka ×1
timestamp ×1
type-theory ×1
types ×1