◉◡◉ 您好,欢迎到访伊成个人站!

最喜欢Spring Boot的6个功能

本文于1814天之前发表,文中内容可能已经过时。

“最喜欢Spring Boot的6个功能”

前言

使用Spring Boot有一段时间了,从最开始的陌生到上手使用,不得不对Spring Boot给一个大大的赞。

两年前,当我为门铃应用程序构建后端时,我认为试用Docker可能是不错的选择。我很快意识到构建一个部署在Tomcat或Jetty中的传统WAR应用程序的意义不大,我首先看一下Spring Boot提供的内容。

事实证明,很多功能都很棒!

以下是我最喜欢的6个功能,完全适合现代微服务环境。

外部化配置 (Externalised configuration)

这不是一件特别大的事情,但它是一个往往被新人忽视的功能,它可能非常有用。
Spring Boot非常灵活,并且在此版本中有详细记录。举个栗子,你可以选择使用ENVIRONMENT_VARIABLES,–command-line-arguments 或者 -Dsystem.properties,最终会在你的字段中注入,如下所示:

1
2
@Value("${password}")
private String password;

Actuator

为了让你获得生产准备,Spring创建了Actuator。对于真正的生产就绪应用程序,你需要能够在应用程序所服务的任何用户面向界面之外查看应用程序。
其中一项是健康检查,这很容易自己创建。

1
2
3
4
5
6
7
8
9
10
11
public class MyService extends AbstractHealthIndicator {

@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
final String echo = pushNotifier.echo("Abcd");
if (!echo.equals("\"dcbA\"")) {
throw new RuntimeException("Response mismatch. Was " + echo);
}
builder.up();
}
}

builder.up()会告诉你的每一builder.down()件事都很好,同时抛出一个例外,或者会告诉某些事情是不对的。添加.withDetail(“…”)以提供更多信息。最后,可以访问应用程序的运行状况 http: //localhost:8080/health。

此外,配置之类的东西可以通过HTTP端点公开。是的,包含受保护事物的常用词的键将被删除。

Fat jars

Fat jars不是新鲜事物。我在这里提到它们的原因是它们是使用Docker镜像的一个非常好的替代品。

对,你没有看错,这里说的是Docker的替代品吗!!!

它与Docker本身无关,但正如LinkedIn前段时间透露的那样,cgroup会在垃圾收集过程中造成异常长的暂停。此外,有时分发简单文件比替代方案容易得多。谁说共享NFS卷包含所有主机上的所有jar文件?或者一些现代的点对点文件共享是一件坏事吗?

Spring提供了一个很好的Maven插件,可以为你提供一切。如果你使用Spring Initializr,它就会为你设置。

自动配置(Auto configuration)

约定优于配置。

Java是一种静态和老式的语言,你可以点击你的方式(假设你没有像Emacs这样的东西)。只需看一下org.springframework.boot.autoconfigure.SpringBootApplication 注释。除此之外,它还会导入另外两个注释

1
2
3
4
5
@EnableAutoConfiguration
@ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class))
public @interface SpringBootApplication {

}

首先,@ComponentScan只要为它们提供通常的@Component注释,就可以扫描当前包和所有子包中的bean 。

@EnableAutoConfiguration稍微复杂一点,但基本上它会确保Spring扫描所有spring.factories属性文件的类路径,这反过来又指向Spring配置注释类。同样,如果这对你来说太神奇了,为你的应用程序提供一个DEBUG=true环境变量来获取实际情况的报告。

Feign Integration

你可能听说过Netflix。这是一家视频流媒体公司,但事实证明他们也做了很多不错的技术,甚至更好,他们是开源的。其中一个组件是Feign。Feign基本上是一个HTTP客户端。没什么好奇的,我们已经有很多关于Java的东西了,我对图书馆本身并不是很自以为是,但它很好地融入了Spring。所以基本上,你首先org.springframework.cloud:spring-cloud-starter-feign从Maven Central 添加依赖项。但是为什么他们没有添加自动配置是超出我的。无论如何,只需添加一个 EnableFeignClients配置类。HTTP客户端本身看起来像这样:

1
2
3
4
interface Demo{
@RequestLine("GET /repos/{owner}/{repo}/contributors")
List<Contributor> contributors(@Param("owner") String owner, @Param("repo") String repo);
}

Feign Integration是Spring Cloud项目的一部分,它还会为你提供断路器,重试和最终指标。

Git commit id

能够看到你实际运行的应用程序的有哪些版本,如果你添加git-commit-id-pluginmaven插件和Spring Actuator,那么确切的git commit id将通过/info 执行器端点输出。

支付宝打赏 微信打赏