POM
- 1.5
    org.springframework.boot 
    spring-boot-starter-parent 
    1.5.10.RELEASE 
     - 2.0
    org.springframework.boot 
    spring-boot-starter-parent 
    2.0.7.RELEASE 
     Spring Data
Spring Data的一些方法进行了重命名:

- findOne(id) -> findById(id) (返回的是Optional)
- delete(id) -> deleteById(id)
- exists(id) -> existsById(id)
- findAll(ids) -> findAllById(ids)
配置
在升级时,可以在pom中增加spring-boot-properties-migrator,这样在启动时会提示需要更改的配置:
    org.springframework.boot 
    spring-boot-properties-migrator 
    runtime 
 其中改动较大的是security(The security auto-configuration is no longer customizable,A global security auto-configuration is now provided)、management、banner、server等。
- security
security开头的配置及management.security均已过期,如以下的配置不再支持,需要调整到代码中:
security:
  ignored: /api-docs,/swagger-resources/**,/swagger-ui.html**,/webjars/**- management
management:
  security:
    enabled: false
  port: 8090修改为:
management:
  server:
    port: 8090- datasource
datasource:
    initialize: false修改为:
datasource:
    initialization-mode: never如使用PostgreSQL,可能会报错:Method org.postgresql.jdbc.PgConnection.createClob() is not yet implemented hibernate,需修改配置:
jpa:
    database-platform: org.hibernate.dialect.PostgreSQLDialect
    properties:
       hibernate:
         default_schema: test
         jdbc:
           lob:
             non_contextual_creation: true- banner调整为spring.banner
- server调整为server.servlet
更多需要调整的参数请看文末参考文档。
Security
WebSecurityConfigurerAdapter
- security.ignored
@Override
public void configure(WebSecurity web) throws Exception {
   web.ignoring().antMatchers("/api-docs", "/swagger-resources/**", "/swagger-ui.html**", "/webjars/**");
}- AuthenticationManager
如在代码中注入了AuthenticationManager,
@Autowired
private AuthenticationManager authenticationManager;在启动时会报错:Field authenticationManager required a bean of type 'org.springframework.security.authentication.AuthenticationManager' that could not be found.请在WebSecurityConfigurerAdapter中增加以下代码:
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
}Actuator
- 配置属性变化
| Old property | New property | 
|---|---|
| endpoints.id.* | management.endpoint.id.* | 
| endpoints.cors.* | management.endpoints.web.cors.* | 
| endpoints.jmx.* | management.endpoints.jmx.* | 
| management.address | management.server.address | 
| management.context-path | management.server.servlet.context-path | 
| management.ssl.* | management.server.ssl.* | 
| management.port | management.server.port | 
management.endpoints.web.base-path的默认值为/actuator,即Actuator访问路径前部增加了actuator([/actuator/health],[/actuator/info]),这可以在启动日志中看到。
因management.security不再支持,权限配置需添加到WebSecurityConfigurerAdapter中:
.authorizeRequests()
.requestMatchers(EndpointRequest.to("health", "info")).permitAll()- Endpoint变化
| Endpoint | Changes | 
|---|---|
| /actuator | No longer available. There is, however, a mapping available at the root of management.endpoints.web.base-path that provides links to all the exposed endpoints. | 
| /auditevents | The after parameter is no longer required | 
| /autoconfig | Renamed to /conditions | 
| /docs | No longer available (the API documentation is part of the published documentation now) | 
| /health | Rather than relying on the sensitive flag to figure out if the health endpoint had to show full details or not, there is now a management.endpoint.health.show-details option: never, always, when-authorized. By default, /actuator/health is exposed and details are not shown. | 
| /trace | Renamed to /httptrace | 
新特性
- Configuration Property Binding
可以在代码中直接使用Binder API从配置文件中读取内容:
public class Person implements EnvironmentAware {
        private Environment environment;
        @Override
        public void setEnvironment(Environment environment) {
            this.environment = environment;
        }
        public void bind() {
            List people = Binder.get(environment)
            .bind("my.property", Bindable.listOf(PersonName.class))
            .orElseThrow(IllegalStateException::new);
        }
} YAML配置
my:
  property:
  - first-name: Jane
    last-name: Doe
  - first-name: John
    last-name: Doe- Spring Data Web Configuration
新增spring.data.web配置来设置分页和排序:
# DATA WEB (SpringDataWebProperties)
spring.data.web.pageable.default-page-size=20 # Default page size.
spring.data.web.pageable.max-page-size=2000 # Maximum page size to be accepted.
spring.data.web.pageable.one-indexed-parameters=false # Whether to expose and assume 1-based page number indexes.
spring.data.web.pageable.page-parameter=page # Page index parameter name.
spring.data.web.pageable.prefix= # General prefix to be prepended to the page number and page size parameters.
spring.data.web.pageable.qualifier-delimiter=_ # Delimiter to be used between the qualifier and the actual page number and size properties.
spring.data.web.pageable.size-parameter=size # Page size parameter name.
spring.data.web.sort.sort-parameter=sort # Sort parameter name.- 支持自定义JdbcTemplate
# JDBC (JdbcProperties)
spring.jdbc.template.fetch-size=-1 # Number of rows that should be fetched from the database when more rows are needed.
spring.jdbc.template.max-rows=-1 # Maximum number of rows.
spring.jdbc.template.query-timeout= # Query timeout. Default is to use the JDBC driver's default configuration. If a duration suffix is not specified, seconds will be used.- 支持hibernate自定义命名策略
- Reactive
更多新特性请查看Release Notes。
Swagger
    io.springfox 
    springfox-swagger2 
    2.9.2 
 
    io.springfox 
    springfox-swagger-ui 
    2.9.2 
 Swagger 2.9版本,增加了对@ApiParam属性example的处理,在Swagger UI和文档中会显示,因此要注意设置合适的example值:
@ApiOperation(value = "Delete airline by id")
@GetMapping("/airlines/delete/{airlineId}")
public void deleteAirline(@ApiParam(required = true, example = "123") @PathVariable Long airlineId)否则你会看到Warn日志:
AbstractSerializableParameter
@JsonProperty("x-example")
public Object getExample() {
    if (example == null) {
        return null;
    }
    try {
        if (BaseIntegerProperty.TYPE.equals(type)) {
            return Long.valueOf(example);
        } else if (DecimalProperty.TYPE.equals(type)) {
            return Double.valueOf(example);
        } else if (BooleanProperty.TYPE.equals(type)) {
            if ("true".equalsIgnoreCase(example) || "false".equalsIgnoreCase(defaultValue)) {
                return Boolean.valueOf(example);
            }
        }
    } catch (NumberFormatException e) {
        LOGGER.warn(String.format("Illegal DefaultValue %s for parameter type %s", defaultValue, type), e);
    }
    return example;
}另外Swagger 2.9.2会为org.springframework.data.domain.Pageable自动增加@ApiImplicitParams。
参考文档
Spring Boot Reference Guide 2.0.7.RELEASE
Spring Boot 2.0 Migration Guide
Spring Boot 2.0 Configuration Changelog
Spring Boot 2.0 Release Notes
Spring Boot Relaxed Binding 2.0
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站栏目:从SpringBoot1.5升级到2.0-创新互联
文章来源:http://www.scyingshan.cn/article/cohjci.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 