如果你登录spring官网,你会发现她的网址是:https://spring.io/,而当你点击右上角第一个标签spring project进入后,你还会发现第一个spring project就是spring io platform,所以说spring io platform在众多spring项目中还是比较重要的。
spring io platform其实就是一个平台,而这个平台提供给我们的是什么呢?下面我们来看一下。
1.什么是spring io platform?
Spring IO Platform就是将核心Spring API集成到一个富有凝聚力的平台中,适用于现代应用程序,它提供了Spring中众多项目的版本依赖关系(参考)。这些都是经过严格测试通过的,并且可以完全协同工作。
2.如何使用?
Spring IO平台主要被用于一个可以实现依赖管理的系统。它与Maven和Gradle都能很好的兼容。
(1)通过maven配置后使用:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>your-application</artifactId>
<version>1.0.0-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- Dependency declarations -->
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>your-application</artifactId>
<version>1.0.0-SNAPSHOT</version>
<parent>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR6</version>
<relativePath/>
</parent>
<!-- Dependency declarations -->
</project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如果你想既使用Platform,也使用spring boot,那你就不必使用Platform的pom作为父项。像上面,你可以直接导入Platform的pom,然后手动执行其余配置。可以参考: Spring Boot’s documentation on using it with Maven。
无论选择哪种方法,都没有依赖添加到你的应用程序中。但是,当你声明依赖属于平台的一部分时,你可以直接省略版本号。例如:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
</dependencies>
有关平台中包含的内容和提供的版本详细信息,可以参考
这里。
(2)通过gradle配置:
如果要使用Gradle平台,可以使用Gradle Dependency Management Plugin,并像导入Maven的方式导入Bom。由于Gradle没有提供相当于Maven的内置依赖管理支持,所以使用插件是必要的。 要使用该插件,需要将你的构建配置为应用插件,然后将dependencyManagement配置中导入平台的bom:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'io.spring.gradle:dependency-management-plugin:1.0.0.RELEASE'
}
}
apply plugin: 'io.spring.dependency-management'
repositories {
mavenCentral()
}
dependencyManagement {
imports {
mavenBom 'io.spring.platform:platform-bom:Brussels-SR6'
}
}
dependencies {
compile 'org.springframework:spring-core'
}
Spring IO平台的主要优点之一就是它提供了一套已知的可以一起工作的版本,同时也允许你覆盖这些版本以适应你的项目需求。 Spring IO Platform bom和它从中继承的Spring Boot bom都使用属性来定义托管依赖项的版本。要更改依赖项的版本,可以覆盖其版本属性的值。要确定你想要覆盖的属性,请查阅Spring IO Platform bom的<properties>部分以及从中继承的Spring Boot bom。具体如何重写属性取决于你的项目是用Maven还是Gradle构建的。
(1)使用maven重写版本:
要在Maven中重写一个属性,你必须使用Platform的bom作为你的pom的父对象。然后你可以在你的pom的<properties>部分用所需的值声明属性:
<properties>
<foo.version>1.1.0.RELEASE</foo.version>
</properties>
在你的build.gradle脚本中配置
ext['foo.version'] = '1.1.0.RELEASE'
亦或是在gradle.properties中设置
foo.version=1.1.0.RELEASE
Spring IO Platform建立在Spring Boot的基础之上,关于日志它采用了一些自己的看法,目的是防止默认情况下使用Commons Logging。相反,它鼓励通过它的spring-boot-starter-logging模块来使用Logback。还提供了对其他日志框架的支持,包括Log4J2。尽可能使用Spring IO平台构建的应用程序应该采用这种方法。 如果选择不使用Spring Boot的spring-boot-starter-logging模块,但仍希望避免使用Commons Logging,则建议使用SLF4J及其jcl-over-slf4j模块以及Logback或Log4J2等日志后端。
5. Platform依赖管理上的一些后续变更
(1)已删除的一些依赖
下表列出了部分已删除的依赖项管理。如果你的项目中使用这些依赖项之一,则应该将你自己的依赖项管理配置作为升级过程的一部分。
Dependency | Explanation |
---|---|
| No longer a direct dependency of any of the Platform’s projects |
| No longer a direct dependency of any of the Platform’s projects |
| No longer a direct dependency of any of the Platform’s projects |
| No longer a direct dependency of any of the Platform’s projects |
| No longer a direct dependency of any of the Platform’s projects |
| No longer a direct dependency of any of the Platform’s projects |
| No longer a direct dependency of any of the Platform’s projects |
| No longer a direct dependency of any of the Platform’s projects |
| No longer a direct dependency of any of the Platform’s |
| Does not exist in the version of Spring Boot that is now used by the Platform |
| Does not exist in the version of Spring Boot that is now used by the Platform |
(2)已经被替换的依赖
下表列出了已被替换的依赖关系管理。在可能的情况下,作为升级过程的一部分,应该更新项目的依赖关系以使用替换项。
Dependency | Replacement |
---|---|
|
|
|
|
|
|
(1)依赖添加方面
当一个新项目被添加到平台上,或者平台升级到一个现有项目的新版本时,任何不属于该平台的项目依赖项都将被添加到平台中。此外,当平台添加新的依赖关系时,即使未被平台的任何项目使用,也会添加属于同一项目的其他任何模块。这有助于确保在第三方项目的所有模块中使用一致的版本。
(2)Platform版本迭代周期
平台的更新维护版本大约每6到8周发布一次。然而,有一个情况是特例,例如解决安全漏洞。这个时间表也会随着分支时间的延长而被放慢,并被取代。 除了上述的一般维护周期之外,平台的维护版本通常会由Spring Boot的维护版本触发。此外,Spring Framework的新维护版本经常会触发Spring Boot的维护版本。 该平台的一个关键目标是为其用户提供一组稳定的版本,以保持向后兼容性,同时尽可能保持最新版本。为了让我们达到这个平衡,可能会出现Spring Framework或Spring Boot中的错误导致平台跳过版本并等待解决问题的版本。
7. 使用此Platform需要注意的问题
(1)针对Guava各版本迭代引发的无法兼容问题
平台提供的Guava版本与Platform平台上Spring项目支持的最新版本保持一致。由于各种各样的Guava版本,每个都有向后不兼容的API更改,在整个Java生态系统中使用此版本可能不兼容所有第三方库。如果遇到不兼容性问题,可以使用guava.version属性覆盖该版本以满足应用程序的需求。
注:上面部分均翻译自官方文档,以供参考,官方文档地址是:https://docs.spring.io/platform/docs/current/reference/html/
下面来自官网spring project的描述。部分翻译。
Main Projects
From configuration to security, web apps to big data – whatever the infrastructure(基础设施) needs of your application may be, there is a Spring Project to help you build it. Start small and use just what you need – Spring is modular(模块化的) by design.
1. spring io platform
Spring IO is a cohesive(有黏着力的;紧密结合的), versioned platform for building modern(现代的;近代的;新式的;当代风格的) applications. It is a modular, enterprise-grade( 企业级)distribution(分布) that delivers(提供) a curated set of(一套) dependencies while keeping developers in full control of deploying only the parts they need. Spring IO is 100% open source, lean, and modular.
The Spring IO platform includes Foundation Layer modules(基础层模块) and Execution(执行) Layer domain-specific(特定领域的) runtimes (DSRs). The Foundation layer represents(代表) the core Spring modules and associated(相关) third-party dependencies that have been harmonized((使…与…)协调;(使)相称) to ensure a smooth(流畅的) development experience. The DSRs provided by the Spring IO Execution Layer dramatically(引人注目地) simplify(简化) building production-ready(生产准备), JVM-based workloads(工作量). The first release of Spring IO includes two DSRs: Spring Boot and Grails.
Features
One platform, many workloads - build web, integration(整合、交互), batch(批处理), reactive(有活性) or big data applications
Radically(从根本上) simplified development experience with Spring Boot
Production-ready features provided out of the box(提供现成的生产准备功能)
Curated(策划) and harmonized(协调) dependencies that just work together
Modular platform that allows developers to deploy only the parts they need
Support for embedded(植入的,深入的,内含的) runtimes, classic application server, and PaaS deployments
Depends only on Java SE, and supports Groovy, Grails and some Java EE
Works with your existing dependency management tools such as Maven and Gradle
The Spring IO Platform is certified(有保证的;公认的) to work on JDK 7 and 8*
*While the Spring IO Platform supports JDK 7 and 8, many individual(个别的) Spring projects also support older JDK versions. Please refer to(参考) the [individual projects' documentation] (http://spring.io/docs) for the specific minimum(小量的) requirements.
The recommended(被推荐的) way to get started using platform in your project is with a dependency management system – the snippet(片段) below can be copied and pasted into your build. Need help? See our getting started guides on building withMavenandGradle.
maven
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'io.spring.gradle:dependency-management-plugin:1.0.0.RELEASE'
}
}
apply plugin: 'io.spring.dependency-management'
dependencyManagement {
imports {
mavenBom 'io.spring.platform:platform-bom:Brussels-SR5'
}
}
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
Gradle:
dependencies {
compile 'org.springframework:spring-core'
}
说明:
1. Grails:Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate等开源框架之上,是一个高生产力一站式框架。(来自:百度百科)
2. 参考:csdn blogs
3. PAAS:PAAS平台即(Platform-as-a-Service:平台即服务),把应用服务的运行和开发环境作为一种服务提供的商业模式。(来自:百度百科)
4. Gradle:Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala,计划未来将支持更多的语言。(来自:百度百科)
5. brussels-SR5:(参考官网:链接地址)
6. Brussels-Build-Snapshot和Athens-SR6命名含义不是很清楚,直译是:布鲁塞尔-构建-片段,雅典-SR6,这里可能和版本有关吧