SpringBoot 1.5 のサポートが2019年8月1日に終了するので移行しようとしたらすごくハマったので共有したい。
Lombokでコンパイルができない
Lombbokが生成してくれるはずのメソッドやプロパティが見つからない場合はこれ。
- getter/setterがない
-
@AllArgsConstructor
つけてる場合はコンストラクタがない -
@Slf4j
つけてる場合はlog
がない - ...etc
対策
gradleの5.x系ではLombokのコンパイルができない。
4.x系にダウングレードする。
# distributionUrl=https\://services.gradle.org/distributions/gradle-5.2-rc-1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-all.zip
Mainファイルが無いよって怒られる
Main class name has not been configured and it could not be resolved
マルチモジュールプロジェクトだとよく発生するかも。
build.gradle
にapply plugin: 'org.springframework.boot'
を書いてると発生。
対策
実行可能jarにしたいモジュールのbuild.gradle
にだけ書いてあげる。
実行可能にしなくてよいmodule
// apply plugin: 'org.springframework.boot'
実行可能jarのmodule
apply plugin: 'org.springframework.boot'
// なくなりました
//springBoot {
// executable = true
//}
// 代わりにこっち
bootJar {
launchScript()
}
起動時にLogbackの設定でエラー
ERROR in ch.qos.logback.core.joran.action.AppenderAction - Could not create an Appender of type [org.springframework.boot.logging.logback.LevelRemappingAppender]. ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type org.springframework.boot.logging.logback.LevelRemappingAppender
LevelRemappingAppender
がなくなったらしい。
ログのノイズを抑えるために、ERROR
レベルからWARN
に変えたりするアダプターのようです。
対策
LevelRemappingAppender
で検索してアダプター設定を削除する。
代替アダプターを探したが見つけられなかった。
ログのノイズ抑えるものであって、アプリケーションの動きに変わりはないので削除しても問題ないはず。
<!--<appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender">-->
<!--<destinationLogger>org.springframework.boot</destinationLogger>-->
<!--</appender>-->
Sessionにhash_mapを指定してエラー
ローカル開発環境やテスト時に使用していたhash_map
がなくなりました。
対策
storetype=none
にして@ConcurrentHashMap
のBeanを生成する
@EnableSpringHttpSession
@Configuration
public class SpringHttpSessionConfig {
@Bean
public MapSessionRepository sessionRepository() {
return new MapSessionRepository(new ConcurrentHashMap<>());
}
}
ただし、本番環境ではRedisを使っていて切り替える必要がある場合は上記のコードでは上手くいかなかった。
Dockerで簡単にRedis立ち上げられるので、最初からhash_map使わずに、Redisで開発するのが良いと思う。
Thymeleafの属性指定でエラー
Thymeleaf2→3になった影響で書き方が変わった。
before
<a href="#" th:onclick="'changeLocation(\'' + ${id} + '\');'" />
after
<a href="#" th:attr="onclick='changeLocation(' + ${id} + ');'" />
さいごに
上記以外にも色々ハマってます。(現在進行系)
順次追記していこうと思います。