常用工具备忘

查看项目依赖

  • gradle:

gradle dependencies

  • maven:

mvn dependency:tree

排除依赖

不需要某个依赖或者需要替换掉某依赖时,就需要把这个依赖排除:

以Spring Boot的Web起步依赖为例,它传递依赖了Jackson JSON库。如果你正在构建一个生产或消费JSON资源表述的REST服务,那它会很有用。但是,要构建传统的面向人类用户的Web应用程序,你可能用不上Jackson。虽然把它加进来也不会有什么坏处,但排除掉它的传递依赖,可以为你的项目瘦身。

  • gradle:
compile("org.springframework.boot:spring-boot-starter-web") 
{  
    exclude group: 'com.fasterxml.jackson.core'
}
  • maven
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.fasterxml.jackson.core</groupId>
        </exclusion> 
     </exclusions>
</dependency>

另一方面,也许项目需要Jackson,但你需要用另一个版本的Jackson来进行构建,而不是Web起步依赖里的那个。假设Web起步依赖引用了Jackson 2.3.4,但你需要使用2.4.33。在Maven里,你可以直接在pom.xml中表达诉求,就像这样:

  • maven:
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.3</version>
</dependency>

Maven总是会用最近的依赖,也就是说,你在项目的构建说明文件里增加的这个依赖,会覆盖传递依赖引入的另一个依赖。

  • gradle
    假如要替换的版本更新。直接写新版本即可:
compile("com.fasterxml.jackson.core:jackson-databind:2.4.3")

假如要替换的是一个旧版本,需要把原有更新的版本排除,再添加旧版本的包:

compile("org.springframework.boot:spring-boot-starter-web") {  
    exclude group: 'com.fasterxml.jackson.core'
}
compile("com.fasterxml.jackson.core:jackson-databind:2.3.1")

不管什么情况,在覆盖Spring Boot起步依赖引入的传递依赖时都要多加小心。虽然不同的版本放在一起也许没什么问题,但你要知道,起步依赖中各个依赖版本之间的兼容性都经过了精心的测试。应该只在特殊的情况下覆盖这些传递依赖(比如新版本修复了一个bug)。

读取配置

Spring Boot能从多种属性源获得属性,包括如下几处。

  1. 命令行参数
  2. java:comp/env 里的JNDI属性
  3. JVM系统属性
  4. 操作系统环境变量
  5. 随机生成的带random.* 前缀的属性(在设置其他属性时,可以引用它们,比如${random.long} )
  6. 应用程序以外的application.properties或者appliaction.yml文件
  7. 打包在应用程序内的application.properties或者appliaction.yml文件
  8. 通过@PropertySource 标注的属性源
  9. 默认属性

这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性。例如,命令行参数会覆盖其他属性源里的属性。

application.properties和application.yml文件能放在以下四个位置。

  1. 外置,在相对于应用程序运行目录的/config子目录里。
  2. 外置,在应用程序运行的目录里。
  3. 内置,在config包内。
  4. 内置,在Classpath根目录。