Spring Boot的类

学习笔记  2020年2月1日

常见类的用途

SpringApplicationBuilder

java.lang.Object
org.springframework.boot.builder.SpringApplicationBuilder

Builder for SpringApplication and ApplicationContext instances with convenient fluent API and context hierarchy support. Simple example of a context hierarchy:
new SpringApplicationBuider(ParentConfig.class).child(ChildConfig.class).run(args);
Another common use case is setting active profiles and default properties to set up the environment for an application:

new SpringApplicationBuilder(Application.class).profiles("server")
    			.properties("transport=local").run(args);

If your needs are simpler, consider using the static convenience methods in SpringApplication instead.

(org.springframework.boot:spring-boot:2.2.4.RELEASE)

阅读更多📰

Spring Boot 消息

Messaging简单笔记  2020年2月1日

消息通信

messaging

最简单的消息机制,从A点到B点,通过某种信道传递消息,可以使一个简单的函数调用,一个socket连接,或者是一个HTTP请求。主要目的是发送端发送消息给接收端消费。

消息通信使用场景

下面列出一些消息通信常见的使用场景:

可靠送达

通常需要一些消息确认机制,如果中间有个Broker,消息生产者要通过一些确认,了解Broker确实收到了消息。同理在消费者段也需要给Broker确认已经收到消息。通常支付、股票交易等系统会使用这种模式。

阅读更多📰

Java线程间通信

生产者与消费者例子  2020年1月30日

生产者与消费者

一种典型的线程间通信的例子是涉及到生产者线程与消费者线程之间的关系。生产者生产数据项被消费者消费,每个被生产出的数据项被存放在共享的变量中。

想象线程以不同的速度运行,消费者可能来不及处理掉生产者之前生产出来并放到共享变量中的数据项。还有可能就是消费者消费速度太快了,未等到生产者产生数据就去取了。

为了克服这类问题,生产者线程必须等到它被通知之前生产的数据项已经被消费掉了才继续生产,而消费者线程必须等到它被通知已经有新的数据项产生了才取消费。下面代码展示如何通过使用 wait()notify() 完整这样的任务。

阅读更多📰

水密舱壁模式

云原生微服务模式系列  2020年1月29日

水密舱壁模式是一类容错的应用程序设计。在水密舱壁模式架构中,应用程序的个组成元素被分隔到隔舱中,这样一旦其中一个出故障,其它部分仍能够运行。这是命名来自船体当中的分隔区域(水密舱壁)。如果一艘船的水密隔舱坏了,那么只是受损部位会进水(其它部分被隔开了),这样能够防止沉船。

水密壁舱

阅读更多📰

Java Streams vs. Reactive Streams

Which, When, How, and Why? 学习记录  2020年1月25日

Java: imperative + object-oriented

Michael Feather:

​ “In OPP we encapsulate the moving parts; in FP we eliminate the moving parts.”

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

//double of even numbers
List<Integer> doubled = new ArrayList<>();

for (int i = 0; i < numbers.size(); i++) {
	if (numbers.get(i) % 2 == 0) {
		doubled.add(numbers.get(i) * 2);
	}
}
System.out.println(doubled);

System.out.println(
	numbers.stream()	
		.filter( e -> e % 2 == 0)
		.map( e -> e * 2)
		.collect(toList()));
阅读更多📰

Java虚方法调用

Java virtual method invocation  2020年1月24日

先回顾基本概念 Overloading and Overriding

主要需要总结的是:

​ When multiple overloaded methods are present, Java looks for the closest match first. It tries to find the following:

  • Exact match by type
  • Matching a superclass type
  • Converting to larger primitive type
  • Converting to an autoboxed type
  • Varargs

For overriding, the overridden method has a few rules:

  • The access modifier must be the same or more accessible.
  • The return type must be the same or a more restrictive type, also known as covariant return types.
  • If any checked exceptions are thrown, only the same exceptions or subclasses of those exceptions are allowed to be thrown.

The method must not be static. (If they are, the method is hidden and not overridden.)

关于 instanceof 操作符,null 的情况,null 不是 Object.

instanceof 不能比较没有任何继承关系的类。 而接口可以,因为接口可以被实现。

然后入正题:

阅读更多📰

Java模块化

学习Java 11模块化特性  2020年1月22日

为了准备 1Z0-816,要学习一下 Java 11 的基础部分。

阅读更多📰

响应式Spring Boot系列教程10

用Spring Profiles切换客户端  2020年1月9日

原文由 Trisha Gee 在当地时间2019年12月16日发布在 INTELLIJ IDEA BLOG

在这一节,我们使用Spring Profiles让应用程序决定使用哪个客户端(使用服务端发送事件的 WebClient,或 RSocket)连接到Kotlin Spring Boot股票价格服务。

现在我们有了一个RSocket客户端,可以让我们连接到我们的RSocket服务器,我们想在我们的JavaFX应用程序中使用它。

阅读更多📰

响应式Spring Boot系列教程9

Java RSocket客户端  2020年1月9日

原文由 Trisha Gee 在2019年12月13日发布在 INTELLIJ IDEA BLOG

在这一节,我们添加一个RSocket客户端,用来连接上一节创建的RSocket服务器。

现在,我们有了一个使用Spring WebClient的端到端应用程序。在上一节中,我们介绍了一个新的RSocket服务器,在这节,我们将看到如何创建一个客户端来连接它

阅读更多📰

响应式Spring Boot系列教程8

Kotlin RSocket服务器  2020年1月9日

原文由 Trisha Gee 在当地时间2019年12月9日发布在 INTELLIJ IDEA BLOG

在这一节,我们将给Kotlin后端添加一个新的服务,这次是通过RSocket,一种为响应式数据流而生的协议,发送价格数据。

目前为止,我们以及成功地创建了一个端到端的应用程序,从Kotlin Spring Boot后端发送价格数据,并且将它们展示到一个JavaFX折线图上。那用的是HTTP的服务器发送事件。 但是,既然我们这个是响应式应用程序,我们可能想要选择一种更加适合流式数据的协议。

在这一步,我们要创建一个通过RSocket协议发送价格数据的服务

阅读更多📰