springboot 2.0 changes

有差别,但不大。些配置属性和类,可能要改动

挑战权威,一战成名

《Expert one-on-one J2EE Development without EJB》打破Java开发领域传统思考模式,走向“轻量化”发展的步伐

Spring Framework 1.0核心两大要素:DI和AOP

初涉Java可能觉得不用它们依然可以很好的实现业务功能,随业务迭代和开发深入,复杂多变的需求侵蚀原本“完美”的架构,开发与测试的难度增大

Sprin也封装了诸多偏业务型的功能封装,如:邮件发送、事务管理等,但真正让企业级应用离不开Spring的理由并不是这些与业务直接相关的功能,而上面与业务实现毫不相关的两大核心

很长一段时间,都采用了Spring做工程管理来整合其他更优秀的功能型框架来完成系统开发的架构模式,SSH架构可以勾起一代人的回忆

优雅灵活,吸粉无数

2.x和3.x,先后支持Annotation优雅配置方式及更为灵活的Java类的配置,使Spring在管理Bean的配置方式上变得更为多样化

随Spring的深入应用,繁琐的配置问题开始显现,每次构建项目时不断复制黏贴着一些模版化的配置与代码;同时一些共同依赖的Jar包存在着潜在的冲突风险

Spring的“轻量级”在其他动态语言面前就显得不那么轻了

轮子大师,前途未卜

4.x除了提供对Java 8的支持以及对依赖注入的增强之外,很长一段时间核心框架的创新没有那么出彩,社区更多精力转向曾经亲密无间的小伙伴们

各种功能性的兄弟项目,如:Spring Data、Spring Batch、Spring Security等

些框架个体都有一定的优势和先进的理念,但对很多既有系统在功能性框架上很难做出改变,新轮子项目很难得到应用,除一些从零开始的系统会做一些尝试之外,鉴于学习成本和踩坑风险的考虑,中小团队很少有愿意去尝试

老牌的功能性框架除非有严重性能或安全问题出现,不然很难被这些轮子所替代

这段时间Spring社区推出那么多轮子项目,真正在国内得到广泛应用的并不多,很多开发团队依然只是使用最核心的IOC和AOP,根据团队的技术栈情况整合出更适合自身的脚手架来进行系统开发

神兵出世,再创辉煌

2014年4月1日,Spring Boot第一个正式版。旨在帮助开发者更容易地创建基于Spring的应用程序和服务

2.x版本,经历近4年发展

突然如此备受关注与推崇主要:

  • 简化依赖管理:一系列Starter POMs,将各种功能性模块进行划分与封装,更容易引入和使用,有效避免维护大量依赖关系的JAR冲突等问题
  • 自动化配置:Starter提供自动化Java配置类,替代XML繁琐且并不太变化的Bean配置;一系列条件注解修饰,也可轻松替换自动化配置的Bean来进行扩展
  • 嵌入式容器:除代码组织上的优化外(Josh Long的那句:“Deploy as a Jar, not a War”),使Spring Boot应用的打包运行变得非常的轻量级
  • 生产级的监控端点:spring-boot-starter-actuator可以说是Spring Boot在Spring基础上的另一个重要创新,为Spring应用的工程化变得更加完美。并不能帮助我们实现任何业务功能,但在架构运维层面给予我们更多的支持,通过该模块暴露的HTTP接口,可以轻松的了解和控制Spring Boot应用的运行情况

Spring Boot通过上面这些特性的支持,改变了我们使用Spring的姿势,极大简化了构建企业级应用的各种配置工作,更加容易入门使用


SpringBoot 2基于Spring5和JDK8, 6 和 7 不再支持

JPA,findById 返回Optional对象,改较大,直接影响所有业务代码 内嵌容器包结构调整

为支持reactive,内嵌容器包结构重构幅度有点大EmbeddedServletContainer重命名为WebServer

TomcatEmbeddedServletContainerFactory回调接口自定义内嵌Tomcat容器,现在应该使用TomcatServletWebServerFactory

server不再是只有servlet了,还有其他的要加入

Spring Loaded不再支持,现在建议用Devtools

默认connection pool变了

默认连接池Tomcat切HikariCP,spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

Tomcat 最低8.5

Hibernate最低5.2

默认代理现在默认CGLIB,spring.aop.proxy-target-class=false

松绑定改善

下面最终都映射为 spring.jpa.databaseplatform=mysql

1
2
3
4
5
spring.jpa.database-platform=mysql

spring.jpa.databasePlatform=mysql

spring.JPA.database_platform=mysql

spring-boot-starter-json

前端json传上来的时间,@RequestBody绑定到Bean里的LocalDateTime`成员

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")

Spring Boot 2.0.0 ,直接在字段上加上@JsonFormat 就可完成数据绑定

1.5.8只在字段加@JsonFormat ,数据绑定报错

解法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-parameter-names</artifactId>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
@Configuration
public class JacksonConfig {

   @Bean
   public ObjectMapper serializingObjectMapper() {
       ObjectMapper objectMapper = new ObjectMapper();
       objectMapper.findAndRegisterModules();
       return objectMapper;
   }
}

Jedis>Lettuce,exclude掉io.lettuce:lettuce-core,然后添加 redis.clients:jedis