您的位置:首页 > 编程语言 > Java开发

从Spring Boot 1.5升级到2.0

2018-06-27 12:32 1066 查看

POM

  • 1.5
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.10.RELEASE</version>
    <relativePath/>
    </parent>
  • 2.0
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.3.RELEASE</version>
    <relativePath/>
    </parent>

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,这样在启动时会提示需要更改的配置:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>

其中改动较大的是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 5b4 -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. 5b28
/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<PersonName> 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。

参考文档

Spring Boot Reference Guide 2.0.3.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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Spring Boot 升级