{"id":138,"date":"2023-01-19T18:38:09","date_gmt":"2023-01-19T09:38:09","guid":{"rendered":"https:\/\/hirabay.net\/?p=138"},"modified":"2023-02-08T21:21:55","modified_gmt":"2023-02-08T12:21:55","slug":"springboot-2-4-to-2-5-%e3%83%a1%e3%83%a2","status":"publish","type":"post","link":"https:\/\/hirabay.net\/?p=138","title":{"rendered":"SpringBoot 2.4 to 2.5 \u30e1\u30e2"},"content":{"rendered":"\n<p>springboot 2.5\u304cGA\u3068\u306a\u308a\u307e\u3057\u305f<br><a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-2.5-Release-Notes\" target=\"_blank\">Release Note<\/a>\u3092\u53c2\u8003\u306b2.4\u7cfb\u304b\u30892.5\u7cfb\u3078\u306e\u79fb\u884c\u65b9\u6cd5\u3092\u307e\u3068\u3081\u3066\u307f\u307e\u3059<br>\u81ea\u5206\u304c\u79fb\u884c\u3059\u308b\u3068\u304d\u306b\u95a2\u4fc2\u306e\u3042\u308b\u3082\u306e\u3084\u8208\u5473\u304c\u3042\u308b\u3082\u306e\u304c\u4e2d\u5fc3\u3068\u306a\u308a\u307e\u3059\u304c\u3054\u5bb9\u8d66\u304f\u3060\u3055\u3044\ud83d\ude47\u200d\u2642\ufe0f<\/p>\n\n\n\n<p>\u95a2\u9023\u8a18\u4e8b\u306f\u3053\u3061\u3089<\/p>\n\n\n<a class=\"linkto table\" href=\"https:\/\/hirabay.net\/?p=81\"><span class=\"tbcell tbimg\"><img loading=\"lazy\" decoding=\"async\" width=\"160\" height=\"160\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/01\/641f4e20d7d1577faae9ce68813c10e2-160x160.png\" class=\"attachment-thumb-160 size-thumb-160 wp-post-image\" alt=\"\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/01\/641f4e20d7d1577faae9ce68813c10e2-160x160.png 160w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/01\/641f4e20d7d1577faae9ce68813c10e2-150x150.png 150w\" sizes=\"auto, (max-width: 160px) 100vw, 160px\"><\/span><span class=\"tbcell tbtext\"><time class=\"pubdate sng-link-time dfont\" itemprop=\"datePublished\" datetime=\"2023-01-18\">2023\u5e741\u670818\u65e5<\/time>SpringBoot Update\u307e\u3068\u3081<\/span><\/a>\n\n\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/c4179872\/public_html\/hirabay.net\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>110<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/c4179872\/public_html\/hirabay.net\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>115<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/c4179872\/public_html\/hirabay.net\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>122<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">\n  <li class=\"first\">\n    <a href=\"#i-0\">Minimum Requirements Changes<\/a>\n  <\/li>\n  <li>\n    <a href=\"#i-1\">Gradle Default jar and war Tasks<\/a>\n    <ul class=\"menu_level_1\">\n      <li class=\"first\">\n        <a href=\"#i-2\">-plain\u3092\u53d6\u308a\u9664\u304f<\/a>\n      <\/li>\n      <li class=\"last\">\n        <a href=\"#i-3\">enabled\u3067\u7121\u52b9\u5316\u3059\u308b<\/a>\n      <\/li>\n    <\/ul>\n  <\/li>\n  <li>\n    <a href=\"#i-4\">Environment Variable Prefixes<\/a>\n  <\/li>\n  <li>\n    <a href=\"#i-5\">OpenMetrics for Prometheus<\/a>\n  <\/li>\n  <li>\n    <a href=\"#i-6\">Metrics for Spring Data Repositories<\/a>\n    <ul class=\"menu_level_1\">\n      <li class=\"first last\">\n        <a href=\"#i-7\">\u88dc\u8db3\uff1a\u00a0@Timed\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3<\/a>\n      <\/li>\n    <\/ul>\n  <\/li>\n  <li class=\"last\">\n    <a href=\"#i-8\">Java 16 \/ Gradle 7 Support<\/a>\n  <\/li>\n<\/ul>\n\n      \n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Minimum Requirements Changes<\/h2>\n\n\n\n<p>\u5bfe\u5fdc\u3059\u308bGradle\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c<code>6.8\u4ee5\u964d<\/code>\u3068\u306a\u308a\u307e\u3057\u305f\u3002<br>\u6295\u7a3f\u6642\u70b9\u306e\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3<code>7.0.2<\/code>\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u30b3\u30de\u30f3\u30c9\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-bash\" data-lang=\"Bash\"><code>.\/gradlew wrapper --gradle-version 7.0.2<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-1\">Gradle Default jar and war Tasks<\/h2>\n\n\n\n<p><code>jar<\/code>,&nbsp;<code>war<\/code>\u30bf\u30b9\u30af\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u6709\u52b9\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u305d\u3057\u3066\u3001bootJar\u306e\u751f\u6210\u3057\u305fjar\u30d5\u30a1\u30a4\u30eb\u3068\u885d\u7a81\u3057\u306a\u3044\u3088\u3046<code>jar<\/code>,&nbsp;<code>war<\/code>\u30bf\u30b9\u30af\u3067\u751f\u6210\u3055\u308c\u308b\u30d5\u30a1\u30a4\u30eb\u306b\u300c<code>-plain<\/code>\u300d\u304c\u4ed8\u4e0e\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0bTips\u3067\u3059<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\"><code>-plain<\/code>\u3092\u53d6\u308a\u9664\u304f<\/h3>\n\n\n\n<p><code>archiveClassifier<\/code>\u3067\u7a7a\u6587\u5b57\u3092\u6307\u5b9a\u3057\u3066\u3042\u3052\u308c\u3070OK<\/p>\n\n\n\n<p>\u203bRelease note\u3067\u306f<code>classifier<\/code>\u304c\u7d39\u4ecb\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u975e\u63a8\u5968\u3068\u306a\u3063\u3066\u3044\u307e\u3057\u305f\u2026<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-groovy\" data-file=\"build.gradle\" data-lang=\"Groovy\"><code>archivesBaseName = 'sample'\n\nbootJar {\n    archiveClassifier = 'boot'\n}\n\njar {\n    archiveClassifier = ''\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u3053\u306e\u8a2d\u5b9a\u3060\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\uff12\u3064\u306ejar\u30d5\u30a1\u30a4\u30eb\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-plain\"><code>build\n...\n\u251c\u2500\u2500 libs\n\u2502   \u251c\u2500\u2500 sample-boot.jar\n\u2502   \u2514\u2500\u2500 sample.jar\n...<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\"><code>enabled<\/code>\u3067\u7121\u52b9\u5316\u3059\u308b<\/h3>\n\n\n\n<p><code>enabled = false<\/code>\u3092\u8a2d\u5b9a\u3059\u308b\u3068jar\u306e\u751f\u6210\u3092\u7121\u52b9\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-groovy\" data-file=\"build.gradle\" data-lang=\"Groovy\"><code>\/\/ jar\u306e\u751f\u6210\u3092\u7121\u52b9\u5316\u3057\u305f\u3044\u5834\u5408\njar {\n    enabled = false\n}\n\n\/\/ bootJar\u306e\u751f\u6210\u3092\u7121\u52b9\u5316\u3057\u305f\u3044\u5834\u5408\nbootJar {\n    enabled = false\n}<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">Environment Variable Prefixes<\/h2>\n\n\n\n<p>\u74b0\u5883\u5909\u6570\u306bprefix\u3092\u4ed8\u4e0e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u3088\u3046\u3067\u3059\u3002<\/p>\n\n\n\n<p>prefix\u3092\u4ed8\u4e0e\u3059\u308b\u306b\u306fmain\u30af\u30e9\u30b9\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a18\u8ff0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>@SpringBootApplication\npublic class Application {\n    public static void main(String[] args) {\n        SpringApplication application = new SpringApplication(Application.class);\n        application.setEnvironmentPrefix(\"prefix\");\n        application.run(args);\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u3053\u306e\u72b6\u614b\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3059\u308b\u3068<code>server.port<\/code>\u3092\u5909\u66f4\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8d77\u52d5\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-bash\" data-lang=\"Bash\"><code>PREFIX_SERVER_PORT=8081 .\/gradlew bootRun<\/code><\/pre><\/div>\n\n\n\n<p>\u5f53\u7136<code>SERVER_PORT<\/code>\u3067\u306f\u5909\u66f4\u304c\u3067\u304d\u306a\u304f\u306a\u308b\u306e\u3067\u3001\u65e2\u5b58\u30b7\u30b9\u30c6\u30e0\u306b\u3053\u306e\u5909\u66f4\u3092\u5165\u308c\u308b\u30e1\u30ea\u30c3\u30c8\u306f\u306a\u3044\u304b\u306a\u3041\u3002\u3002\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-5\">OpenMetrics for Prometheus<\/h2>\n\n\n\n<p><code>\/actuator\/prometheus<\/code>\u3092\u53e9\u304f\u3068\u304d\u306bHeader\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067OpenMetrics\u5f62\u5f0f\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u8fd4\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p>\u30c7\u30d5\u30a9\u30eb\u30c8\u306fprometheus\u5f62\u5f0f\u3067\u3001Accept\u30d8\u30c3\u30c0\u30fc\u306b<code>application\/openmetrics-text<\/code>\u3092\u8f09\u305b\u308b\u3068OpenMetrics\u5f62\u5f0f\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-bash\" data-lang=\"Bash\"><code>curl http:\/\/localhost:8080\/actuator\/prometheus -H 'Accept: application\/openmetrics-text'<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">Metrics for Spring Data Repositories<\/h2>\n\n\n\n<p>Spring Data repositories\u306e\u30e1\u30c8\u30ea\u30af\u30b9\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u53ce\u96c6\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff01\u2728<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u306eJPA\u3060\u3068<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>public interface UserRepository extends CrudRepository&lt;User, String&gt; {\n    Optional&lt;User&gt; findById(String id);\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u3053\u3093\u306a\u30e1\u30c8\u30ea\u30af\u30b9\u304c\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-plain\" data-file=\"\u30e1\u30c8\u30ea\u30af\u30b9\u30b5\u30f3\u30d7\u30eb\"><code># HELP spring_data_repository_invocations_seconds_max\n# TYPE spring_data_repository_invocations_seconds_max gauge\nspring_data_repository_invocations_seconds_max{exception=\"None\",method=\"findById\",repository=\"UserRepository\",state=\"SUCCESS\",} 0.03175074\n# HELP spring_data_repository_invocations_seconds\n# TYPE spring_data_repository_invocations_seconds summary\nspring_data_repository_invocations_seconds_count{exception=\"None\",method=\"findById\",repository=\"UserRepository\",state=\"SUCCESS\",} 1.0\nspring_data_repository_invocations_seconds_sum{exception=\"None\",method=\"findById\",repository=\"UserRepository\",state=\"SUCCESS\",} 0.03175074<\/code><\/pre><\/div>\n\n\n\n<p><code>application.yml<\/code>\u3067\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-yaml\" data-file=\"application.yml\" data-lang=\"Yaml\"><code>management:\n  endpoints:\n    web:\n      exposure:\n        include: \"prometheus\"\n  metrics:\n    data:\n      repository:\n        autotime:\n          # \u81ea\u52d5\u3067\u30e1\u30c8\u30ea\u30af\u30b9\u3092\u53ce\u96c6\u3059\u308b\u304b\u3069\u3046\u304b\uff1f\n          # false\u3092\u6307\u5b9a\u3059\u308b\u3068\u500b\u5225\u306b\u300c@Timed\u300d\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u4ed8\u4e0e\u304c\u5fc5\u8981\n          enabled: true\n          # \u30d1\u30fc\u30bb\u30f3\u30bf\u30a4\u30eb\u3082\u53d6\u5f97\u3059\u308b\n          percentiles: 0.5,0.99\n        # \u30e1\u30c8\u30ea\u30af\u30b9\u540d\u3092\u6307\u5b9a\u3059\u308b\n        metric-name: \"spring.data.repository.invocations\"<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u88dc\u8db3\uff1a&nbsp;<code>@Timed<\/code>\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3<\/h3>\n\n\n\n<p><code>@Timed<\/code>\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u4efb\u610f\u306e\u30e1\u30bd\u30c3\u30c9\u3067\u30e1\u30c8\u30ea\u30af\u30b9\u8a08\u6e2c\u304c\u3067\u304d\u308b\u2026\uff01<\/p>\n\n\n\n<p>\u4f7f\u3044\u65b9\u306f<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>spring-boot-starter-aop\u3092\u4f9d\u5b58\u306b\u52a0\u3048\u3066<\/li>\n\n\n\n<li><code>TimedAspect<\/code>\u3092Bean\u767b\u9332\u3057<\/li>\n\n\n\n<li>\u30e1\u30c8\u30ea\u30af\u30b9\u3092\u53d6\u308a\u305f\u3044\u30e1\u30bd\u30c3\u30c9\u306b<code>@Timed<\/code>\u3092\u4ed8\u4e0e\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<p>\u3060\u3051\uff01\u4fbf\u5229\u3059\u304e\uff01<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-groovy\" data-file=\"build.gradle\" data-lang=\"Groovy\"><code>dependencies {\n    ...\n    \/\/ 1. spring-boot-starter-aop\u3092\u4f9d\u5b58\u306b\u8ffd\u52a0\n    implementation 'org.springframework.boot:spring-boot-starter-aop'\n    ...\n}<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>import io.micrometer.core.aop.TimedAspect;\nimport io.micrometer.core.instrument.MeterRegistry;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class ApplicationConfiguration {\n    \/\/ TimedAspect\u3092Bean\u767b\u9332\n    @Bean\n    public TimedAspect timedAspect(MeterRegistry registry) {\n        return new TimedAspect(registry);\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>import io.micrometer.core.annotation.Timed;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Select;\n\nimport java.util.Optional;\n\n@Mapper\npublic interface UserRepository {\n    \/\/ @Timed\u3092\u4ed8\u4e0e\n    @Timed(value = \"sql.time\")\n    @Select(\"SELECT * FROM USER WHERE id = #{id}\")\n    Optional&lt;User&gt; findById(String id);\n}<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-8\">Java 16 \/ Gradle 7 Support<\/h2>\n\n\n\n<p>Java 16\u3068Gradle 7\u304c\u305d\u308c\u305e\u308c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>springboot 2.5\u304cGA\u3068\u306a\u308a\u307e\u3057\u305fRelease Note\u3092\u53c2\u8003\u306b2.4\u7cfb\u304b\u30892.5\u7cfb\u3078\u306e\u79fb\u884c\u65b9\u6cd5\u3092\u307e\u3068\u3081\u3066\u307f\u307e\u3059\u81ea\u5206\u304c\u79fb\u884c\u3059\u308b\u3068\u304d\u306b\u95a2\u4fc2\u306e\u3042\u308b\u3082\u306e\u3084\u8208\u5473\u304c\u3042\u308b\u3082\u306e\u304c\u4e2d\u5fc3\u3068\u306a\u308a\u307e\u3059\u304c\u3054\u5bb9\u8d66\u304f\u3060\u3055\u3044\ud83d\ude47\u200d\u2642\ufe0f \u95a2 &#8230; <\/p>\n","protected":false},"author":1,"featured_media":139,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[13,31],"class_list":{"0":"post-138","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-6","8":"tag-springboot","9":"tag-springboot2-5"},"jetpack_featured_media_url":"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/01\/SpringBoot2_5.png","_links":{"self":[{"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/posts\/138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=138"}],"version-history":[{"count":3,"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/posts\/138\/revisions"}],"predecessor-version":[{"id":223,"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/posts\/138\/revisions\/223"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/media\/139"}],"wp:attachment":[{"href":"https:\/\/hirabay.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}