{"id":94755,"date":"2025-01-27T03:27:46","date_gmt":"2025-01-26T23:57:46","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/spring-batch-5-a-simple-use-case-with-tests-4fmi\/"},"modified":"2025-01-27T03:27:46","modified_gmt":"2025-01-26T23:57:46","slug":"spring-batch-5-a-simple-use-case-with-tests-4fmi","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/spring-batch-5-a-simple-use-case-with-tests-4fmi\/","title":{"rendered":"\u0628\u0647\u0627\u0631 \u062f\u0633\u062a\u0647 5: \u06cc\u06a9 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0633\u0627\u062f\u0647 \u0628\u0627 \u062a\u0633\u062a \u0647\u0627"},"content":{"rendered":"<div data-article-id=\"2242771\" id=\"article-body\" wp_automatic_readability=\"274.58404345974\">\n<p><strong>\u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627: \u062f\u0627\u0646\u0634 \u0627\u0633\u0627\u0633\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u062c\u0627\u0648\u0627 \u060c \u062f\u0633\u062a\u0647 \u0628\u0647\u0627\u0631 \u060c \u0628\u0647\u0627\u0631 JPA.<\/strong><\/p>\n<p>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062f \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0648\u0628\u0644\u0627\u06af \u0631\u0627 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062e\u0632\u0646 GitHub \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0647\u0627\u0631 \u062f\u0633\u062a\u0647 \u0686\u0627\u0631\u0686\u0648\u0628\u06cc \u062f\u0631 \u0627\u06a9\u0648\u0633\u06cc\u0633\u062a\u0645 \u0628\u0647\u0627\u0631 \u0627\u0633\u062a \u06a9\u0647 \u062a\u0648\u0633\u0639\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u062f\u0633\u062a\u0647 \u0627\u06cc \u0631\u0627 \u0633\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u067e\u0631\u062f\u0627\u0632\u0634 \u062f\u0633\u062a\u0647 \u0627\u06cc \u0634\u0627\u0645\u0644 \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0628\u0647 \u0637\u0648\u0631 \u0647\u0645\u0632\u0645\u0627\u0646 \u060c \u0627\u063a\u0644\u0628 \u0628\u0647 \u0635\u0648\u0631\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u06cc\u0632\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u06a9\u0627\u062a \u0627\u0635\u0644\u06cc \u0628\u0647 \u0632\u0628\u0627\u0646 \u0633\u0627\u062f\u0647 \u062a\u0631 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<ol>\n<li>\u0622\u0633\u0627\u0646\u062a\u0631 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u0631\u0647\u0627: \u0627\u06cc\u0646 \u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627 \u0628\u0627 \u0627\u0631\u0627\u0626\u0647 \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0648 \u0645\u0624\u0644\u0641\u0647 \u0647\u0627\u06cc \u0622\u0645\u0627\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u060c \u0628\u0627 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u062f\u0633\u062a\u0647 \u0627\u06cc \u0645\u0642\u0627\u0628\u0644\u0647 \u06a9\u0646\u0646\u062f.<\/li>\n<li>\u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 \u0686\u06cc\u0632\u0647\u0627: \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u0639\u0627\u0645\u0644\u0627\u062a \u060c \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0633\u0627\u0632\u06af\u0627\u0631 \u0648 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0647\u0633\u062a\u0646\u062f \u060c \u062d\u062a\u06cc \u0627\u06af\u0631 \u0686\u06cc\u0632\u06cc \u062f\u0631 \u0637\u0648\u0644 \u067e\u0631\u062f\u0627\u0632\u0634 \u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0627\u0634\u062f.<\/li>\n<li>\u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0628\u0632\u0631\u06af: \u0628\u0627 \u0627\u062c\u0627\u0632\u0647 \u062f\u0627\u062f\u0646 \u0628\u0647 \u0627\u0646\u062c\u0627\u0645 \u06a9\u0627\u0631\u0647\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u0648\u0627\u0632\u06cc \u060c \u0634\u06a9\u0633\u062a\u0646 \u0622\u0646\u0647\u0627 \u0628\u0647 \u0642\u0637\u0639\u0627\u062a \u06a9\u0648\u0686\u06a9\u062a\u0631 \u0648 \u067e\u0631\u062f\u0627\u0632\u0634 \u06cc\u06a9 \u062a\u06a9\u0647 \u062f\u0631 \u06cc\u06a9 \u0632\u0645\u0627\u0646 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0645\u0642\u0627\u062f\u06cc\u0631 \u0632\u06cc\u0627\u062f\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0627\u0631\u0622\u0645\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f.<\/li>\n<li>\u06a9\u0627\u0631 \u0633\u0627\u0632\u0645\u0627\u0646 \u06cc\u0627\u0641\u062a\u0647: \u067e\u0631\u062f\u0627\u0632\u0634 \u062f\u0633\u062a\u0647 \u0627\u06cc \u0628\u0647 \u0645\u0634\u0627\u063a\u0644 \u062a\u0642\u0633\u06cc\u0645 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u0627\u0632 \u0645\u0631\u0627\u062d\u0644 \u062a\u0634\u06a9\u06cc\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a. \u06cc\u06a9 \u06a9\u0627\u0631 \u0645\u0627\u0646\u0646\u062f \u06a9\u0627\u0631 \u06a9\u0644\u06cc \u0627\u0633\u062a \u0648 \u0645\u0631\u0627\u062d\u0644 \u0628\u062e\u0634 \u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9\u062a\u0631 \u0622\u0646 \u06a9\u0627\u0631 \u0627\u0633\u062a.<\/li>\n<li>\u0628\u062e\u0648\u0627\u0646\u06cc\u062f \u060c \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f \u060c \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f: \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0633\u0627\u062f\u0647 \u062e\u0648\u0627\u0646\u062f\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0627\u0632 \u06cc\u06a9 \u0645\u0646\u0628\u0639 \u060c \u0627\u0646\u062c\u0627\u0645 \u0628\u0631\u062e\u06cc \u06a9\u0627\u0631\u0647\u0627 \u0631\u0648\u06cc \u0622\u0646 \u0648 \u0633\u067e\u0633 \u0646\u0648\u0634\u062a\u0646 \u0622\u0646 \u0628\u0647 \u06cc\u06a9 \u0645\u0642\u0635\u062f. \u0627\u06cc\u0646\u06af\u0648\u0646\u0647 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\u0628\u0631\u062e\u0648\u0631\u062f \u0628\u0627 \u0645\u0634\u06a9\u0644\u0627\u062a: \u0631\u0627\u0647 \u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u0645\u0642\u0627\u0628\u0644\u0647 \u0628\u0627 \u0645\u0648\u0636\u0648\u0639\u0627\u062a\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u0647 \u0648 \u067e\u0631\u0634 \u0627\u0632 \u0633\u0648\u0627\u0628\u0642 \u06a9\u0647 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u0634\u0648\u0646\u062f \u060c \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0633\u0641\u0627\u0631\u0634\u06cc: \u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u06a9\u062f \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0646\u0642\u0627\u0637 \u0645\u062e\u062a\u0644\u0641 \u067e\u0631\u062f\u0627\u0632\u0634 \u062f\u0633\u062a\u0647 \u0627\u06cc \u0645\u0627\u0646\u0646\u062f \u0642\u0628\u0644 \u06cc\u0627 \u0628\u0639\u062f \u0627\u0632 \u06cc\u06a9 \u0645\u0631\u062d\u0644\u0647 \u06cc\u0627 \u06a9\u0627\u0631 \u060c \u0633\u0641\u0627\u0631\u0634\u06cc \u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0646\u062f.<\/li>\n<\/ol>\n<p>\u0627\u0632 \u0646\u0638\u0631 \u0639\u0645\u0644\u06cc \u060c \u062f\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u0628\u0647\u0627\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0647\u0646\u06af\u0627\u0645\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u0646\u0638\u0645 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u060c \u0645\u0627\u0646\u0646\u062f \u0647\u0646\u06af\u0627\u0645 \u062c\u0627\u0628\u062c\u0627\u06cc\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u06cc\u0646 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627 \u060c \u062a\u0628\u062f\u06cc\u0644 \u0622\u0646 \u06cc\u0627 \u0627\u0646\u062c\u0627\u0645 \u06a9\u0627\u0631\u0647\u0627\u06cc \u062f\u0648\u0631\u0647 \u0627\u06cc \u0645\u0627\u0646\u0646\u062f \u062a\u0648\u0644\u06cc\u062f \u06af\u0632\u0627\u0631\u0634. \u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u06a9\u0644 \u0641\u0631\u0622\u06cc\u0646\u062f \u0642\u0627\u0628\u0644 \u06a9\u0646\u062a\u0631\u0644 \u062a\u0631 \u0648 \u0645\u0633\u062a\u0639\u062f \u062e\u0637\u0627 \u0628\u0627\u0634\u062f.<\/p>\n<p>\u0686\u0627\u0644\u0634 \u0628\u0631\u0627\u0646\u06af\u06cc\u0632\u062a\u0631\u06cc\u0646 \u0628\u062e\u0634 \u062f\u0631 \u062f\u0633\u062a\u0647 \u0628\u0647\u0627\u0631 \u0646\u062d\u0648\u0647 \u0646\u0648\u0634\u062a\u0646 \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0648 \u0627\u062f\u063a\u0627\u0645 \u0627\u0633\u062a. \u0628\u0647 \u0637\u0648\u0631 \u0630\u0627\u062a\u06cc \u0627\u0632 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u062f\u0633\u062a\u0647 \u0627\u06cc \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645 \u06a9\u0647 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<p>\u067e\u0648\u0634\u0647 \u0627\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u0631\u0648\u0646\u062f\u0647 \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u062a\u0645\u0627\u0634\u0627 \u06a9\u0646\u06cc\u062f<br \/>\u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0627\u0632 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0645\u0633\u0637\u062d \u0647\u0646\u06af\u0627\u0645 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0646 \u0628\u0647 \u067e\u0648\u0634\u0647 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f<br \/>\u067e\u0631\u062f\u0627\u0632\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627<br \/>\u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f<br \/>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0645\u0627 \u0627\u0632 Course Batch 5 \u060c Spring Boot 3 \u060c Java 17 \u060c Mapstruct \u0628\u0631\u0627\u06cc \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0634\u06cc\u0621 \u0648 Maven \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0633\u0627\u062e\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0686\u06af\u0648\u0646\u0647 pom.xml \u0645\u0627 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"10\">\n<pre class=\"highlight plaintext\"><code><?xml version=\"1.0\" encoding=\"UTF-8\"????>\n<project xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xsi:schemalocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 https:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\">\n    <modelversion>4.0.0<\/modelversion>\n    <parent>\n        <groupid>org.springframework.boot<\/groupid>\n        <artifactid>spring-boot-starter-parent<\/artifactid>\n        <version>3.2.2<\/version>\n        <relativepath\/> <!-- lookup parent from repository -->\n    <\/parent>\n    <groupid>dev.sabri<\/groupid>\n    <artifactid>FolderMonitor<\/artifactid>\n    <version>0.0.1-SNAPSHOT<\/version>\n    <name>FolderMonitor<\/name>\n    <description>FolderMonitor<\/description>\n    <properties>\n        <java.version>17<\/java.version>\n        <map.struct.version>1.5.5.Final<\/map.struct.version>\n    <\/properties>\n    <dependencies>\n        <dependency>\n            <groupid>org.springframework.boot<\/groupid>\n            <artifactid>spring-boot-starter-batch<\/artifactid>\n        <\/dependency>\n        <dependency>\n            <groupid>org.springframework.boot<\/groupid>\n            <artifactid>spring-boot-starter-web<\/artifactid>\n        <\/dependency>\n        <dependency>\n            <groupid>org.springframework.boot<\/groupid>\n            <artifactid>spring-boot-starter-data-jpa<\/artifactid>\n        <\/dependency>\n        <dependency>\n            <groupid>com.h2database<\/groupid>\n            <artifactid>h2<\/artifactid>\n            <scope>runtime<\/scope>\n        <\/dependency>\n        <dependency>\n            <groupid>org.projectlombok<\/groupid>\n            <artifactid>lombok<\/artifactid>\n            <optional>true<\/optional>\n        <\/dependency>\n        <dependency>\n            <groupid>org.mapstruct<\/groupid>\n            <artifactid>mapstruct<\/artifactid>\n            <version>${map.struct.version}<\/version>\n        <\/dependency>\n        <dependency>\n            <groupid>org.mapstruct<\/groupid>\n            <artifactid>mapstruct-processor<\/artifactid>\n            <version>${map.struct.version}<\/version>\n        <\/dependency>\n        <dependency>\n            <groupid>org.springframework.boot<\/groupid>\n            <artifactid>spring-boot-starter-test<\/artifactid>\n            <scope>test<\/scope>\n        <\/dependency>\n        <dependency>\n            <groupid>org.springframework.batch<\/groupid>\n            <artifactid>spring-batch-test<\/artifactid>\n            <scope>test<\/scope>\n        <\/dependency>\n    <\/dependencies>\n\n    <build>\n        <plugins>\n            <plugin>\n                <groupid>org.springframework.boot<\/groupid>\n                <artifactid>spring-boot-maven-plugin<\/artifactid>\n                <configuration>\n                    <excludes>\n                        <exclude>\n                            <groupid>org.projectlombok<\/groupid>\n                            <artifactid>lombok<\/artifactid>\n                        <\/exclude>\n                    <\/excludes>\n                <\/configuration>\n            <\/plugin>\n        <\/plugins>\n    <\/build>\n\n<\/project><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062d\u0627\u0644 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0634\u06cc \u0645\u0648\u062c\u0648\u062f\u06cc\u062a \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"9\">\n<pre class=\"highlight plaintext\"><code>@Entity\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\n@ToString\npublic class Visitors {\n\n    @Id\n    private Long id;\n    private String firstName;\n    private String lastName;\n    private String emailAddress;\n    private String phoneNumber;\n    private String address;\n    private String visitDate;\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627 \u0628\u0647 \u06cc\u06a9 \u0634\u06cc DTO \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u06cc\u0645 \u06a9\u0647 \u0628\u0639\u062f\u0627\u064b \u0628\u0647 \u0645\u0648\u062c\u0648\u062f\u06cc\u062a \u0645\u0627 \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0645\u06cc \u0634\u0648\u062f. \u0645\u0627 \u0627\u0632 \u06cc\u06a9 \u0631\u06a9\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"14\">\n<pre class=\"highlight plaintext\"><code>@Builder\npublic record VisitorsDto(\n        Long id,\n        String firstName,\n        String lastName,\n        String emailAddress,\n        String phoneNumber,\n        String address,\n        String visitDate) {\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0631\u0627\u0628\u0637 MapStruct \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"8\">\n<pre class=\"highlight plaintext\"><code>@Mapper(componentModel = \"spring\")\npublic interface VisitorsMapper {\n\n    Visitors toVisitors(VisitorsDto visitorsDto);\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 jParePository \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0628\u0627\u0646\u06a9 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f \u060c \u0627\u06cc\u0646 \u06cc\u06a9 jparepository \u0633\u0627\u062f\u0647 \u0648 \u0628\u062f\u0648\u0646 \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"7\">\n<pre class=\"highlight plaintext\"><code>public interface VisitorsRepository extends JpaRepository<visitors long=\"\"> {\n}\n<\/visitors><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u06cc\u06a9 \u06a9\u0627\u0631 \u062f\u0633\u062a\u0647 \u0627\u06cc \u0628\u0647\u0627\u0631 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u062a\u0631\u06a9\u06cc\u0628\u06cc \u0627\u0632 \u06cc\u06a9 \u06cc\u0627 \u0686\u0646\u062f \u0645\u0631\u062d\u0644\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0647\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u062e\u0648\u062f\u06cc \u062e\u0648\u062f \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062d\u0627\u0648\u06cc \u06cc\u06a9 \u0648\u0638\u06cc\u0641\u0647 \u06cc\u0627 \u06cc\u06a9 \u0645\u0648\u0631\u062f Reader \u060c AttemProcessor \u0648 \u06cc\u06a9 \u0622\u06cc\u062a\u0645 \u0646\u0648\u06cc\u0633\u0646\u062f\u0647 \u0628\u0627\u0634\u062f.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u062a\u0639\u0631\u06cc\u0641 AtmiteReader \u062e\u0648\u062f \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645 \u060c \u0647\u062f\u0641 \u0627\u0635\u0644\u06cc \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u062e\u0648\u0627\u0646\u062f\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0627\u0632 \u067e\u0631\u0648\u0646\u062f\u0647 \u0645\u0633\u0637\u062d \u0645\u0627 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"10\">\n<pre class=\"highlight plaintext\"><code>  @Bean\n  @StepScope\n  public FlatFileItemReader<visitorsdto> flatFileItemReader(@Value(\"#{jobParameters['inputFile']}\") final String visitorsFile) throws IOException {\n        val flatFileItemReader = new FlatFileItemReader<visitorsdto>();\n        flatFileItemReader.setName(\"VISITORS_READER\");\n        flatFileItemReader.setLinesToSkip(1);\n        flatFileItemReader.setLineMapper(linMapper());\n        flatFileItemReader.setStrict(false);\n        flatFileItemReader.setResource(new FileSystemResource(visitorsFile));\n        return flatFileItemReader;\n}\n<\/visitorsdto><\/visitorsdto><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0648 \u0632\u0645\u06cc\u0646\u0647 \u0647\u0627\u06cc \u067e\u0631\u0648\u0646\u062f\u0647 \u0645\u0627 \u0628\u0647 \u0634\u06cc\u0621 \u062c\u0627\u0648\u0627 \u060c \u0628\u062e\u0634 \u0645\u0647\u0645\u06cc \u062f\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f \u062e\u0648\u0627\u0646\u062f\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0645\u0627 \u0627\u0632 \u06cc\u06a9 FieldsetMapper \u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"10\">\n<pre class=\"highlight plaintext\"><code>public class VisitorsFieldSetMapper implements FieldSetMapper<visitorsdto> {\n    @Override\n    public VisitorsDto mapFieldSet(final FieldSet fieldSet) throws BindException {\n        return VisitorsDto.builder()\n                .id(fieldSet.readLong(\"id\"))\n                .firstName(fieldSet.readString(\"firstName\"))\n                .lastName(fieldSet.readString(\"lastName\"))\n                .emailAddress(fieldSet.readString(\"emailAddress\"))\n                .phoneNumber(fieldSet.readString(\"phoneNumber\"))\n                .address(fieldSet.readString(\"address\"))\n                .visitDate(fieldSet.readString(\"visitDate\"))\n                .build();\n    }\n}\n<\/visitorsdto><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u0633 \u0627\u0632 \u062e\u0648\u0627\u0646\u062f\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u067e\u0631\u0648\u0646\u062f\u0647 \u060c \u0628\u0633\u062a\u0647 \u0628\u0647 \u0646\u06cc\u0627\u0632 \u0645\u0627 \u0628\u0627\u06cc\u062f \u067e\u0631\u062f\u0627\u0632\u0634 \u0634\u0648\u062f. \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u0646 \u060c \u067e\u0631\u062f\u0627\u0632\u0646\u062f\u0647 \u06cc\u06a9 \u0634\u06cc\u0621 \u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647 \u0631\u0627 \u0628\u0647 \u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u0646\u0647\u0627\u062f \u0645\u0627 \u0646\u0642\u0634\u0647 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"10\">\n<pre class=\"highlight plaintext\"><code>@Component\npublic class VisitorsItemProcessor implements ItemProcessor<visitorsdto visitors=\"\"> {\n    private final VisitorsMapper visitorsMapper;\n\n    public VisitorsItemProcessor(VisitorsMapper visitorsMapper) {\n        this.visitorsMapper = visitorsMapper;\n    }\n\n    @Override\n    public Visitors process(final VisitorsDto visitorsDto) throws Exception {\n        return visitorsMapper.toVisitors(visitorsDto);\n    }\n}\n<\/visitorsdto><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u0633 \u0627\u0632 \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0627\u0632 \u0634\u06cc\u0621 \u0645\u0627 \u060c \u0627\u06a9\u0646\u0648\u0646 \u0648\u0642\u062a \u0622\u0646 \u0631\u0633\u06cc\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 H2 \u0645\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0646\u0648\u06cc\u0633\u0646\u062f\u0647 \u0628\u0647 \u0634\u0631\u062d \u0632\u06cc\u0631 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"10\">\n<pre class=\"highlight plaintext\"><code>@Component\npublic class VisitorsItemWriter implements ItemWriter<visitors> {\n\n    private final VisitorsRepository visitorsRepository;\n\n    public VisitorsItemWriter(VisitorsRepository visitorsRepository) {\n        this.visitorsRepository = visitorsRepository;\n    }\n\n    @Override\n    public void write(Chunk extends Visitors&gt; chunk) throws Exception {\n        visitorsRepository.saveAll(chunk.getItems());\n    }\n}\n<\/visitors><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0627\u0645\u0644 \u06a9\u0627\u0631 \u0645\u0627 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"29\">\n<pre class=\"highlight plaintext\"><code>@Configuration\npublic class VisitorsBatchConfig {\n\n\n    @Bean\n    public Job importVistorsJob(final JobRepository jobRepository, final PlatformTransactionManager transactionManager, final VisitorsRepository visitorsRepository, final VisitorsMapper visitorsMapper) throws IOException {\n        return new JobBuilder(\"importVisitorsJob\", jobRepository)\n                .start(importVisitorsStep(jobRepository, transactionManager, visitorsRepository, visitorsMapper))\n                .build();\n    }\n\n    @Bean\n    public Step importVisitorsStep(final JobRepository jobRepository, final PlatformTransactionManager transactionManager, final VisitorsRepository visitorsRepository, final VisitorsMapper visitorsMapper) throws IOException {\n        return new StepBuilder(\"importVisitorsStep\", jobRepository)\n                .<visitorsdto visitors=\"\">chunk(100, transactionManager)\n                .reader(flatFileItemReader(null))\n                .processor(itemProcessor(visitorsMapper))\n                .writer(visitorsItemWriter(visitorsRepository))\n                .build();\n    }\n\n    @Bean\n    public ItemProcessor<visitorsdto visitors=\"\"> itemProcessor(final VisitorsMapper visitorsMapper) {\n        return new VisitorsItemProcessor(visitorsMapper);\n    }\n\n    @Bean\n    public VisitorsItemWriter visitorsItemWriter(final VisitorsRepository visitorsRepository) {\n        return new VisitorsItemWriter(visitorsRepository);\n    }\n\n\n    @Bean\n    @StepScope\n    public FlatFileItemReader<visitorsdto> flatFileItemReader(@Value(\"#{jobParameters['inputFile']}\") final String visitorsFile) throws IOException {\n        val flatFileItemReader = new FlatFileItemReader<visitorsdto>();\n        flatFileItemReader.setName(\"VISITORS_READER\");\n        flatFileItemReader.setLinesToSkip(1);\n        flatFileItemReader.setLineMapper(linMapper());\n        flatFileItemReader.setStrict(false);\n        flatFileItemReader.setResource(new FileSystemResource(visitorsFile));\n        return flatFileItemReader;\n    }\n\n    @Bean\n    public LineMapper<visitorsdto> linMapper() {\n        val defaultLineMapper = new DefaultLineMapper<visitorsdto>();\n        val lineTokenizer = new DelimitedLineTokenizer();\n        lineTokenizer.setDelimiter(\",\");\n        lineTokenizer.setNames(\"id\", \"firstName\", \"lastName\", \"emailAddress\", \"phoneNumber\", \"address\", \"visitDate\");\n        lineTokenizer.setStrict(false); \/\/ Set strict property to false\n        defaultLineMapper.setLineTokenizer(lineTokenizer);\n        defaultLineMapper.setFieldSetMapper(new VisitorsFieldSetMapper());\n        return defaultLineMapper;\n\n    }\n\n}\n<\/visitorsdto><\/visitorsdto><\/visitorsdto><\/visitorsdto><\/visitorsdto><\/visitorsdto><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0631\u0627\u06cc \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u062f\u0633\u062a\u0647 \u062e\u0648\u062f \u060c \u0645\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u062a\u0645\u0627\u0634\u0627\u06af\u0631 \u0633\u0631\u0648\u06cc\u0633 \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u0647\u0631 \u067e\u0631\u0648\u0646\u062f\u0647 \u062c\u062f\u06cc\u062f\u06cc \u06a9\u0647 \u0648\u0627\u0631\u062f \u067e\u0648\u0634\u0647 \u0645\u0627 \u0645\u06cc \u0634\u0648\u062f \u060c \u062c\u0633\u062a\u062c\u0648 \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u0627\u0635\u0644\u06cc \u0628\u0648\u062a \u0628\u0647\u0627\u0631 \u0645\u0627 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"16\">\n<pre class=\"highlight plaintext\"><code>@SpringBootApplication\n@EnableBatchProcessing\n@EnableScheduling\n@Slf4j\npublic class FolderMonitorApplication {\n\n    private final JobLauncher jobLauncher;\n    private final Job job;\n\n    public FolderMonitorApplication(JobLauncher jobLauncher, Job job) {\n        this.jobLauncher = jobLauncher;\n        this.job = job;\n    }\n\n    public static void main(String[] args) {\n        new SpringApplicationBuilder(FolderMonitorApplication.class)\n                .web(WebApplicationType.SERVLET)\n                .run(args)\n                .registerShutdownHook();\n    }\n\n    public void run(final String inputFile) throws Exception {\n        val jobParameters = new JobParametersBuilder()\n                .addDate(\"timestamp\", Calendar.getInstance().getTime())\n                .addString(\"inputFile\", inputFile)\n                .toJobParameters();\n        val jobExecution = jobLauncher.run(job, jobParameters);\n        while (jobExecution.isRunning()) {\n            log.info(\"..................\");\n        }\n    }\n\n    @Scheduled(fixedRate = 2000)\n    public void runJob() {\n\n        val path = Paths.get(\"\/home\/sabri\/Work\"); \n        WatchKey key;\n        WatchService watchService = null;\n        try {\n            watchService = FileSystems.getDefault().newWatchService();\n            path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);\n\n            while ((key = watchService.take()) != null) {\n                for (WatchEvent&gt; event : key.pollEvents()) {\n\n                    log.info(\n                            \"Event kind:\" + event.kind()\n                                    + \". File affected: \" + event.context() + \".\");\n                    if (event.kind().name().equals(\"ENTRY_CREATE\")) {\n                        run(path + \"https:\/\/dev.to\/\" + event.context().toString());\n                    }\n                }\n                key.reset();\n            }\n        } catch (Exception e) {\n            log.error(e.getMessage(), e);\n        }\n    }\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u062f\u0633\u062a\u0647 \u0645\u0627 \u0622\u0645\u0627\u062f\u0647 \u0627\u0633\u062a \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645 \u0648 \u067e\u0631\u0648\u0646\u062f\u0647 \u0627\u06cc \u0631\u0627 \u062f\u0631\u0648\u0646 \u067e\u0648\u0634\u0647 \u062e\u0648\u062f \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u0645<\/p>\n<blockquote wp_automatic_readability=\"57.127866792334\">\n<p>\/\u062e\u0627\u0646\u0647\/\u0633\u0627\u0628\u0631\u06cc\/\u06a9\u0627\u0631 \u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0648\u0631\u0648\u062f \u0633\u06cc\u0627\u0647\u0647\u0647\u0627 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<br \/>2024-02-05T22: 58: 34.100+01: 00 \u0627\u0637\u0644\u0627\u0639\u0627\u062a 6931 &#8212; [   scheduling-1] OSBCLSUPPORT.SIMPLEJOBLAUNCHER: \u06a9\u0627\u0631: [SimpleJob: [name=importVisitorsJob]]\u0628\u0627 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0632\u06cc\u0631 \u062a\u06a9\u0645\u06cc\u0644 \u0634\u062f: [{&#8216;inputFile&#8217;:'{value=\/home\/sabri\/Work\/visitors.csv, type=class java.lang.String, identifying=true}&#8217;,&#8217;timestamp&#8217;:'{value=Mon Feb 05 22:58:34 CET 2024, type=class java.util.Date, identifying=true}&#8217;}] \u0648 \u0648\u0636\u0639\u06cc\u062a \u0632\u06cc\u0631: [COMPLETED] \u062f\u0631 75ms<br \/>2024-02-05T22: 58: 53.023+01: 00 \u0627\u0637\u0644\u0627\u0639\u0627\u062a 6931 &#8212; [   scheduling-1] dsffoldermonitorapplication: \u0646\u0648\u0639 \u0631\u0648\u06cc\u062f\u0627\u062f: enter_create. \u067e\u0631\u0648\u0646\u062f\u0647 \u062a\u062d\u062a \u062a\u0623\u062b\u06cc\u0631:. ~ lock.visitors.csv#.<br \/>2024-02-05T22: 58: 53.029+01: 00 \u0627\u0637\u0644\u0627\u0639\u0627\u062a 6931 &#8212; [   scheduling-1] OSBCLSUPPORT.SIMPLEJOBLAUNCHER: \u06a9\u0627\u0631: [SimpleJob: [name=importVisitorsJob]]\u0628\u0627 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0634\u062f: [{&#8216;inputFile&#8217;:'{value=\/home\/sabri\/Work\/.~lock.visitors.csv#, type=class java.lang.String, identifying=true}&#8217;,&#8217;timestamp&#8217;:'{value=Mon Feb 05 22:58:53 CET 2024, type=class java.util.Date, identifying=true}&#8217;}]2024-02-05T22: 58: 53.031+01: 00 \u0627\u0637\u0644\u0627\u0639\u0627\u062a 6931 &#8212; [   scheduling-1] osbatch.core.job.simplestephandler: \u0645\u0631\u062d\u0644\u0647 \u0627\u062c\u0631\u0627: [importVisitorsStep]2024-02-05T22: 58: 53.034+01: 00 \u0627\u0637\u0644\u0627\u0639\u0627\u062a 6931 &#8212; [   scheduling-1] OSBATCH.CORE.STEP.ABSTRACTERSTEP: \u0645\u0631\u062d\u0644\u0647: [importVisitorsStep] \u062f\u0631 2MS \u0627\u062c\u0631\u0627 \u0634\u062f<br \/>2024-02-05T22: 58: 53.035+01: 00 \u0627\u0637\u0644\u0627\u0639\u0627\u062a 6931 &#8212; [   scheduling-1] OSBCLSUPPORT.SIMPLEJOBLAUNCHER: \u06a9\u0627\u0631: [SimpleJob: [name=importVisitorsJob]]\u0628\u0627 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0632\u06cc\u0631 \u062a\u06a9\u0645\u06cc\u0644 \u0634\u062f: [{&#8216;inputFile&#8217;:'{value=\/home\/sabri\/Work\/.~lock.visitors.csv#, type=class java.lang.String, identifying=true}&#8217;,&#8217;timestamp&#8217;:'{value=Mon Feb 05 22:58:53 CET 2024, type=class java.util.Date, identifying=true}&#8217;}] \u0648 \u0648\u0636\u0639\u06cc\u062a \u0632\u06cc\u0631: [COMPLETED] \u062f\u0631 5MS<br \/>2024-02-05T23: 00: 32.457+01: 00 \u0627\u0637\u0644\u0627\u0639\u0627\u062a 6931 &#8212; [   scheduling-1] dsffoldermonitorapplication: \u0646\u0648\u0639 \u0631\u0648\u06cc\u062f\u0627\u062f: enter_create. \u067e\u0631\u0648\u0646\u062f\u0647 \u062a\u062d\u062a \u062a\u0623\u062b\u06cc\u0631: \u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 2.csv.<br \/>2024-02-05T23: 00: 32.464+01: 00 \u0627\u0637\u0644\u0627\u0639\u0627\u062a 6931 &#8212; [   scheduling-1] OSBCLSUPPORT.SIMPLEJOBLAUNCHER: \u06a9\u0627\u0631: [SimpleJob: [name=importVisitorsJob]]\u0628\u0627 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0634\u062f: [{&#8216;inputFile&#8217;:'{value=\/home\/sabri\/Work\/Visitors2.csv, type=class java.lang.String, identifying=true}&#8217;,&#8217;timestamp&#8217;:'{value=Mon Feb 05 23:00:32 CET 2024, type=class java.util.Date, identifying=true}&#8217;}]2024-02-05T23: 00: 32.468+01: 00 \u0627\u0637\u0644\u0627\u0639\u0627\u062a 6931 &#8212; [   scheduling-1] osbatch.core.job.simplestephandler: \u0645\u0631\u062d\u0644\u0647 \u0627\u062c\u0631\u0627: [importVisitorsStep]\u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647[id=1, firstName=John, lastName=Doe, emailAddress=john.doe@example.com, phoneNumber=(555) 123-4567, address=123 Main St, visitDate=2024-02-05]\u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647[id=2, firstName=Jane, lastName=Smith, emailAddress=jane.smith@example.com, phoneNumber=(555) 987-6543, address=456 Oak St, visitDate=2024-02-06]\u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647[id=3, firstName=Michael, lastName=Johnson, emailAddress=michael.j@example.com, phoneNumber=(555) 555-5555, address=789 Pine St, visitDate=2024-02-07]\u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647[id=4, firstName=Alice, lastName=Williams, emailAddress=alice.w@example.com, phoneNumber=(555) 456-7890, address=101 Elm St, visitDate=2024-02-08]\u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647[id=5, firstName=David, lastName=Miller, emailAddress=david.m@example.com, phoneNumber=(555) 111-2222, address=202 Birch St, visitDate=2024-02-09]\n<\/blockquote>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u06a9\u0627\u0631 \u0645\u0627 \u062e\u0648\u0628 \u0627\u0633\u062a \u060c \u0642\u0633\u0645\u062a \u0627\u0648\u0644 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f \u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u062d\u0631\u06a9\u062a \u06a9\u0646\u06cc\u0645 \u0648 \u06cc\u06a9 \u062a\u0633\u062a \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u062f\u0633\u062a\u0647 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645.<\/p>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646 \u06a9\u0647 \u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u0642\u0633\u0645\u062a \u062a\u0646\u0638\u06cc\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0627\u0633\u062a \u060c \u0627\u06cc\u0646\u06af\u0648\u0646\u0647 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"10\">\n<pre class=\"highlight plaintext\"><code>@Configuration\n@EnableBatchProcessing\n@EnableJpaRepositories(basePackages = {\"dev.sabri.foldermonitor.repositories\"})\n@EntityScan(basePackages = {\"dev.sabri.foldermonitor.domain\"})\n@ComponentScan(basePackages = {\"dev.sabri.foldermonitor.mapper\"})\npublic class VisitorsBatchTestConfig {\n\n\n    @Bean\n    @Primary\n    public DataSource dataSource() {\n        return new EmbeddedDatabaseBuilder()\n                .setType(EmbeddedDatabaseType.H2)\n                .addScript(\"\/org\/springframework\/batch\/core\/schema-h2.sql\")\n                .build();\n    }\n\n    @Bean\n    public PlatformTransactionManager transactionManager() {\n        return new DataSourceTransactionManager(dataSource());\n    }\n\n    @Bean(\"entityManagerFactory\")\n    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {\n        val localContainerEntityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();\n        localContainerEntityManagerFactoryBean.setDataSource(dataSource());\n        localContainerEntityManagerFactoryBean.setPackagesToScan(\"dev.sabri.foldermonitor.domain\");\n        localContainerEntityManagerFactoryBean.setPersistenceUnitName(\"visitors\");\n        val hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();\n        localContainerEntityManagerFactoryBean.setJpaVendorAdapter(hibernateJpaVendorAdapter);\n        return localContainerEntityManagerFactoryBean;\n\n\n    }\n\n    @Bean\n    public JobRepository jobRepository() throws Exception {\n        val jobrepositoryFactoryBean = new JobRepositoryFactoryBean();\n        jobrepositoryFactoryBean.setDataSource(dataSource());\n        jobrepositoryFactoryBean.setTransactionManager(transactionManager());\n        jobrepositoryFactoryBean.afterPropertiesSet();\n        return jobrepositoryFactoryBean.getObject();\n\n    }\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>EnableJparePositories \u0628\u0631\u0627\u06cc \u06af\u0641\u062a\u0646 \u062f\u0633\u062a\u0647 \u0645\u0646 \u0627\u0632 \u06a9\u062c\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u0647\u0645\u0647 \u0645\u062e\u0627\u0632\u0646 \u0645\u0646 \u0631\u0627 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0645<br \/>EntityScan \u0628\u0631\u0627\u06cc \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0646\u0647\u0627\u062f\u0647\u0627\u06cc \u0645\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f<br \/>componentscan \u0639\u0645\u062f\u062a\u0627\u064b \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0628\u0631\u0627\u06cc \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0645\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u062a\u0627 \u0644\u0648\u0628\u06cc\u0627 \u0628\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0645\u0646 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u062a\u0634\u062e\u06cc\u0635 \u062f\u0627\u062f\u0647 \u0634\u0648\u062f<br \/>\u062d\u0627\u0644 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u0622\u0632\u0645\u0648\u0646 \u0633\u0627\u062f\u0647 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"13\">\n<pre class=\"highlight plaintext\"><code>@SpringBatchTest\n@SpringJUnitConfig(classes = {VisitorsBatchConfig.class, VisitorsBatchTestConfig.class})\nclass VisitorsBatchIntegrationTests {\n\n    public static final String INPUt_FILE = \"visitors.csv\";\n    @Autowired\n    private JobLauncherTestUtils jobLauncherTestUtils;\n    @Autowired\n    private JobRepositoryTestUtils jobRepositoryTestUtils;\n\n    @AfterEach\n    public void cleanUp() {\n        jobRepositoryTestUtils.removeJobExecutions();\n    }\n\n    private JobParameters defaultJobParameters() {\n        val paramsBuilder = new JobParametersBuilder();\n        paramsBuilder.addString(\"inputFile\", INPUt_FILE);\n        paramsBuilder.addDate(\"timestamp\", Calendar.getInstance().getTime());\n        return paramsBuilder.toJobParameters();\n    }\n\n\n    @Test\n    void givenVisitorsFlatFile_whenJobExecuted_thenSuccess(@Autowired Job job) throws Exception {\n        \/\/ given\n        this.jobLauncherTestUtils.setJob(job);\n        \/\/ when\n        val jobExecution = jobLauncherTestUtils.launchJob(defaultJobParameters());\n        val actualJobInstance = jobExecution.getJobInstance();\n        val actualJobExitStatus = jobExecution.getExitStatus();\n\n        \/\/ then\n        assertThat(actualJobInstance.getJobName()).isEqualTo(\"importVisitorsJob\");\n        assertThat(actualJobExitStatus.getExitCode()).isEqualTo(ExitStatus.COMPLETED.getExitCode());\n\n    }\n\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u06cc\u062f \u060c \u062a\u0633\u062a \u062e\u0648\u0628 \u0627\u0633\u062a.<\/p>\n<p>\u0646\u062a\u0627\u06cc\u062c \u0622\u0632\u0645\u0648\u0646<br \/>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0633\u0627\u062f\u0647 \u0627\u0632 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0646\u0645\u0648\u0646\u0647 \u0628\u0647\u0627\u0631 \u062f\u0633\u062a\u0647 \u0627\u06cc \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<blockquote wp_automatic_readability=\"79.837530463038\">\n<p>VISITOR_ID \u060c FIRST_NAME \u060c LAST_NAME \u060c email_address \u060c phone_number \u060c \u0622\u062f\u0631\u0633 \u060c \u0628\u0627\u0632\u062f\u06cc\u062f_\u062f\u06cc\u062a<br \/>1 \u060c \u062c\u0627\u0646 \u060c doe \u060c john.doe@sexal.com \u060c (555) 123-4567\u060c123 \u062e\u06cc\u0627\u0628\u0627\u0646 \u0627\u0635\u0644\u06cc \u060c 2024-02-05<br \/>2 \u060c \u062c\u06cc\u0646 \u060c \u0627\u0633\u0645\u06cc\u062a \u060c jane.smith@\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 ..com \u060c (555) 987-6543\u060c456 \u062e\u06cc\u0627\u0628\u0627\u0646 \u0628\u0644\u0648\u0637 \u060c 2024-02-06<br \/>3 \u060c \u0645\u0627\u06cc\u06a9\u0644 \u060c \u062c\u0627\u0646\u0633\u0648\u0646 \u060c michael.j@\u0645\u062b\u0627\u0644 ..com \u060c (555) 555-5555\u060c789 \u062e\u06cc\u0627\u0628\u0627\u0646 \u06a9\u0627\u062c \u060c 2024-02-07<br \/>4 \u060c \u0622\u0644\u06cc\u0633 \u060c \u0648\u06cc\u0644\u06cc\u0627\u0645\u0632 \u060c alice.w@\u0645\u062b\u0627\u0644 ..com \u060c (555) 456-7890\u060c101 \u062e\u06cc\u0627\u0628\u0627\u0646 Elm \u060c 2024-02-08<br \/>5 \u060c \u062f\u06cc\u0648\u06cc\u062f \u060c \u0645\u06cc\u0644\u0631 \u060c david.m@\u0645\u062b\u0627\u0644 ..com \u060c (555) 111-2222\u060c202 \u062e\u06cc\u0627\u0628\u0627\u0646 \u0628\u06cc\u0631\u0686 \u060c 2024-02-09<br \/>6 \u060c \u0633\u0648\u0632\u0627\u0646 \u060c \u062c\u0648\u0646\u0632 \u060c Susan.J@\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 ..com \u060c (555) 333-4444\u060c303 \u062e\u06cc\u0627\u0628\u0627\u0646 \u0633\u0631\u0648 \u060c 2024-02-10<br \/>7 \u060c \u0631\u0627\u0628\u0631\u062a \u060c \u0627\u0633\u0645\u06cc\u062a \u060c Robert.s@\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 ..com \u060c (555) 555-1234\u060c505 \u062e\u06cc\u0627\u0628\u0627\u0646 Maple \u060c 2024-02-11<br \/>8 \u060c \u0627\u0645\u06cc\u0644\u06cc \u060c \u062f\u06cc\u0648\u06cc\u0633 \u060c emily.d@\u0645\u062b\u0627\u0644 ..com \u060c (555) 876-5432\u060c707 \u062e\u06cc\u0627\u0628\u0627\u0646 \u0628\u0644\u0648\u0637 \u060c 2024-02-12<br \/>9 \u060c \u06a9\u0631\u06cc\u0633\u062a\u0648\u0641\u0631 \u060c \u06a9\u0644\u0627\u0631\u06a9 \u060c Chris.c@\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 ..com \u060c (555) 234-5678\u060c909 \u062e\u06cc\u0627\u0628\u0627\u0646 \u06a9\u0627\u062c \u060c 2024-02-13<br \/>10 \u060c Emma \u060c Johnson \u060c Emma.j@Exactine.com \u060c (555) 432-1098\u060c111 Walnut St \u060c 2024-02-14<br \/>11 \u060c \u0648\u06cc\u0644\u06cc\u0627\u0645 \u060c \u0645\u0627\u0631\u062a\u06cc\u0646 \u060c William.m@\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 ..com \u060c (555) 567-8901\u060c222 \u062e\u06cc\u0627\u0628\u0627\u0646 \u0628\u06cc\u0631\u0686 \u060c 2024-02-15<br \/>12 \u060c \u0627\u0644\u06cc\u0648\u06cc\u0627 \u060c \u0627\u0646\u062f\u0631\u0633\u0648\u0646 \u060c olivia.a@\u0645\u062b\u0627\u0644 ..com \u060c (555) 789-0123\u060c333 Elm ST \u060c 2024-02-16<br \/>13 \u060c \u0645\u06cc\u0633\u0648\u0646 \u060c \u0648\u0627\u06cc\u062a \u060c mason.w@\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 ..com \u060c (555) 321-0987\u060c444 \u062e\u06cc\u0627\u0628\u0627\u0646 \u0628\u0644\u0648\u0637 \u060c 2024-02-17<br \/>14 \u060c \u0633\u0648\u0641\u06cc\u0627 \u060c \u062a\u06cc\u0644\u0648\u0631 \u060c sophia.t@\u0645\u062b\u0627\u0644 ..com \u060c (555) 654-3210\u060c555 \u062e\u06cc\u0627\u0628\u0627\u0646 \u0627\u0641\u0631\u0627 \u060c 2024-02-18<br \/>15 \u060c Aiden \u060c Brown \u060c Aiden.b@\u0645\u062b\u0627\u0644 ..com \u060c (555) 876-5432\u060c666 Pine ST \u060c 2024-02-19<br \/>\u0648 \u0633\u0631\u0627\u0646\u062c\u0627\u0645 \u060c \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<\/blockquote>\n<p>\u0645\u0627 \u06cc\u06a9 \u062f\u0633\u062a\u0647 \u0628\u0647\u0627\u0631\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a\u06cc \u06a9\u0627\u0645\u0644 \u0628\u0627 \u062a\u0633\u062a \u0647\u0627\u06cc\u06cc \u062f\u0627\u0631\u06cc\u0645 \u06a9\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0648 \u062e\u0648\u0628 \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u0646\u062f.<\/p>\n<p>\u0648\u0642\u062a \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u06af\u0630\u0631\u0627\u0646\u062f\u0646 \u0645\u0642\u0627\u0644\u0647 \u0645\u0646 \u0628\u06af\u0630\u0631\u0627\u0646\u06cc\u062f. \u0646\u0638\u0631\u0627\u062a \u0648 \u0646\u0638\u0631\u0627\u062a \u0634\u0645\u0627 \u0628\u0631\u0627\u06cc \u0645\u0646 \u0627\u0631\u0632\u0634\u0645\u0646\u062f \u0627\u0633\u062a \u060c \u0632\u06cc\u0631\u0627 \u0622\u0646\u0647\u0627 \u0628\u0647 \u062a\u0642\u0648\u06cc\u062a \u06a9\u0627\u0631 \u0645\u0646 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u0646\u062f \u060c \u0648 \u0645\u0646 \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u0631\u0627\u06cc \u0647\u0631 \u06cc\u06a9 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0627\u0631\u0632\u0634 \u0642\u0627\u0626\u0644 \u0647\u0633\u062a\u0645.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627: \u062f\u0627\u0646\u0634 \u0627\u0633\u0627\u0633\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u062c\u0627\u0648\u0627 \u060c \u062f\u0633\u062a\u0647 \u0628\u0647\u0627\u0631 \u060c \u0628\u0647\u0627\u0631 JPA. \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062f \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0648\u0628\u0644\u0627\u06af \u0631\u0627 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062e\u0632\u0646 GitHub \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f. \u0628\u0647\u0627\u0631 \u062f\u0633\u062a\u0647 \u0686\u0627\u0631\u0686\u0648\u0628\u06cc \u062f\u0631 \u0627\u06a9\u0648\u0633\u06cc\u0633\u062a\u0645 \u0628\u0647\u0627\u0631 \u0627\u0633\u062a \u06a9\u0647 \u062a\u0648\u0633\u0639\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u062f\u0633\u062a\u0647 \u0627\u06cc \u0631\u0627 \u0633\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u067e\u0631\u062f\u0627\u0632\u0634 \u062f\u0633\u062a\u0647 \u0627\u06cc \u0634\u0627\u0645\u0644 \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc &hellip;<\/p>\n","protected":false},"author":2,"featured_media":94756,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-94755","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/94755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=94755"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/94755\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/94756"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=94755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=94755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=94755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}