zoukankan      html  css  js  c++  java
  • 20191110 Spring Boot官方文档学习(3)

    3.使用Spring Boot

    3.1。构建系统

    建议选择MavenGradle作为构建工具

    每个Spring Boot版本都提供了它所支持的依赖关系的精选列表。实际上,您不需要为构建配置中的所有这些依赖项提供版本,因为Spring Boot会为您管理版本。当您升级Spring Boot本身时,这些依赖项也会以一致的方式升级。

    Spring Boot的每个发行版都与Spring Framework的基本版本相关联。强烈建议不要指定其版本。

    3.1.2。Maven

    Maven用户可以从spring-boot-starter-parent项目继承以获得合理的默认值。父项目提供以下功能:

    • Java 1.8是默认的编译器级别。
    • UTF-8源编码。
    • 一个依赖管理部分,从Spring启动依赖性继承POM,管理公共依赖的版本。当在自己的pom中使用这些依赖关系时,可以为这些依赖关系省略<version>标记。
    • 具有执行ID 的repackage目标的repackage执行。
    • 明智的资源过滤。
    • 明智的插件配置(exec插件,Git提交ID和shade)。
    • 针对application.propertiesapplication.yml包括特定于配置文件的文件的明智资源过滤(例如application-dev.propertiesapplication-dev.yml

    由于application.propertiesapplication.yml文件都接受Spring样式的占位符(${...}),因此Maven过滤已更改为使用@..@占位符。(您可以通过设置名为resource.delimiter的Maven属性来覆盖它)。

    可以通过增加version标签指定版本号,也可以通过覆盖properties来指定版本号,但要与spring-boot-dependencies中的一致。例如:

    <properties>
        <lombok.version>1.18.10</lombok.version>
    </properties>
    

    spring-boot-dependencies文件路径为:

    .m2
    epositoryorgspringframeworkootspring-boot-dependencies2.2.0.RELEASEspring-boot-dependencies-2.2.0.RELEASE.pom
    

    不想使用spring-boot-starter-parent,只使用Spring Boot提供的版本管理:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

    Spring Boot提供的Maven插件,可以将项目打包成可执行jar:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    

    Maven命令打包成可执行jar:

    mvn clean install
    

    jar包所在目录:

    target/springboot-0.0.1-SNAPSHOT.jar
    

    3.1.3。Gradle

    SpringBoot的Gradle插件官方文档

    Gradle插件打包成可执行jar:

    tasks->build->bootJar
    

    jar包所在目录:

    build/libs/springboot-0.0.1-SNAPSHOT.jar
    

    3.1.5。Starters

    Starters是一组便捷的依赖项描述符,帮助管理项目依赖。

    所有官方Starters都遵循类似的命名方式

    spring-boot-starter-*
    

    第三方Starters命名为
    thirdpartyproject-spring-boot-starter

    Spring Boot官方提供了很多Starters,具体参考:
    官方Starters

    社区提供的Starters,具体参考:
    社区Starters

    3.2。结构化代码

    不要使用默认包,建议遵循Java程序包命名约定。

    @SpringBootApplication放在主程序上。

    3.3。配置类

    更推荐Java配置,@Configuration

    无需将所有内容都放在一个@Configuration类中。@Import注解可以用于导入额外的配置类。另外,@ComponentScan用来扫描所有Spring组件,包括@Configuration类。

    @ImportResource注解来加载XML配置文件

    3.4。自动配置

    Spring Boot自动配置会尝试根据添加的jar依赖项自动配置Spring应用程序。例如,如果HSQLDB位于类路径上,并且尚未手动配置任何数据库连接bean,那么Spring Boot会自动配置内存数据库。

    通过将@EnableAutoConfiguration@SpringBootApplication注解添加到一个@Configuration类中来使用自动配置。

    只能添加一个@SpringBootApplication@EnableAutoConfiguration注解

    使用--debug开关启动应用程序。这样做可以启用调试日志以供选择核心记录器,并将条件报告记录到控制台。此开关可以在程序参数或配置文件中。开启后,可查看自动配置条件是否满足。
    也可以在启动时指定:

    java -jar myproject-0.0.1-SNAPSHOT.jar --debug
    

    3.4.2。禁用特定的自动配置类

    @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
    

    如果该类不在类路径中,则可以使用excludeName注释的属性,并指定完全限定的名称。还可以使用spring.autoconfigure.exclude属性来控制要排除的自动配置类的列表。

    配置类定义为public,是为了可以被禁用,不推荐直接使用配置类。

    3.5。Spring beans和依赖注入

    可以自由使用任何标准的Spring Framework技术来定义bean及其注入的依赖关系。为使用@ComponentScan(查找您的bean)和使用@Autowired(进行构造函数注入)效果很好。

    @SpringBootApplication自带代码扫描@ComponentScan

    @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) })
    @ConfigurationPropertiesScan
    public @interface SpringBootApplication {
    

    如果bean具有一个构造函数,则可以省略@Autowired

    @Service
    public class DatabaseAccountService implements AccountService {
        private final RiskAssessor riskAssessor;
        
        // @Autowired
        public DatabaseAccountService(RiskAssessor riskAssessor) {
            this.riskAssessor = riskAssessor;
        }
        // ...
    }
    

    3.6。使用@SpringBootApplication注解

    单个@SpringBootApplication注解可用于启用以下功能,即:

    @EnableAutoConfiguration:启用Spring Boot的自动配置机制
    @ComponentScan:启用@Component对应用程序所在包及其子包的扫描
    @ConfigurationPropertiesScan:启用对应用程序所在的软件包的@ConfigurationProperties的扫描
    @Configuration:允许在上下文中注册额外的bean或导入其他配置类

    @SpringBootApplication还提供了别名属性用来指定@EnableAutoConfiguration@ComponentScan的属性。

    3.7。运行您的应用程序

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

    Maven命令运行Spring Boot:

    mvn spring-boot:run
    

    Gradle命令运行Spring Boot:

    gradle bootRun
    

    spring-boot-devtools模块对Spring Boot热部署提供了支持。

    3.8。开发者工具

    spring-boot-devtools模块可以包含在任何项目中,以提供其他开发时功能。

    Maven:

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

    Gradle:

    configurations {
        developmentOnly
        runtimeClasspath {
            extendsFrom developmentOnly
        }
    }
    dependencies {
        developmentOnly("org.springframework.boot:spring-boot-devtools")
    }
    

    运行完全打包的应用程序时,将自动禁用开发人员工具。如果您的应用程序是从java -jar特殊的类加载器启动的,或者从特殊的类加载器启动的,则将其视为“生产应用程序”。如果那对您不适用(即,如果您从容器中运行应用程序),请考虑排除devtools或设置-Dspring.devtools.restart.enabled=false系统属性。

    在Maven中将依赖项标记为可选,或developmentOnly在Gradle中使用自定义配置(如上所示)是一种最佳做法,可防止将devtools过渡地应用到使用项目的其他模块。

    重新打包的存档默认情况下不包含devtools。如果要使用某个远程devtools功能,则需要禁用excludeDevtoolsbuild属性以包含它。Maven和Gradle插件均支持该属性。

    3.8.1。属性默认值

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

    如果你不想被应用属性默认可以设置spring.devtools.add-properties到false你application.properties

    有关devtools应用的属性的完整列表,请参见DevToolsPropertyDefaultsPostProcessor

    3.8.2。自动重启

    自动重启功能,目前来说不太实用,在IDEA实现自动重启可参考:
    自动重启参考

  • 相关阅读:
    Spring MVC+Spring +Hibernate配置事务,但是事务不起作用
    Spring MVC 上传文件
    早安日语1
    Spring MVC学习初篇
    Eclipse中查看JDK源码设置
    Eclipse常见设置及快捷键使用总结(更新中)
    Java中boolean型变量的默认值问题
    [转载]浅析Java中的final关键字
    Eclipse中Outline里各种图标的含义
    [转载]深入理解JAVA的接口和抽象类
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/11831409.html
Copyright © 2011-2022 走看看