{"id":7037,"date":"2022-11-18T16:04:44","date_gmt":"2022-11-18T07:04:44","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=7037"},"modified":"2022-11-21T13:53:19","modified_gmt":"2022-11-21T04:53:19","slug":"applicationeventpublisher-%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-%ec%9d%b4%eb%b2%a4%ed%8a%b8-%ec%b2%98%eb%a6%ac","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=7037","title":{"rendered":"ApplicationEventPublisher \ub97c \uc774\uc6a9\ud55c \uc774\ubca4\ud2b8 \ucc98\ub9ac"},"content":{"rendered":"<h1>ApplicationEventPublisher \ub97c \uc774\uc6a9\ud55c \uc774\ubca4\ud2b8 \ucc98\ub9ac<\/h1>\n<p><a href=\"https:\/\/kimchanjung.github.io\/programming\/2020\/06\/28\/spring-jpa-antity-listner-autowired-not-working\/\">\ucc38\uc870<\/a><\/p>\n<p><a href=\"https:\/\/atoz-develop.tistory.com\/entry\/Spring-ApplicationEventPublisher%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D\">\ucc38\uc870<\/a><\/p>\n<p>\uc774\ubca4\ud2b8 \uc218\uc2e0\uc744 \ub2e4\uc218\uc758 \ud074\ub798\uc2a4\uc5d0\uc11c \ubc1b\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c,<br \/>\n\uc774\ubca4\ud2b8 \ucc98\ub9ac\ub97c \ud55c\uacf3\uc5d0 \ubaa8\uc73c\uc9c0 \uc54a\uc544\ub3c4 \ub418\uc11c \uc88b\ub2e4.<\/p>\n<p>\uc774\ubca4\ud2b8 \uc218\uc2e0\uc740 \uae30\ubcf8\uc801\uc73c\ub85c \ub3d9\uae30\uc2dd\uc73c\ub85c \uc791\ub3d9\ud55c\ub2e4.<br \/>\n\ube44\ub3d9\uae30\ub85c \ucc98\ub9ac\ud558\uae30 \uc704\ud574\uc11c\ub294 <code>@Async<\/code> \ub97c \ubd99\uc5ec\uc8fc\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<h2>Event \uc0dd\uc131<\/h2>\n<pre><code class=\"language-java\">@Getter\n@RequiredArgsConstructor\npublic class StockIpgoEvent {\n    private final Object data;\n}<\/code><\/pre>\n<h2>Listener \uc0dd\uc131<\/h2>\n<pre><code class=\"language-java\">@Component\npublic class StockIpgoListener {\n\n    @Autowired\n    private ApplicationEventPublisher eventPublisher;\n\n    @PostLoad\n    void postLoad(Object o) {\n        if (o instanceof IpgoMaster) {\n            System.out.println(&quot;11111 PostLoad&quot; + ((IpgoMaster) o).getIpgoDate());\n            eventPublisher.publishEvent(new StockIpgoEvent(&quot;after select&quot;));\n        }\n    }\n\n    @PostUpdate\n    void postUpdate(Object o) {\n        if (o instanceof IpgoMaster) {\n            System.out.println(&quot;11111 PostUpdate&quot; + ((IpgoMaster) o).getIpgoDate());\n            eventPublisher.publishEvent(new StockIpgoEvent(&quot;after update&quot;));\n        }\n    }\n}<\/code><\/pre>\n<h2>Entity \uc5d0 Listener \ucd94\uac00<\/h2>\n<p>Listener \ub610\ud55c \uc5ec\ub7ec\uac1c \ucd94\uac00\ud560 \uc218 \uc788\ub2e4.<\/p>\n<pre><code class=\"language-java\">@Entity\n@EntityListeners(value = {StockIpgoListener.class})\npublic class IpgoMaster {\n    \/\/ ......\n}<\/code><\/pre>\n<h2>EventHandler \ucd94\uac00<\/h2>\n<p>JPA CRUD \uac00 \ud544\uc694\ud55c \uacbd\uc6b0 \ubc18\ub4dc\uc2dc <code>@Async<\/code> \uac00 \ub418\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<p>\ubaa8\ub4e0 \ub3d9\uc791\uc740 \ub3d9\uae30\ub85c \uc774\ub8e8\uc5b4\uc9c4\ub2e4.<br \/>\n\uc989, <code>@PostUpdate<\/code> \uc5d0\uc11c \ud638\ucd9c\ud558\ub294 <code>@EventListener<\/code> \uac00 \ub3d9\uae30\ub85c \uc791\ub3d9\ud558\uac8c \ub418\uba74,<br \/>\nJPA CRUD \uac00 \ud638\ucd9c\ub420 \ub54c \uc5c5\ub370\uc774\ud2b8\ud574\uc57c\ud560 \ub370\uc774\ud0c0\uac00 \ub0a8\uc544 \uc788\ub294 \uac83\uc73c\ub85c \uc778\uc2dd\ub418\uace0,<br \/>\n<code>@PostUpdate<\/code> \uac00 \ud638\ucd9c\ub418\uace0 \uc774 \uc0c1\ud0dc\uac00 \ubb34\ud55c\ub8e8\ud504\ub85c \ubc18\ubcf5\ub41c\ub2e4.<\/p>\n<p>\ub530\ub77c\uc11c JPA CRUD \ub294 \ube44\ub3d9\uae30\ub85c \ud2b8\ub80c\uc81d\uc158\uc744 \ubc97\uc5b4\ub098\uc11c \uc774\ub8e8\uc5b4\uc838\uc57c \ud55c\ub2e4.<\/p>\n<pre><code class=\"language-java\">@Component\npublic class StockIpgoEventHandler {\n\n    @EventListener\n    public void onStockIpgoEventBefore(StockIpgoEvent event) {\n        \/\/ @PostLoad \uc774\ubca4\ud2b8\ub9cc \uc218\uc2e0\ud558\ub3c4\ub85d \uc124\uc815 \ud544\uc694\n        \/\/ after select\n        \/\/ JPA Query \uac00\ub2a5\n    }\n\n    @EventListener\n    public void onStockIpgoEventAfter(StockIpgoEvent event) {\n        \/\/ @PostUpdate \uc774\ubca4\ud2b8\ub9cc \uc218\uc2e0\ud558\ub3c4\ub85d \uc124\uc815 \ud544\uc694\n        \/\/ \ub3d9\uae30 \uc791\ub3d9\uc911\n        \/\/ after update\n        \/\/ JPA Query \ubd88\uac00\ub2a5(\ud2b8\ub80c\uc81d\uc158 \uc9c4\ud589\uc911)\n        \/\/ @Transient \uc218\uc815 \uac00\ub2a5\n    }\n\n    @Async\n    @EventListener\n    public void onStockIpgoEventAsync(StockIpgoEvent event) {\n        \/\/ @PostUpdate \uc774\ubca4\ud2b8\ub9cc \uc218\uc2e0\ud558\ub3c4\ub85d \uc124\uc815 \ud544\uc694\n        \/\/ \ube44\ub3d9\uae30 \uc791\ub3d9\uc911\n        \/\/ after update\n        \/\/ JPA Query \uac00\ub2a5(\ud2b8\ub80c\uc81d\uc158 \ubc97\uc5b4\ub0a8)\n        \/\/ @Transient \uc218\uc815 \uac00\ub2a5\n    }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>ApplicationEventPublisher \ub97c \uc774\uc6a9\ud55c \uc774\ubca4\ud2b8 \ucc98\ub9ac \ucc38\uc870 \ucc38\uc870 \uc774\ubca4\ud2b8 \uc218\uc2e0\uc744 \ub2e4\uc218\uc758 \ud074\ub798\uc2a4\uc5d0\uc11c \ubc1b\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c, \uc774\ubca4\ud2b8 \ucc98\ub9ac\ub97c \ud55c\uacf3\uc5d0 \ubaa8\uc73c\uc9c0 \uc54a\uc544\ub3c4 \ub418\uc11c \uc88b\ub2e4. \uc774\ubca4\ud2b8 \uc218\uc2e0\uc740 \uae30\ubcf8\uc801\uc73c\ub85c \ub3d9\uae30\uc2dd\uc73c\ub85c \uc791\ub3d9\ud55c\ub2e4. \ube44\ub3d9\uae30\ub85c \ucc98\ub9ac\ud558\uae30 \uc704\ud574\uc11c\ub294 @Async \ub97c \ubd99\uc5ec\uc8fc\uc5b4\uc57c \ud55c\ub2e4. Event \uc0dd\uc131 @Getter @RequiredArgsConstructor public class StockIpgoEvent { private final Object data; } Listener \uc0dd\uc131 @Component public class StockIpgoListener { @Autowired private\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=7037\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29],"tags":[],"class_list":["post-7037","post","type-post","status-publish","format-standard","hentry","category-spring-boot-2-5"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7037","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7037"}],"version-history":[{"count":10,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7037\/revisions"}],"predecessor-version":[{"id":7057,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7037\/revisions\/7057"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}