spring boot 使用
Contents
本节将详细介绍如何使用Spring Boot。 它涵盖了诸如构建系统,自动配置以及如何运行应用程序等主题。 我们还介绍了一些Spring Boot的最佳做法。 虽然Spring Boot没有什么特别的特点(它只是另一个可以消耗的lib),但是有一些建议可以让您的开发过程更容易一些。
构建系统
构建典型的系统,在另一篇 spring boot 快速入门中有maven 和 gradle 配置方式。
典型的pom.xml里有这个parent里加了org.springframework.boot,如果pom.xml已经有其它的parent,这里也有不用继承,也能配置maven的方式。
parent 是 maven 的一个元素,可以继承pom.xml中依赖,不用重复配置pom。
spring boot 不使用 parent 来继承依赖
如果您不想使用spring-boot-starter-parent,则仍然可以通过使用scope = import依赖关系来保持依赖关系管理(但不是插件管理)的好处:
1 | <dependencyManagement> |
有parent元素用了spring boot 时 覆盖单挑依赖直接后面加就行。 但是现在,要实现相同的结果,您需要在spring-boot-dependencies条目之前在项目的dependencyManagement中添加一个条目。 例如,要升级到另一个Spring Data发行列车,您需要将以下内容添加到pom.xml中。
1 | <dependencyManagement> |
除了maven 和 gradle 外 , 官方还有ant 构建系统的例子,ant 构建spring boot 详情
spring boot Starters
starters是一组方便的依赖关系描述符,可以包含在应用程序中。 您可以获得所需的所有Spring和相关技术的一站式服务,而无需通过示例代码搜索和复制粘贴相关性描述符的负载。 例如,如果要开始使用Spring和JPA进行数据库访问,那么只需在项目中包含spring-boot-starter-data-jpa依赖项,就可以了。
starters包含许多依赖关系,您需要使项目快速启动并运行,并具有一致的受支持的托管传输依赖关系。
Spring Boot在org.springframework.boot组下提供了以下应用程序starters,是时候展现spring的强大之处了:
- spring-boot-starter
- spring-boot-starter-activemq
- spring-boot-starter-amqp
- spring-boot-starter-aop
- spring-boot-starter-artemis
- spring-boot-starter-batch
- spring-boot-starter-cache
- spring-boot-starter-cloud-connectors
- spring-boot-starter-data-cassandra
- spring-boot-starter-data-couchbase
- spring-boot-starter-data-elasticsearch
- spring-boot-starter-data-gemfire
- spring-boot-starter-data-jpa
- spring-boot-starter-data-ldap
- spring-boot-starter-data-mongodb
- spring-boot-starter-data-neo4j
- spring-boot-starter-data-redis
- spring-boot-starter-data-rest
- spring-boot-starter-data-solr
- spring-boot-starter-freemarker
- spring-boot-starter-groovy-templates
- spring-boot-starter-hateoas
- spring-boot-starter-integration
- spring-boot-starter-jdbc
- spring-boot-starter-jersey
- spring-boot-starter-jooq
- spring-boot-starter-jta-atomikos
- spring-boot-starter-jta-bitronix
- spring-boot-starter-jta-narayana
- spring-boot-starter-mail
- spring-boot-starter-mobile
- spring-boot-starter-mustache
- spring-boot-starter-security
- spring-boot-starter-social-facebook
- spring-boot-starter-social-linkedin
- spring-boot-starter-social-twitter
- spring-boot-starter-test
- spring-boot-starter-thymeleaf
- spring-boot-starter-validation
- spring-boot-starter-web
- spring-boot-starter-web-services
- spring-boot-starter-websocket
- spring-boot-starter-actuator
- spring-boot-starter-remote-shell
- spring-boot-starter-jetty
- spring-boot-starter-log4j2
- spring-boot-starter-logging
- spring-boot-starter-tomcat
- spring-boot-starter-undertow
获取这些starters的pom.xml 依赖配置地址获取pom.xml依赖项。
编写良好的代码
编写良好的代码,避免一些低级的坑。
使用”default“包
当类不包括包声明时,它被认为是在“默认包”中。 官方不推荐使用“默认包”,应该避免使用。 对于使用@ComponentScan,@EntityScan或@SpringBootApplication注释的Spring Boot应用程序,可能会导致特殊的问题,因为每个jar的每个类都将被读取。
应用程序主类
我们通常建议您将主应用程序类定位到其他类之上的根包中。 @EnableAutoConfiguration注释通常放置在您的主类上,并且它隐式定义了某些项目的基本“搜索包”。 例如,如果您正在编写JPA应用程序,则@EnableAutoConfiguration注释类的包将用于搜索@Entity项。 使用根包也可以使用@ComponentScan注释,而不需要指定basePackage属性。 如果主类位于根包中,也可以使用@SpringBootApplication注释。
良好的布局:
1 | com |
Application.java文件将声明main方法以及基本的@Configuration。
1 | package com.example.myproject; |
配置 类
Spring Boot支持基于Java的配置。 虽然可以使用XML源调用SpringApplication.run(),但我们通常建议您的主源是一个@Configuration类。 通常,定义main方法的类也是一个很好的候选者,作为主要的@Configuration。
导入其他配置类
您不需要将所有的@Configuration放在一个类中。 @Import注释可用于导入其他配置类。 或者,您可以使用@ComponentScan自动拾取所有Spring组件,包括@Configuration类。
导入xml 配置
如果您绝对必须使用基于XML的配置,我们建议您仍然从@Configuration类开始。 然后可以使用额外的@ImportResource注释来加载XML配置文件。
auto-configuration
Spring Boot自动配置尝试根据您添加的jar依赖关系自动配置您的Spring应用程序。 例如,如果HSQLDB在您的类路径上,并且您没有手动配置任何数据库连接bean,那么我们将自动配置内存数据库。
您需要通过将@EnableAutoConfiguration或@SpringBootApplication注释添加到您的一个@Configuration类中来选择自动配置。
替换auto-configuration
自动配置是无创的,您可以随时开始定义自己的配置来替换自动配置的特定部分。 例如,如果添加自己的DataSource bean,则默认的嵌入式数据库支持将会退回。 如果您需要了解当前正在应用的自动配置,以及为什么要使用–debug开关启动应用程序。 这将启用调试日志以选择核心日志记录器,并将自动配置报告记录到控制台。
取消特殊auto-configuration
如果有特殊配置不想使用,可以用@EnableAutoConfiguration来取消。
1 | import org.springframework.boot.autoconfigure.*; |
spring beans 和 依赖注入
您可以自由使用任何标准的Spring Framework技术来定义您的bean及其注入的依赖关系。 为了简单起见,我们经常发现使用@ComponentScan找到你的bean,结合@Autowired构造函数注入效果很好。 如果您按照上述建议(将应用程序类定位在根包中)构建代码,则可以添加@ComponentScan而不使用任何参数。 所有应用程序组件(@Component,@Service,@Repository,@Controller等)将自动注册为Spring Bean。
这是一个使用构造函数注入获取所需的RiskAssessor bean的@Service Bean的例子。
1 |
|
使用@SpringBootApplication注解
使用@SpringBootApplication 注解跟使用@Configuration, @EnableAutoConfiguration 和 @ComponentScan 三个效果是一样的。
1 | package com.example.myproject; |
完结。