Spring Boot

Spring Boot最核心的三大注解

一、什么是Spring Boot?

由于功能的迭代,Spring变得越来越复杂。访问https://spring.io/projects,可以看到所有在应用程序中使用的不同功能的Spring项目。如果启动一个新的Spring项目,必须添加构建路径或maven依赖项,配置application server,添加spring配置。因此,启动一个新的Spring项目需要大量的工作,因为必须从头开始做所有事情。Spring Boot是这个问题的解决方案。Spring Boot构建在现有Spring框架之上。使用Spring Boot,可以避免以前必须执行的所有样板代码和配置。因此,Spring Boot帮助开发者更健壮地使用现有的Spring功能,并且只需最少的工作量。

二、Spring Boot的优点是什么?

  1. 减少开发、测试的时间和工作量。
  2. 使用JavaConfig有助于避免使用XML。
  3. 避免大量maven导入和各种版本冲突。
  4. 提供可选的开发方法。
  5. 通过提供默认开发方式进行快速开发。
  6. 不需要单独的Web服务器。这意味着不再需要启动Tomcat、Glassfish或其他任何东西。
  7. 由于没有web.xml文件,所以需要更少的配置。只需添加带@Configuration注释的类,然后可以添加带@Bean注释的方法,Spring将自动加载对象并像往常一样管理它。甚至可以将@Autowired添加到bean方法中,使Spring autowire成为bean所需的依赖项。
  8. 基于环境的配置——使用这些属性,可以将其传递到正在使用的应用程序环境中:- dspring .profile .active={enviorement}。在加载主应用程序属性文件之后,Spring将在(application-{environment}.properties)处加载后续的应用程序属性文件。

三、使用过哪些构建工具来开发Spring应用程序?

Spring Boot应用程序可以使用Maven和Gradle开发。

四、什么是JavaConfig?

Spring JavaConfig是Spring社区的一个产品,它提供了一种纯java方法来配置Spring IoC容器。因此,它有助于避免使用XML配置。使用JavaConfig的优点是:

  1. 面向对象的配置。因为配置在JavaConfig中定义为类,所以用户可以充分利用Java中的面向对象特性。一个配置类可以子类化另一个配置类,覆盖它的@Bean方法,等等。
  2. 减少或消除XML配置。已经证明了基于依赖注入原则的外部化配置的好处。然而,许多开发人员不愿意在XML和Java之间来回切换。JavaConfig为开发人员提供了一种纯java方法来配置Spring容器,这种方法在概念上类似于XML配置。从技术上讲,仅使用 JavaConfig配置类来配置容器是可行的,但是在实践中,许多人发现将JavaConfig与XML混合并匹配是理想的。
  3. 类型安全的重构能力。JavaConfig提供了一种类型安全的配置Spring容器的方法。由于Java 5.0对泛型的支持,现在可以通过类型而不是名称检索bean,不需要进行任何基于类型转换或字符串的查找。

四、不重启服务器,如何在Spring引导时重新加载开发者的更改?

可以通过开发工具来实现。有了这个依赖项,您保存的任何更改都将重新启动嵌入的tomcat。Spring Boot有一个开发人员工具(DevTools)模块,它有助于提高开发人员的工作效率。Java开发者面临的关键挑战之一是将文件更改自动部署到服务器并自动重启服务器。开发者可以在Spring引导时重新加载更改,而不必重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot在发布第一个版本时没有这个特性。这是开发者最需要的特性。DevTools模块完全满足开发人员的需求。此模块将在生产环境中禁用。它还提供了H2-database控制台,以便更好地测试应用程序。使用以下依赖项

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-devtools</artifactId>
 <optional>true</optional>
</dependency>

五、如何将Spring Boot应用程序作为war包部署?

Spring Boot WAR部署

六、什么是Docker?如何将Spring引导应用程序部署到Docker?

将基于Spring的WAR应用程序部署到Docker
将基于Spring的JAR应用程序部署到Docker

七、什么是Spring boot actuator?

Spring boot actuator是Spring boot framework的重要特性之一。Spring boot actuator帮助您访问生产环境中正在运行的应用程序的当前状态,在生产环境中必须检查和监视几个指标。甚至一些外部应用程序也可能使用这些服务来触发对相关人员的警报消息。actuator模块公开一组REST端点,这些端点可以作为HTTP URL直接访问,以检查状态。

八、如何禁用执行器端点安全在Spring启动?

默认情况下,所有敏感的HTTP端点都是安全的,只有具有ACTUATOR角色的用户才能访问它们。安全性是使用标准HttpServletRequest.isUserInRole方法实现的。

我们可以使用-禁用安全性management.security.enabled = false
建议仅当在防火墙后访问ACTUATOR端点时禁用安全性。

九、如何将Spring引导应用程序运行到自定义端口?

要在自定义端口上运行spring引导应用程序,可以在application.properties中指定端口:server.port = 8090

十、什么是ELK堆栈?如何与Spring Boot一起使用?

ELK堆栈由三个开源产品组成——Elasticsearch、Logstash和Kibana from Elastic。

Elasticsearch是一个基于Lucene搜索引擎的NoSQL数据库。

Logstash是一个日志管道工具,它接受来自不同来源的输入,执行不同的转换,并将数据导出到不同的目标。它是一个动态的数据收集管道,具有可扩展的插件生态系统和强大的弹性搜索协同作用

Kibana是一个可视化UI层,工作在Elasticsearch之上。

这三个项目一起用于各种环境中的日志分析。因此Logstash收集和解析日志、弹性搜索索引并存储这些信息,而Kibana提供了一个UI层,提供可操作的可见性。

十一、您有使用Spring Boot编写测试用例吗?

SpringBoot为编写单元测试用例提供了@SpringBootTest

十二、YAML是什么?

YAML是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,YAML文件的结构更加结构化,如果我们希望在配置文件中添加复杂的属性,那么它不会造成太大的混乱。可以看到,YAML具有分层的配置数据。

十三、如何为Spring应用程序实现安全性?

为了实现Spring Boot的安全性,使用Spring - Boot -starter-security依赖项,必须添加安全配置。它只需要很少的代码。Config类必须扩展WebSecurityConfigurerAdapter并覆盖它的方法。

十四、如何集成Spring Boot和ActiveMQ?

为了集成Spring Boot和ActiveMQ,我们使用Spring - Boot -starter- ActiveMQ依赖项,它只需要很少的配置,没有样板代码。

十五、如何集成Spring Boot和Apache Kafka?

为了集成Spring Boot和Apache Kafka,我们使用Spring - Kafka依赖项。

十六、如何使用Spring引导实现分页和排序?

使用Spring Boot实现分页非常简单。使用Spring Data-JPA,这是通过传递可分页的org.springframe .data.domain来实现的。可分页到存储库方法。

十七、什么是Swagger?您是否使用Spring Boot实现了它?

Swagger被广泛用于可视化api,Swagger UI为前端开发人员提供在线沙箱环境。Swagger是一种工具、规范和完整的框架实现,用于生成RESTful Web服务的可视化表示。它允许文档以与服务器相同的速度更新。当通过Swagger正确定义时,使用者可以用最少的实现逻辑理解远程服务并与之交互。因此Swagger消除了调用服务时的猜测。

十八、什么是Spring Profiles?如何使用Spring Boot实现它?

Spring Profiles允许用户根据配置文件(dev, test, prod等)注册bean。因此,当应用程序在开发中运行时,只能加载某些bean,当应用程序在生产中运行时,只能加载某些其他bean。假设我们的需求是Swagger文档只对QA环境启用,对所有其他环境禁用。这可以使用配置文件来完成。Spring Boot使得使用配置文件非常容易。

十九、什么是Spring Boot Batch?如何使用Spring Boot实现它?

Spring Boot Batch提供了处理大量记录所必需的可重用功能,包括日志/跟踪、事务管理、作业处理统计信息、作业重启、作业跳过和资源管理。它还提供了更高级的技术服务和特性,通过优化和分区技术,这些特性将支持极高容量和高性能的批处理作业。无论是简单的还是复杂的,大容量批处理作业都可以以高度可伸缩的方式利用该框架来处理大量信息。

二十、什么是FreeMarker模板?如何使用Spring Boot实现它?

FreeMarker是一个基于java的模板引擎,最初专注于使用MVC软件架构生成动态web页面。使用Freemarker的主要优势是完全分离了表示层和业务层。程序员可以处理应用程序代码,而设计人员可以处理html页面设计。最后,使用freemarker,这些可以组合在一起,给出最终的输出页面。

二十一、如何使用Spring Boot实现异常处理?

Spring提供了一种非常有用的方法,可以使用ControllerAdvice处理异常。我们将实现一个ControlerAdvice类,它将处理控制器类抛出的所有异常。

二十二、什么是缓存?在Spring中使用过缓存框架吗?

缓存是本地内存的一个区域,它保存了频繁访问的数据的副本,否则获取或计算这些数据将非常消耗资源。使用Hazelcast进行缓存。

二十三、是否使用Spring Boot公开了SOAP web服务端点?

是的。使用Spring Boot公开了要使用的web服务。使用契约优先的方法从wsdl生成类。

二十四、如何使用Spring Boot执行数据库操作?

Spring引导教程-Spring Data JPA

二十五、如何使用Spring上传文件?

二十六、如何用Spring Boot实现拦截器?

使用Spring MVC HandlerInterceptor与Spring引导

二十七、如何在Spring Boot下使用schedulers?

二十八、使用过哪些启动器maven依赖项?

使用过不同的starter依赖项,如spring-boot-starter-activemq依赖项、spring-boot-starter-security依赖项、spring-boot-starter-web依赖项。这有助于减少依赖项的数量,并减少版本组合。

二十九、什么是CSRF攻击?如何启用CSRF对其进行保护?

CSRF代表跨站请求伪造。它是一种攻击,迫使最终用户在其当前已经过身份验证的web应用程序上执行不需要的操作。CSRF攻击专门针对状态更改请求,而不是数据窃取,因为攻击者无法看到对伪造请求的响应。

三十、如何使用Spring引导使用表单登录身份验证?

三十一、什么是OAuth2?如何使用Spring Boot实现它?

三十二、GZIP是什么?如何使用Spring Boot实现它?

gzip是一种文件格式,是一种用于文件压缩和解压缩的软件应用程序。

三十三、Spring中使用过集合框架吗?

已将Apache Camel与Spring引导集成。使用Apache Camel Spring启动启动依赖项。

三十四、什么是Apache Freemarker?什么时候使用它而不是JSP?如何与Spring Boot集成?

JSP是为网页量身定做的,Freemarker模板是一种更通用的模板语言——它可以用来生成html、纯文本、电子邮件等。

三十五、你什么时候使用WebSockets?如何使用Spring Boot实现它?

WebSocket是一种计算机通信协议,通过单个TCP连接提供全双工通信通道。

WebSocket是双向的——使用WebSocket客户端或服务器都可以发起发送消息。

WebSocket是全双工的——客户端和服务器之间的通信是相互独立的。

单个TCP连接——初始连接使用HTTP,然后将此连接升级为基于套接字的连接。然后,这个单一连接将用于未来的所有通信

轻- WebSocket消息数据交换比http轻得多。

三十六、什么是AOP?如何与Spring Boot一起使用?

在软件开发过程中,跨越应用程序多个点的功能称为横切关注点。这些横切关注点不同于应用程序的主要业务逻辑。因此,将这些横切关注点从业务逻辑中分离出来是面向方面编程(AOP)的切入点。

三十七、什么是Apache Kafka?如何与Spring Boot集成?

apache Kafka是一个分布式发布-订阅消息传递系统。它是一个可伸缩的、容错的、发布-订阅消息传递系统,使我们能够构建分布式应用程序。Kafka适用于离线和在线的消息消费。

三十八、如何监视所有Spring Boot微服务?

Spring Boot提供了actuator 端点来监控单个微服务的指标。这些端点对于获取关于应用程序的信息非常有帮助,比如应用程序是否启动,它们的组件(如数据库等)是否正常工作。但是,使用actuator 接口的一个主要缺点或困难是,我们必须逐个命中这些接口,以了解应用程序的状态或健康状况。假设微服务涉及50个应用程序,管理员将不得不命中所有50个应用程序的actuator 端点。

三十九、在Spring中使用过Spring Cloud组件吗?

使用过Netflix Eureka等Spring Cloud组件进行服务注册,Ribbon用于负载平衡。

四十、如何将Spring Boot应用程序部署到Pivotal Cloud Foundry(PCF)?

Deploying Spring Boot Application to PCF

四十一、@SpringBootApplication

这个注解是 Spring Boot 项目的基石,创建 Spring Boot 项目之后会默认在主类加上。虽然开发者一般不会主动去使用它。

@SpringBootApplication
public class SpringSecurityJwtGuideApplication {
      public static void main(java.lang.String[] args) {
        SpringApplication.run(MchopinApplication.class, args);
    }
}

@SpringBootApplication可以看作是@Configuration@ComponentScan@EnableAutoConfiguration注解的集合。

package org.springframework.boot.autoconfigure;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
   ......
}
package org.springframework.boot;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

}

根据 SpringBoot 官网,这三个注解的作用分别是:
1️⃣@Configuration:允许在 Spring 上下文中注册额外的 bean 或导入其他配置类
2️⃣@ComponentScan: 扫描被@Component (@Service,@Controller)注解的 bean,注解默认会扫描该类所在的包下所有的类。
3️⃣@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制

附、简化配置

它使用 “习惯优于配置” (项目中存在大量的配置,此外还内置一个习惯性的配置)的理念让项目快速运行起来。它并不是什么新的框架,而是默认配置了很多框架的使用方式,就像 Maven 整合了所有的 jar 包一样,Spring Boot 整合了所有框架。

1️⃣普通配置:server.port=8080
2️⃣自定义属性配置:类中@Value("${property}")读取
3️⃣配置变量的引用

xxp.name=ncc
xxp.hello=HelloWorld! ${xxp.name}

4️⃣随机值配置

  • 随机数:xxp.number=${random.int}
  • 随机端口:server.port=${random.int[1024,9999]}

5️⃣yml配置文件:一种配置文件语言。树状结构。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350