Spring Boot2 + JDK11使用笔记(不定期更新)

放几个阿里云的优惠链接 代金券 / 高性能服务器2折起 / 高性能服务器5折

下面描述的问题和解决方法全部基于Gradle构建,Maven用户自行转换

异常处理

  • Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
    启动出现这个错误的原因和JDK9相同,在JDK9开始已经移除了相关代码。Spring官方已经给出解决方法看这里
    解决办法: 添加依赖项,由于Spring官方给出的方法在某些依赖复杂的项目(主要是hibernate依赖相关)中依然会出现其他NoClassDefFoundError的异常,可以添加如下依赖可以基本解决。
    runtime 'javax.xml.bind:jaxb-api:+'
    runtime 'com.sun.xml.bind:jaxb-impl:+'
    runtime 'com.sun.xml.bind:jaxb-core:+'
    runtime 'javax.activation:activation:+'
  • Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
    出现这个问题是因为当前Spring Boot版本依赖的hibernate不支持JDK11。具体hibernate官网已经已经列出了一些问题和解决方法。看这里
    解决办法: 升级hibernate依赖
    compile('org.springframework.boot:spring-boot-starter-data-jpa'){
        // 当存在子项目引用时可能需要排除依赖避免冲突
        exclude module: 'hibernate-core'
    }
    compile 'org.hibernate:hibernate-core:5.3.7.Final'

你可能感兴趣的:(spring)