spring boot的每个版本都提供了它所支持的依赖项列表。在使用时,你不须要在你的配置中为这些依赖提供版本,由于spring boot为你管理版本。当你升级spring boot后,这些依赖也会一致更新。java
注意:若是你须要的话,能够本身指定一个版原本覆盖spring boot推荐的版本,但每个spring boot都与一个spring framework联系,最好不要本身制定spring framework的版本mysql
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> </parent>
经过继承启动项,来从spring boot中获取默认值。web
其实,spring boot启动器继承了父项目spring
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.6.RELEASE</version> <relativePath>../../spring-boot-dependencies</relativePath> </parent>
在这个父项目里指定了默认的要使用的其余启动器的版本。sql
所以,在咱们导入依赖时,咱们只须要指定的就是spring boot启动器的版本号,咱们要导入其余启动器能够不用指定版本号就能够安全使用了。数据库
若是咱们须要咱们要使用本身特定版本的包,咱们能够经过下面的方式指定版本,缓存
<properties> <mysql-connector-version>指定的版本</mysql-connector-version> </properties>
而后再须要指定的版本处经过$引用便可。安全
若是咱们的项目须要继承本身的父项目,那么咱们能够经过显示地声明全部的Maven配置。springboot
若是不想使用spring-boot-starter-parent
,咱们仍然能够经过更改其依赖范围scope=import
来使用依赖管理。bash
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Spring Boot包含一个Maven插件,能够将项目打包为可执行jar包。 若是要使用插件,请将其添加到<plugins>
部分,如如下示例所示:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
若是使用Spring Boot starter父项目,则只须要添加插件即可使用。不须要配置它,除非你想更改插件在父类中的默认设置。
启动器是能够包含在应用程序中,极大的方便咱们对依赖的管理。
经过启动器,咱们能够将spring和其余相关技术的依赖所有配置好,而不用像普通项目同样要一个一个去maven中央仓库复制粘贴。
例如:若是你要使用spring和JPA来进行数据库的访问,那么你只要添加spring-boot-starter-data-jpa
依赖,就能够将要使用的jar包和jar依赖的相关jar包所有导入项目。
启动器命名方式:
全部官方的启动器都遵循相似的命名方式。 spring-boot-starter-*
,其中*是特定类型的应用程序。 这种命名结构可让咱们快速找到须要的启动器。
而第三方启动程序一般以项目名称开头。 例如,一个名为thirdpartyproject的第三方启动程序项目一般会被命名为thirdpartyproject-spring-boot-starter。
一个项目最好结构井井有条,下面是一个示例:
com +- example +- myapplication主程序 +- Application.java | +- customer | +- Customer.java | +- CustomerController.java | +- CustomerService.java | +- CustomerRepository.java | +- order +- Order.java +- OrderController.java +- OrderService.java +- OrderRepository.java
主程序中会声明main方法和最基本的@SpringBootApplication
注解
package com.example.myapplication; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Spring Boot支持基于Java的配置。在使用spring时,咱们经过xml文件进行配置。而spring boot咱们经过配置类来进行配置。@Configuration注解的类即是配置类,配置类能够有多个,一般咱们将有main方法的类做为主配置类。
您不须要将全部@Configuration配置类放在一个类中。使用@Import注释能够导入其余配置类。或者使用@ComponentScan来自动获取全部Spring组件,包括@Configuration类。
若是你必定要使用基于XML的配置,仍然建议从配置类开始。
在一个@Configuration标注的配置类上,使用@ImportResource(xml配置文件路径),就能够将xml中的配置的内容导入并生效。
Spring Boot自动配置尝试根据所添加的jar依赖项自动配置Spring应用程序。
也就是说,咱们添加的jar包使用时需咱们要配置一些bean,spring boot会自动帮咱们配置,咱们能够直接使用而不用再去配置了。例如,若是HSQLDB在您的类路径中,而且您没有手动配置任何数据库链接bean,那么Spring Boot将自动配置内存中的数据库。
你能够经过在@Configuration配置类上加上@EnableAutoConfiguration或@SpringBootApplication(主程序)来使其开启自动配置。
注意:咱们应该只添加一个@SpringBootApplication或@EnableAutoConfiguration注释。咱们一般只向主@Configuration类(有main方法的类)添加@SpringBootApplication注解。
自动配置当然方便,可是默认的配置毕竟不可能知足咱们的全部需求。这是咱们就须要更改或添加本身的配置了。
spring boot的自动配置是非侵入性的。咱们能够经过自定义配置,以替换自动配置的相应的部分。 例如,若是您添加本身的DataSource bean,则默认的嵌入式数据库支持将退出。
若是你须要了解当前正在应用哪些自动配置以及缘由,可使用--debug
开关启动你的应用程序。 这样作能够启用调试日志,来让控制台打印生效的自动配置类。
若是你发现应用了不想要的自动配置类,可使用@SpringBootApplication的exclude属性(在类路径下)来禁用它们,以下面的示例所示:
import org.springframework.boot.autoconfigure.*; import org.springframework.boot.autoconfigure.jdbc.*; @SpringBootApplication(exclude={DataSourceAutoConfiguration.class}) public class MyApplication { }
若是要禁用的类不在类路径中,则可使用注解的excludeName
属性,并指定禁用的自动配置类的全类名。 若是你更喜欢使用@EnableAutoConfiguration
而不是@SpringBootApplication
,使用exclude
和excludeName
属性也是同样的。
除此以外,你还能够在全局配置文件application.properties使用spring.autoconfigure.exclude
属性指定要排除的自动配置类的列表。
您能够自由使用任何标准的Spring Framework技术来定义bean以及注入依赖项。
为简单起见,咱们发现使用@ComponentScan(查找您的bean)和使用@Autowired(进行构造函数注入)效果很好。
若是按照第二节的建议构造代码(将应用程序类定位在根包中),能够添加@ComponentScan,而不须要任何参数,@ComponentScan也可省略。
全部应用程序组件(@Component、@Service、@Repository、@Controller等)都自动注册为Spring bean。
这是由于@SpringBootApplication
和@EnableAutoConfiguration
会自动扫描本身所在的包及其子包。
下面的示例显示了一个@Service
Bean,它使用构造函数注入来得到所需的RiskAssessor
Bean。
package com.example.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class DatabaseAccountService implements AccountService { private final RiskAssessor riskAssessor; @Autowired public DatabaseAccountService(RiskAssessor riskAssessor) { this.riskAssessor = riskAssessor; } // ... }
ioc容器在将@Service标注的类注册到容器中时,会调用其构造方法,构造方法的调用,使咱们得到了所需的RiskAssessor
Bean。不过咱们要知道的是,构造方法的参数的值也来自ioc容器。
若是一个bean只有一个构造器,@Autowired
可忽略不写。
以下方所示:
@Service public class DatabaseAccountService implements AccountService { private final RiskAssessor riskAssessor; public DatabaseAccountService(RiskAssessor riskAssessor) { this.riskAssessor = riskAssessor; } // ... }
许多Spring Boot开发人员喜欢他们的应用程序使用自动配置,组件扫描,并可以在其“应用程序类”上定义额外的配置。
单个@SpringBootApplication注解能够同时启用这三个功能,即:
@EnableAutoConfiguration
: 开启spring boot的自动配置机制@ComponentScan
:对应用程序所在的包启动自动扫描@Configuration
: 容许在上下文中注册额外的bean或导入额外的配置类所以咱们在应用程序类上使用@SpringBootApplication
最佳
package com.example.myapplication; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication // 至关于 @Configuration @EnableAutoConfiguration @ComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@SpringBootApplication
还为@EnableAutoConfiguration
自动配置的bean和@ComponentScan
扫描的bean提供了别名。即类名首字母小写
@SpringBootApplication
的使用不是强制性的,若是须要的话,可使用须要的功能就够了。
将应用程序打包为jar并使用嵌入式HTTP服务器的最大优势之一是能够像运行其余应用程序同样运行应用程序。调试Spring启动应用程序也很容易。您不须要任何特殊的IDE插件或扩展。
以Maven应用导入IDE中,能够像运行简单的java应用程序同样运行spring boot应用。
若是你是使用Spring Boot Maven或Gradle插件建立可执行jar包,则可使用java -jar运行应用程序,如如下示例所示:
$ jar -jar myapplication-0.0.1-SNAPSHOT.jar
Spring Boot包含一组额外的工具,可使应用程序开发体验更好。spring-boot-devtools模块能够包含在任何项目中,以提供开发时的特性。要包含devtools支持,将模块依赖项添加到的构建中便可。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies>
在运行彻底打包的应用程序时,将自动禁用开发人员工具。
若是您的应用程序是从java -jar启动的,或者是从一个特殊的类加载器启动的,那么它就被认为是一个生产应用程序。
若是这不适用于您(例如,若是您在容器中运行您的应用程序),请考虑排除devtools或设置-Dspring.devtools.restart.enabled=false 系统属性。
Spring Boot支持的一些库使用缓存来提升性能。例如,模板引擎缓存已编译的模板,以免重复解析模板文件。此外,在提供静态资源时,Spring MVC能够在响应中添加HTTP缓存头。
缓存在产品使用中颇有好处,但在开发过程当中却拔苗助长,使你没法看到本身刚刚在应用程序中所作的更改。 所以,默认状况下,spring-boot-devtools禁用缓存选项。这样,你每次做出的修改,都会显示出来。
缓存选项一般由application.properties
文件中的设置配置。 例如,Thymeleaf提供spring.thymeleaf.cache
属性。 spring-boot-devtools
模块不须要手动设置这些属性,而是在开发时自动应用合理的配置。
由于在开发Spring MVC和Spring WebFlux应用程序时,您须要不少关于web请求的信息,因此开发者工具将为web日志组启用调试日志。
这将为你提供传入请求的相关信息,如正在处理这个请求的handle、响应结果等信息。若是但愿记录全部请求细节(包括潜在的敏感信息),能够打开spring.http.log-request-details配置属性。
若是您不但愿应用默认属性,则能够在application.properties中将spring.devtools.add-properties设置为false。
每当classpath路径下的文件有更改时,使用spring-boot-devtools的应用程序都会自动从新启动。
在IDE中工做时,这多是一个有用的功能,由于它为代码更改提供了很是快速的反馈循环。 默认状况下,将监视类路径上指向文件夹的任何条目的更改。 请注意,某些资源(例如静态资产和视图模板)不须要从新启动应用程序。
Spring Boot提供的重启技术经过使用两个类加载器来工做。 不变的类(例如,来自第三方jar的类)将被加载到基类加载器中。 您正在积极开发的类将加载到从新启动类加载器中。 从新启动应用程序时,将丢弃从新启动类加载器,并建立一个新的类加载器。 这种方法意味着应用程序的重启一般比“冷启动”要快得多,由于基本类加载器已经可用并已填充。
详细功能待填充。