1 Dependency Management 依赖管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
一个对所依赖jar包进行版本管理的管理器。
1:如果dependencies里的dependency自己没有声明version元素,那么maven就
会倒dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果
没有就会报错,告诉你必须为dependency声明一个version
2:如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准
2 Starters 启动器
spring-boot-starter-* ,其中 * 是一种特殊类型的应用程序。这种命名结构是为了在需要找到启动器时提供帮助
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3 应用程序的位置
将应用程序放在Appliction下的子包下,或者相同目录下
4 自动配置
Spring Boot 自动配置尝试根据添加的 jar 依赖项自动配置 Spring 应用程序
通过向@configuration 类中添加@enableautoconfiguration 或@springbootapplication 注释来选择自动配置。
禁用特定自动配置类不想要的特定自动配置类正在被应用
- 可以使用@springbootapplication 的 exclude 属性来禁用它们
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
public class MyApplication {
}
- @enableautoconfiguration exclude 和 exclusudename
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
5 依赖注入
如果按照上面的建议构造代码(将应用程序类定位在根包中) ,则可以添加@componentscan,而不需要任何参数。您的所有应用程序组件(@component、@service、@repository、@controller 等)都自动注册为 Spring Beans。
6 @springbootapplication 注释
- @EnableAutoConfiguration`: enable Spring Boot’s auto-configuration mechanism
@ enableautoconfiguration: 启用 Spring Boot 的自动配置机制
-
@ComponentScan
: enable@Component
scan on the package where the application is located (see the best practices)@ componentscan: 在应用程序所在的包上启用@component scan (参见最佳实践)
-
@Configuration
: allow to register extra beans in the context or import additional configuration classes@ configuration: 允许在上下文中注册额外的 bean 或者导入额外的配置类
如果不希望某些特性,可以自己配置
Configuration(proxyBeanMethods = false)
@EnableAutoConfiguration
@Import({ MyConfig.class, MyAnotherConfig.class })
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
7 运行你的应用程序
1 作为打包应用程序运行
$ java -jar target/myapplication-0.0.1-SNAPSHOT.jar
2 使用MAVEN
$ mvn spring-boot:run
3 开发工具
8 Developer Tools 开发工具
Spring Boot 包括一组额外的工具,可以使应用程序开发体验更加愉快。Spring-boot-devtools 模块可以包含在任何项目中,以提供额外的开发时特性。
1 添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
为了使用 不管启动应用程序所使用的类加载器是什么,请设置
spring.devtools.restart.enabled=true
生产环境中不可以使用
spring.devtools.restart.enabled=false
8.1 自动重启
使用 spring-boot-devtools 的应用程序在类路径上的文件发生更改时自动重新启动
当 DevTools 监视类路径资源时,触发重新启动的唯一方法是更新类路径
-
在 IntelliJ IDEA 中,构建项目(Build + → + Build Project)具有同样的效果。
-
如果使用构建插件,为 Maven 运行 mvn 编译或为 Gradle 运行 Gradle 构建将触发重启。
Spring Boot 提供的重新启动技术使用了两个类加载器。不更改的类(例如,那些来自第三方 jar 的类)被装载到基本类加载器中。您正在积极开发的类装载到重新启动的类加载器中。当应用程序重新启动时,重新启动的类加载器将被丢弃,并创建一个新的类加载器。这种方法意味着应用程序重新启动通常比“冷启动”快得多,因为基本类加载器已经可用并且已经填充了。
8.2 不包括资源
某些资源在更改时不一定需要触发重新启动。例如,Thymeleaf 模板可以就地编辑。默认情况下,更改/META-INF/maven、/META-INF/resources、/resources、/static、/public 或/templates 中的资源不会触发重新启动
如果希望自定义这些排除项,
spring.devtools.restart.exclude=static/**,public/**
8.3 添加资源
对不在类路径上的文件进行更改时,可能希望重新启动或重新加载应用程序。为此,可以使用 pring.devtools.restart.additional-paths 属性配置其他路径以监视更改
spring.devtools.restart.additional-paths
8.4 禁用重启
如果不想使用重启功能,可以使用 spring.devtools.restart.enabled 属性禁用它
spring.devtools.restart.enabled =false
(这样做仍然会初始化重新启动类加载器,但它不会监视文件的更改)。
如果您需要完全禁用重启支持那么您需要在调用 SpringApplication.run (…)之前将 spring.devtools.restart.enabled System 属性设置为 false,如下例所示:
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(MyApp.class, args);
}
8.5 自定义重启类加载器
默认情况下,IDE 中的任何打开项目都会加载“重启”类加载器和任何常规加载器。Jar 文件装载了“ base”类加载器。如果您处理的是多模块项目,并且不是每个模块都导入到 IDE 中,则可能需要自定义一些内容。为此,可以创建 META-INF/spring-devtools。属性文件。
属性文件可以包含前缀为 restart.exclude 和 restart.include 的属性。Include 元素是应该拉到“ restart”类加载器中的项,exclude 元素是应该下推到“ base”类加载器中的项。属性的值是应用于类路径的正则表达式,
estart.exclude.companycommonlibs=/mycorp-common-[\\w\\d-\\.]+\\.jar
restart.include.projectcommon=/mycorp-myproj-[\\w\\d-\\.]+\\.jar
8.6 远程应用
Spring Boot 开发人员工具并不局限于本地开发。您还可以在远程运行应用程序时使用几个特性。远程支持是可选的,因为启用它可能会带来安全风险。只有在受信任的网络上运行或使用 SSL 进行安全保护时,才应该启用它。如果这两个选项都不可用,则不应使用 DevTools 的远程支持。您永远不应该在生产部署上启用支持。