我已经创建了一个使用SpringBoot 2.0和Java9的原型应用程序
更新纪录
首先
由于既有应用的SpringBoot 1.5转换为2.0失败,所以我们决定暂时以新的方式创建WebApi。虽然问题很多,但使用了上述标题的组合暂时可以运行。对于想要进行Java9转换的人来说,这可能会有所帮助。请注意,Java9转换的关键在于build.gradle文件中。
-
- FW
Spring Boot 2.0 M7
Spring Boot 2.0 RC1
Spring Boot 2.0 RC2
Spring Boot 2.0 GA
Spring Boot 2.02
Spring Boot 2.03
Libraries
Flyway
Lombok
SpringDataJpa
SpringFox
JDK
9.0.4(Oracle)
Build
Gradle 4.5.1
Gradle 4.6
Gradle 4.7
Gradle 4.8.1
IDE
IntelliJ IDEA Community 2017.3
IntelliJ IDEA Community 2018.1
示例代码
未克服的挑战
模型映射器
我想跳过,但是它无法正常运作。
模块信息.java
我尚未创建它。
所以,在启动参数中我写下了将来要删除的内容。
SpringFox数据Rest
无法在2.9版本下运行…
元模型类
我放弃了在IntelliJ中的配置方法,因为我不知道该怎么做。(与java9无关)
绊倒的地方
执行器
这些在yaml文件中定义的属性值已经发生了相当大的变化。
我无法完全了解之前输出的内容与哪些对应。
javadoc文件
在寻找build.gradle示例中花费了大约一个小时,但是没有找到。
tasks.withType(Javadoc) {
doFirst {
options.addStringOption('-add-modules', 'java.xml.bind,java.xml.ws.annotation')
}
}
如果创建了”module-info.java”,我想这部分会发生变化。
JAXB: 只需要一个选项,在中文中重新表达为:JAXB
根据《Spring Boot with Java 9》中所述,只需将其作为依赖项添加即可。
但是,由于存在一些问题,可能不再需要手动编写了吗?
为Java 9提供JAXB的依赖管理,因为Java 9不再提供它。
compile("javax.xml.bind:jaxb-api:2.3.0")
junit5转变
我之前以为要将库的版本从4.x升级到5.x,但看来不是这样。
// Junit 5
testCompile("org.junit.platform:junit-platform-launcher:1.1.1")
testRuntimeOnly("org.junit.platform:junit-platform-engine:1.1.1")
testImplementation("org.junit.jupiter:junit-jupiter-api")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
롬복
当我将1.16.18更改为1.16.20时,问题很快解决了。
然而,在我开始处理时1.16.20尚未发布,因此存在一段时间问题没有解决。
Spring Boot 2.0 RC1的dependency-management使得lombok默认获取1.16.20版本。因此,无需手动输入依赖关系版本号,就能实现java9化。
自愿的
当不为null时,希望抛出异常…
以下的方法写法太糟糕了。
Optional<GoodsTbl> optionalCode = service.findByCode(goodsCode);
if (optionalCode.isPresent()) {// goodsCode(unique制約)の存在チェック
throw new ConflictException("goodsCode", "CODEが重複しています。");
}
对象/关系映射器
使用flyway、mysql5.7和SpringDataJPA的组合在启动过程中会产生大量警告。
目前已经消除了警告,但很有可能是某处的描述错误。
希望在有时间的时候进行调查。
// Flyway
compile("org.flywaydb:flyway-core")
testCompile("org.flywaydb.flyway-test-extensions:flyway-spring-test:5.0.0")
未来的举措
-
- 创建CRUD的剩余功能
-
- 重构
-
- 持续)适配SpringBoot 2.x
-
- 添加测试
- 添加产品