Spring Bootアプリケーションのアプリケーションバージョンをビューに表示しようとしています。私はこのバージョン情報にアクセスできると確信していますが、その方法がわかりません。
次の情報を試してみました: https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html 、これを_application.properties
_:
_info.build.version=${version}
_
そして、それを私のコントローラーに@Value("${version.test}")
でロードしますが、それはうまくいきません、私は次のようなエラーのみを受け取ります:
_Caused by: Java.lang.IllegalArgumentException: Could not resolve placeholder 'version' in string value "${version}"
_
アプリのバージョン、スプリングブートのバージョンなどの情報をコントローラーに取得する適切な方法について何か提案はありますか?
リファレンスドキュメントで説明 のように、アプリケーションのリソースを処理するようにGradleに指示して、${version}
プレースホルダーをプロジェクトのバージョンで置き換えるようにする必要があります。
processResources {
expand(project.properties)
}
安全のために、application.properties
のみが処理されるように絞り込みたい場合があります。
processResources {
filesMatching('application.properties') {
expand(project.properties)
}
}
ここで、プロパティの名前がinfo.build.version
であると仮定すると、@Value
を介して利用できます。
@Value("${info.build.version}")
これをapplication.ymlに以下を追加することで解決しました:
${version?:unknown}
また、cli:gradle bootRunやIntelliJからも機能し、IntelliJで起動する前にGradleタスクprocessResourcesを呼び出したり、Springプロファイルを使用したりする必要はありません。
これは、Gradle ver:4.6およびSpring Boot ver:2.0.1.RELEASEでも動作します。それが役に立てば幸い ;)
私はそれをこのように解決しました:info.build.version
でapplication.properties
を定義します:
info.build.version=whatever
あなたのコンポーネントでそれを使う
@Value("${info.build.version}")
private String version;
次のようにbuild.gradle
ファイルにバージョン情報を追加します:
version = '0.0.2-SNAPSHOT'
次に、application.propertiesを正規表現に置き換えるメソッドを追加して、そこでバージョン情報を更新します。
def updateApplicationProperties() {
def configFile = new File('src/main/resources/application.properties')
println "updating version to '${version}' in ${configFile}"
String configContent = configFile.getText('UTF-8')
configContent = configContent.replaceAll(/info\.build\.version=.*/, "info.build.version=${version}")
configFile.write(configContent, 'UTF-8')
}
最後に、build
またはbootRun
をトリガーしたときにメソッドが呼び出されるようにします。
allprojects {
updateVersion()
}
それでおしまい。このソリューションは、Gradleにアプリをコンパイルさせる場合と、IDEからSpring Bootアプリを実行する場合に機能します。値は更新されませんが、例外はスローされません。Gradleを実行するとすぐに、値が再度更新されます。
これが他の人に役立つことと、問題が解決したことを願っています。もっと適切な解決策が見つからなかったので、自分でスクリプトを作成しました。
これを_build.gradle
_に追加することもできます:
_springBoot {
buildInfo()
}
_
次に、BuildProperties
Beanを使用できます。
_@Autowired
private BuildProperties buildProperties;
_
そして、buildProperties.getVersion()
でバージョンを取得します