Spring Boot 2でライブラリ関係の設定のメモ(lombok,log4j)

Spring Boot 2を使うかもしれないので、本を買って仕様を確認中に、引っかかった問題。

@DataをつけたクラスのprivateフィールドがRESTの口で出てこない

このアノテーションはlombokに含まれているもので、private変数のgetterやsetterを自動で作ってくれると参照している本のサンプルコードに記述されていたものです。

プロパティを自分で定義しなくても、このアノテーションをつけたクラスをREST APIのパラメータに渡せば、JSONから自動で変換してくれるということでしたが、以下のようなエラーがでました。

cannot deserialize from Object value (no delegate- or property-based Creator)

単純なことですが、gradleなどでlombok-1.16.20.jarのようなjarファイルをダウンロードするだけではだめで、ダブルクリックしてインストールしないといけないらしいですね。

https://projectlombok.org/mavenrepo/

一番下のNOTEを参照。

問題解決しようと試行錯誤している最中には、@PostMappingつけたメソッドがHTTP ステータス 415返す問題も発生しましたが、そちらもインストールしたら解決しました。

なお、OpenJDKでも試してみましたが、こちらはインストーラ使わなかったからか、ダブルクリックで反応がなかったので、以下のコマンドでインストールします。

jarの名前はバージョン番号付きの実際のファイル名に置き換えてください。

javaw -jar lombok.jar

log4j2.xmlおいても見てくれない

普段log4netなどを使っているので、log4j2を利用しようと思って、build.gradleにlog4j2のcompile指定をつけてもログがファイルに出力されない。

log4j2.xmlの配置場所や定義をいろいろ変更してみましたが、そうでなくてSpring Boot 2がデフォルトで持っているログ用モジュールを除外しないといけなかったようです。

また、以下の指定でもlog4j-api-2.10.0.jarがProject and External Dependenciesに表示される、log4jのログが利用可能になりました。

dependencies {
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
compile('org.springframework.boot:spring-boot-starter-webflux') {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
compileOnly('org.projectlombok:lombok')
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('io.projectreactor:reactor-test')
}

他にapplication.propertiesに

logging.level.root=INFO
logging.file=logs/logfile.log

を指定することで、開発中のアプリケーションパス\logs\logfile.logに出力されるようになりました。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする