爱吃鱼饵

 

使用SpringBoot

使用SpringBoot

1.构建系统

依赖项管理:Springboot 的每个版本都提供了它所支持的经过精心策划的依赖项列表。

在Maven中使用SPringBoot,

SpringBoot中的starter表格:Using Spring Boot

2.构建你的代码

使用默认包

当一个类不包含一个包声明时,它被认为是在 “默认包” 中。我们建议您遵循 Java 推荐的包命名约定,并使用反向域名 (例com.example.project).

定位主要应用程序类

建议您将主应用程序类定位在根包中,位于其他类之上。@SpringBootApplication注释通常放在您的主类上,它隐式地为某些项定义一个基本的 “搜索包”。

如果你不想使用@SpringBootApplication,@EnableAutoConfiguration@ComponentScan导入的注释定义了同样的行为,可以使用这些替代。

3.配置类

Spring Boot 支持基于 java 的配置。虽然可以将 SpringApplication 与 XML 源一起使用,但是我们通常建议您的主要源是一个 @configuration 类

导入额外的配置类

您不必将所有@Configuration放在一个类中。可以使用 @import 注释导入其他配置类。或者,您可以使用 @ComponentScan自动拾取所有 Spring 组件,包括 @Configuration类。

导入 XML 配置

如果您必须使用基于 XML 的配置,我们建议您仍然从@Configuration类开始。然后可以使用 @ImportResource注释来加载 XML 配置文件.

4.自动配置

Spring Boot 自动配置尝试根据添加的 jar 依赖项自动配置 Spring 应用程序。例如,如果 HSQLDB 位于类路径上,而您没有手动配置任何数据库连接 Bean,那么 Spring Boot 将自动配置一个内存数据库。

您需要通过向@Configuration类中添加 @EnableAutoConfiguration@SpringBootApplication注释来选择自动配置。

逐渐取代自动配置

自动配置是非侵入性的。在任何时候,您都可以开始定义自己的配置,以替换自动配置的特定部分。例如,如果您添加自己的 DataSource bean,则默认的嵌入式数据库支持将退回。

如果您需要了解当前应用的自动配置是什么,以及为什么,那么可以使用 -- debug 开关启动应用程序。这样做可以为选择的核心日志记录器启用调试日志,并将条件报告记录到控制台。

禁用特定的自动配置类

如果你发现你不想要的特定的自动配置类被应用,你可以使用 @SpringBootApplication的 exclude 属性来禁用它们:

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
public class MyApplication {
}

如果类不在类路径上,则可以使用注释的 excludeName属性并指定完全限定名。如果您更喜欢使用 @excludeName而不是 @SpringBootApplication,那么 exclude 和 excludeName也是可用的。最后,还可以使用 spring.autoconfigure.exclude 属性控制要排除的自动配置类列表。

可以在注释级别和通过使用属性定义排除.

5.Spring Beans和依赖注入

您可以自由地使用任何标准 Spring Framework 技术来定义 bean 及其注入的依赖项。我们经常发现,使用 @ComponentScan(查找 bean) 和 @Autowired(执行构造函数注入) 工作得很好。

如果按照上面的建议构造代码 (将应用程序类定位在根包中) ,则可以添加 @ComponentScan,而不需要任何参数。您的所有应用程序组件 (@Component、@Service、@Repository、@Controller等) 都自动注册为 Spring Beans。

注入方式

  • @Autowired

    @Autowired
        public DatabaseAccountService(RiskAssessor riskAssessor) {
            this.riskAssessor = riskAssessor;
        }
    
  • 使用构造函数注入

    @Service
    public class DatabaseAccountService implements AccountService {
    	// final关键字表示其后不能更改
        private final RiskAssessor riskAssessor;
    
        public DatabaseAccountService(RiskAssessor riskAssessor) {
            this.riskAssessor = riskAssessor;
        }
    
        // ...
    
    }
    

6、使用 @SpringBootApplication 注释

许多 Spring Boot 开发者喜欢他们的应用程序使用自动配置,组件扫描,并能够定义额外的配置在他们的 “应用程序类”。一个 @SpringBootApplication注释可以用来启用这三个特性

  1. @EnableAutoConfiguration: 启用 Spring Boot 的自动配置机制;
  2. @ComponentScan: 在应用程序所在的包上启用 @Component 扫描(参见最佳实践)
  3. @Configuration: 允许在上下文中注册额外的 Bean 或者导入额外的配置类
package com.example.myapplication;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

这些特性都不是强制性的,您可以选择用它所支持的任何特性替换这个单独的注释。例如,您可能不希望在应用程序中使用组件扫描或配置属性扫描.

7. 运行你的程序

将应用程序打包为 jar 并使用嵌入式 HTTP 服务器的最大优点之一是,您可以像运行其他应用程序一样运行应用程序。此示例应用于调试 Spring Boot 应用程序。您不需要任何特殊的 IDE 插件或扩展。

在ide上运行

您可以将 Spring Boot 应用程序作为 Java 应用程序从 IDE 中运行。

如果不能直接将项目导入 IDE,则可以使用构建插件生成 IDE 元数据。Maven 包括 Eclipse 和 IDEA 的插件。为各种 ide 提供插件。

作为打包应用程序运行

如果你使用 Spring Boot Maven 或 Gradle 插件创建一个可执行 jar,你可以使用 java-jar 运行你的应用程序,

java -jar target/myapplication-0.0.1-SNAPSHOT.jar

使用 Maven 插件

pring Boot Maven 插件包含一个运行目标,可用于快速编译和运行应用程序。应用程序以分解形式运行,就像在 IDE 中那样。下面的例子展示了一个典型的 Maven 命令来运行 Spring Boot 应用程序:

mvn spring-boot:run

热交换

Spring-boot-devtools 模块还包括对快速应用程序重启的支持。请参阅本章后面的开发工具部分和热交换 “How-to” 以获得详细信息

8. 开发工具

Spring Boot 包括一组额外的工具,可以使应用程序开发体验更加愉快。Spring-boot-devtools 模块可以包含在任何项目中,以提供额外的开发时特性。要包含 devtools 支持,在你的构建中添加模块依赖项:

maven:

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

属性默认值

Spring Boot 支持的一些库使用缓存来提高性能。例如,模板引擎缓存已编译的模板,以避免重复解析模板文件。此外,springmvc 还可以在服务静态资源时向响应添加 HTTP 缓存头。

尽管缓存在生产环境中非常有益,但是在开发过程中,它可能会适得其反,使您无法看到刚刚在应用程序中所做的更改。因此,spring-boot-devtools 默认情况下禁用缓存选项。

缓存选项通常由 application.properties 文件中的设置来配置。例如,Thymeleaf 提供了 spring.thymeleaf.cache 属性。Spring-boot-devtools 模块不需要手动设置这些属性,而是自动应用合理的开发时配置。

因为在开发 Spring MVC 和 Spring WebFlux 应用程序时,您需要更多关于 web 请求的信息,开发工具将为 web 日志组启用 DEBUG 日志记录。这将向您提供有关传入请求、处理请求的处理程序、响应结果等信息。如果希望记录所有请求详细信息 (包括潜在的敏感信息) ,可以打开 spring.mvc.log-request-details 或 spring.codec.log-request-details 配置属性。

自动重启

使用 spring-boot-devtools 的应用程序在类路径上的文件发生更改时自动重新启动。在 IDE 中工作时,这可能是一个有用的特性,因为它为代码更改提供了一个非常快速的反馈循环。默认情况下,对类路径中指向目录的任何条目进行监视,以查看是否发生了更改。请注意,某些资源 (如静态资产和视图模板) 不需要重新启动应用程序。

触发重启

当 DevTools 监视类路径资源时,触发重新启动的唯一方法是更新类路径。更新类路径的方式取决于您使用的 IDE:

  • 在 IntelliJ IDEA 中,构建项目 (Build + → + Build Project) 具有同样的效果。
  • 如果使用构建插件,为 Maven 运行 mvn 编译或为 Gradle 运行 Gradle 构建将触发重启。
Restart vs Reload

Spring Boot 提供的重新启动技术使用了两个类加载器。不更改的类 (例如,那些来自第三方 jar 的类) 被装载到基本类加载器中。您正在积极开发的类装载到重新启动的类加载器中。当应用程序重新启动时,重新启动的类加载器将被丢弃,并创建一个新的类加载器。这种方法意味着应用程序重新启动通常比 “冷启动” 快得多,因为基本类加载器已经可用并且已经填充了。

状态评估中的日志变化

默认情况下,每次应用程序重新启动时,都会记录一个显示条件评估增量的报告。该报告显示了在您进行更改 (如添加或删除 bean 和设置配置属性) 时对应用程序的自动配置的更改。

若要禁用报表的日志记录,请设置以下属性:

spring.devtools.restart.log-condition-evaluation-delta=false

不包括资源

某些资源在更改时不一定需要触发重新启动。例如,Thymeleaf 模板可以就地编辑。默认情况下,更改 / META-INF/maven、/META-INF/resources、/resources、/static、/public 或 /templates 中的资源不会触发重新启动,但会触发实时重新加载。如果希望自定义这些排除项,可以使用 spring.devtools.restart.exclude 属性。

其他内容详见

9.打包生产应用程序

可执行的jar包可以用于生产部署,因为它们是自包含的,所以也非常适合基于云的部署。

10.接下来要读什么

现在您应该了解如何使用 Spring Boot 以及应该遵循的一些最佳实践。您现在可以深入了解特定的 Spring Boot(Spring Boot features ) 特性,或者您可以跳过前面的内容,阅读 Spring Boot 的 “生产就绪” 方面。

posted on 2021-06-06 15:56  爱吃鱼饵  阅读(52)  评论(0编辑  收藏  举报

导航