第一部分:
2.Working with Spring Boot
构建系统:
Maven
Maven用户可以从spring-boot-starter-parent
项目继承以获得合理的默认值。父项目提供以下功能:
- Java 1.8作为默认编译器级别。
- UTF-8源编码。
- 继承自spring-boot-dependencies pom 的依赖关系管理部分,用于管理公共依赖关系的版本。此依赖关系管理允许您在自己的pom中使用时省略这些依赖项的标记。
- 使用执行ID 执行
repackage
目标repackage
。 - 明智的 资源过滤。
- 明智的插件配置(exec插件, Git提交ID和 阴影)。
- 明智的资源用于滤波
application.properties
和application.yml
包括特定轮廓文件(例如,application-dev.properties
和application-dev.yml
)
请注意,由于application.properties
和application.yml
文件接受Spring样式占位符(${…}
),因此Maven过滤被更改为使用@..@
占位符。(您可以通过设置调用的Maven属性来覆盖它resource.delimiter
。)
继承Starter Parent
要将项目配置为继承spring-boot-starter-parent,请parent按如下所示进行设置 :
<! - 继承默认值为Spring Boot - >
<parent>
<groupId> org.springframework.boot </ groupId>
<artifactId> spring-boot-starter-parent </ artifactId>
<version> 2.1.3.RELEASE < / version>
</ parent>
在没有父POM的情况下使用Spring Boot
不是每个人都喜欢从spring-boot-starter-parentPOM 继承。您可能拥有自己需要使用的公司标准父级,或者您可能更愿意明确声明所有Maven配置。
如果您不想使用spring-boot-starter-parent,您仍然可以通过使用scope=import依赖项来保持依赖项管理(但不是插件管理)的好处 ,如下所示:
<dependencyManagement>
<dependencies>
<dependency>
<! - 从Spring Boot导入依赖关系管理 - >
<groupId> org.springframework.boot </ groupId>
<artifactId> spring-boot-dependencies </ artifactId>
<version> 2.1 .3.RELEASE </ version>
<type> pom </ type>
<scope> import </ scope>
</ dependency>
</ dependencies>
</ dependencyManagement>
如上所述,前面的示例设置不允许您使用属性覆盖单个依赖项。要获得相同的结果,您需要在输入之前在dependencyManagement项目中添加一个 条目。例如,要升级到另一个Spring Data版本系列,您可以将以下元素添加到:spring-boot-dependenciespom.xml
<dependencies>
<! - 覆盖Spring Boot提供的Spring Data版本系列 - >
<dependency>
<groupId> org.springframework.data </ groupId>
<artifactId> spring-data-releasetrain </ artifactId>
< version> Fowler-SR2 </ version>
<type> pom </ type>
<scope> import </ scope>
</ dependency>
<dependency>
<groupId> org.springframework.boot </ groupId>
<artifactId> spring-boot -dependencies </ artifactId>
<version>2.1.3.RELEASE </ version>
<type> pom</ type>
<scope> import </ scope>
</ dependency>
</ dependencies>
</ dependencyManagement>
使用Spring Boot Maven插件
Spring Boot包含一个Maven插件,可以将项目打包为可执行jar。<plugins>
如果要使用它,请将插件添加到您的 部分,如以下示例所示:
<build>
<plugins>
<plugin>
<groupId> org.springframework.boot </ groupId>
<artifactId> spring-boot-maven-plugin </ artifactId>
</ plugin>
</ plugins>
</ build>
#####Starters
启动器是一组方便的依赖关系描述符,您可以在应用程序中包含这些描述符。您可以获得所需的所有Spring和相关技术的一站式服务,而无需查看示例代码和复制粘贴依赖描述符的负载。例如,如果要开始使用Spring和JPA进行数据库访问,请spring-boot-starter-data-jpa在项目中包含依赖项。
启动器包含许多依赖项,这些依赖项是使项目快速启动和运行所需的依赖项,以及一组受支持的托管传递依赖项。
名称 | 描述 | Pom |
---|---|---|
spring-boot-starter | 核心启动器,包括自动配置支持,日志记录和YAML | Pom |
spring-boot-starter-activemq | 使用Apache ActiveMQ进行JMS消息传递的入门者 | Pom |
spring-boot-starter-amqp | 使用Spring AMQP和Rabbit MQ的入门者 | Pom |
spring-boot-starter-aop | 使用Spring AOP和AspectJ进行面向方面编程的入门者 | Pom |
spring-boot-starter-artemis | 使用Apache Artemis进行JMS消息传递的入门者 | Pom |
spring-boot-starter-batch | 使用Spring Batch的入门者 | Pom |
spring-boot-starter-cache | 用Spring Framework的缓存支持的初学者 | Pom |
spring-boot-starter-cloud-connectors | 使用Spring Cloud Connectors的初学者简化了Cloud Foundry和Heroku等云平台中的服务连接 | Pom |
spring-boot-starter-data-cassandra | 使用Cassandra分布式数据库和Spring Data Cassandra的入门者 | Pom |
spring-boot-starter-data-cassandra-reactive | 使用Cassandra分布式数据库和Spring Data Cassandra Reactive的入门者 | Pom |
spring-boot-starter-data-couchbase | 使用Couchbase面向文档的数据库和Spring Data Couchbase的入门者 | Pom |
spring-boot-starter-data-couchbase-reactive | 使用Couchbase面向文档的数据库和Spring Data Couchbase Reactive的入门者 | Pom |
spring-boot-starter-data-elasticsearch | 使用Elasticsearch搜索和分析引擎以及Spring Data Elasticsearch的初学者 | Pom |
spring-boot-starter-data-jdbc | 使用Spring Data JDBC的入门者 | Pom |
spring-boot-starter-data-jpa | 将Spring Data JPA与Hibernate一起使用的初学者 | Pom |
spring-boot-starter-data-ldap | 使用Spring Data LDAP的入门者 | Pom |
spring-boot-starter-data-mongodb | 使用MongoDB面向文档的数据库和Spring Data MongoDB的初学者 | Pom |
spring-boot-starter-data-mongodb-reactive | 使用MongoDB面向文档的数据库和Spring Data MongoDB Reactive的入门者 | Pom |
spring-boot-starter-data-neo4j | 使用Neo4j图形数据库和Spring Data Neo4j的入门者 | Pom |
spring-boot-starter-data-redis | 在Spring Data Redis和Lettuce客户端上使用Redis键值数据存储的初学者 | Pom |
spring-boot-starter-data-redis-reactive | 使用带有Spring Data Redis被动的Redis键值数据存储和Lettuce客户端的入门者 | Pom |
spring-boot-starter-data-rest | 使用Spring Data REST通过REST公开Spring Data存储库的入门者 | Pom |
spring-boot-starter-data-solr | 在Spring Data Solr中使用Apache Solr搜索平台的初学者 | Pom |
spring-boot-starter-freemarker | 使用FreeMarker视图构建MVC Web应用程序的入门者 | Pom |
spring-boot-starter-groovy-templates | 使用Groovy模板视图构建MVC Web应用程序的入门者 | Pom |
spring-boot-starter-hateoas | 使用Spring MVC和Spring HATEOAS构建基于超媒体的RESTful Web应用程序的入门者 | Pom |
spring-boot-starter-integration | 使用Spring Integration的入门者 | Pom |
spring-boot-starter-jdbc | 将JDBC与HikariCP连接池一起使用的入门者 | Pom |
spring-boot-starter-jersey | 使用JAX-RS和Jersey构建RESTful Web应用程序的初学者。替代spring-boot-starter-web | Pom |
spring-boot-starter-jooq | 使用jOOQ访问SQL数据库的初学者。替代spring-boot-starter-data-jpa 或spring-boot-starter-jdbc | Pom |
spring-boot-starter-json | 阅读和写作json的初学者 | Pom |
spring-boot-starter-jta-atomikos | 使用Atomikos进行JTA交易的入门者 | Pom |
spring-boot-starter-jta-bitronix | 使用Bitronix进行JTA事务的入门者 | Pom |
spring-boot-starter-mail | 使用Java Mail和Spring Framework的电子邮件发送支持的入门者 | Pom |
spring-boot-starter-mustache | 使用Mustache视图构建Web应用程序的入门者 | Pom |
spring-boot-starter-oauth2-client | 使用Spring Security的OAuth2 / OpenID Connect客户端功能的入门者 | Pom |
spring-boot-starter-oauth2-resource-server | 使用Spring Security的OAuth2资源服务器功能的入门者 | Pom |
spring-boot-starter-quartz | 使用Quartz调度程序的入门者 | Pom |
spring-boot-starter-security | 使用Spring Security的入门者 | Pom |
spring-boot-starter-test | 使用JUnit,Hamcrest和Mockito等库来测试Spring Boot应用程序的初学者 | Pom |
spring-boot-starter-thymeleaf | 使用Thymeleaf视图构建MVC Web应用程序的入门者 | Pom |
spring-boot-starter-validation | 使用Java Bean Validation和Hibernate Validator的初学者 | Pom |
spring-boot-starter-web | 使用Spring MVC构建Web(包括RESTful)应用程序的入门者。使用Tomcat作为默认嵌入式容器 | Pom |
spring-boot-starter-web-services | 使用Spring Web Services的入门者 | Pom |
spring-boot-starter-webflux | 使用Spring Framework的Reactive Web支持构建WebFlux应用程序的初学者 | Pom |
spring-boot-starter-websocket | 使用Spring Framework的WebSocket支持构建WebSocket应用程序的初学者 | Pom |
Spring Boot制作首发
名称 | 描述 | Pom |
---|---|---|
spring-boot-starter-actuator | 使用Spring Boot的Actuator的初学者,它提供生产就绪功能,帮助您监控和管理您的应用程序 | Pom |
Spring Boot技术首发
名称 | 描述 | Pom |
---|---|---|
spring-boot-starter-jetty | 使用Jetty作为嵌入式servlet容器的入门。替代spring-boot-starter-tomcat | Pom |
spring-boot-starter-log4j2 | 使用Log4j2进行日志记录的入门。替代spring-boot-starter-logging | Pom |
spring-boot-starter-logging | 使用Logback进行日志记录的入门。默认日志启动器 | Pom |
spring-boot-starter-reactor-netty | 使用Reactor Netty作为嵌入式响应式HTTP服务器的入门者。 | Pom |
spring-boot-starter-tomcat | 使用Tomcat作为嵌入式servlet容器的入门者。使用的默认servlet容器启动器spring-boot-starter-web | Pom |
spring-boot-starter-undertow | 使用Undertow作为嵌入式servlet容器的入门者。替代spring-boot-starter-tomcat | Pom |
最佳实践:
构建您的代码
Spring Boot不需要任何特定的代码布局即可工作。但是,有一些最佳实践可以提供帮助。
使用“默认”包
当一个类不包含package声明时,它被认为是在“默认包”中。通常不鼓励使用“默认包”,应该避免使用。这可能会导致使用了Spring启动应用程序的特殊问题@ComponentScan,@EntityScan或@SpringBootApplication注解,因为从每一个罐子每一个类被读取。
找到主应用程序类
我们通常建议您将主应用程序类放在其他类之上的根包中。该@SpringBootApplication
注解往往放在你的主类,它隐含地定义为某些项目一基地“搜索包”。例如,如果您正在编写JPA应用程序,@SpringBootApplication
则使用带注释的类的包来搜索@Entity
项目。使用根包还允许组件扫描仅应用于您的项目。
配置类
Spring Boot支持基于Java的配置。尽管可以使用 SpringApplicationXML源,但我们通常建议您的主要源是单个@Configuration类。通常,定义main方法的类是主要的候选者@Configuration。
导入其他配置类
你不需要把所有的@Configuration东西都放在一个班级里。所述@Import注释可以用于导入额外的配置类。或者,您可以使用 @ComponentScan自动获取所有Spring组件,包括 @Configuration类。
导入XML配置
如果您绝对必须使用基于XML的配置,我们建议您仍然从一个@Configuration类开始。然后,您可以使用@ImportResource注释来加载XML配置文件。
自动配置
Spring Boot自动配置尝试根据您添加的jar依赖项自动配置Spring应用程序。例如,如果HSQLDB 在您的类路径上,并且您尚未手动配置任何数据库连接bean,则Spring Boot会自动配置内存数据库。
您需要通过向其中一个类添加@EnableAutoConfiguration或 @SpringBootApplication注释来选择自动配置@Configuration。
逐步更换自动配置
自动配置是非侵入性的。在任何时候,您都可以开始定义自己的配置以替换自动配置的特定部分。例如,如果添加自己的DataSourcebean,则默认的嵌入式数据库支持会退回。
如果您需要了解当前正在应用的自动配置以及原因,请使用–debug交换机启动应用程序。这样做可以为选择的核心记录器启用调试日志,并将条件报告记录到控制台。
Spring Beans和依赖注入
您可以自由地使用任何标准的Spring Framework技术来定义bean及其注入的依赖项。为简单起见,我们经常发现使用 @ComponentScan(找到你的bean)和使用@Autowired(做构造函数注入)效果很好。
如果按照上面的建议构建代码(在根包中定位应用程序类),则可以添加@ComponentScan不带任何参数的代码。您的所有应用程序组件(的@Component,@Service,@Repository,@Controller等)自动注册为SpringBean。
使用@SpringBootApplication Annotation
许多Spring Boot开发人员喜欢他们的应用程序使用自动配置,组件扫描,并能够在他们的“应用程序类”上定义额外的配置。@SpringBootApplication
可以使用单个 注释来启用这三个功能,即:
@EnableAutoConfiguration
:启用Spring Boot的自动配置机制@ComponentScan
:@Component
在应用程序所在的包上启用扫描(请参阅最佳实践)@Configuration
:允许在上下文中注册额外的bean或导入其他配置类
的@SpringBootApplication
注释是相当于使用@Configuration
, @EnableAutoConfiguration
以及@ComponentScan
与他们的默认属性,