- Spring Boot 教程
- Spring Boot - 首頁
- Spring Boot - 簡介
- Spring Boot - 快速入門
- Spring Boot - 引導
- Spring Tool Suite
- Spring Boot - Tomcat 部署
- Spring Boot - 構建系統
- Spring Boot - 程式碼結構
- Spring Bean & 依賴注入
- Spring Boot - 執行器
- Spring Boot - 啟動器
- Spring Boot - 應用程式屬性
- Spring Boot - 配置
- Spring Boot - 註解
- Spring Boot - 日誌記錄
- 構建 RESTful Web 服務
- Spring Boot - 異常處理
- Spring Boot - 攔截器
- Spring Boot - Servlet 過濾器
- Spring Boot - Tomcat 埠號
- Spring Boot - Rest 模板
- Spring Boot - 檔案處理
- Spring Boot - 服務元件
- Spring Boot - Thymeleaf
- 使用 RESTful Web 服務
- Spring Boot - CORS 支援
- Spring Boot - 國際化
- Spring Boot - 排程
- Spring Boot - 啟用 HTTPS
- Spring Boot - Eureka 伺服器
- 使用 Eureka 進行服務註冊
- 閘道器代理伺服器和路由
- Spring Cloud 配置伺服器
- Spring Cloud 配置客戶端
- Spring Boot - 執行器
- Spring Boot - 管理伺服器
- Spring Boot - 管理客戶端
- Spring Boot - 啟用 Swagger2
- Spring Boot - 使用 SpringDoc OpenAPI
- Spring Boot - 建立 Docker 映象
- 跟蹤微服務日誌
- Spring Boot - Flyway 資料庫
- Spring Boot - 傳送電子郵件
- Spring Boot - Hystrix
- Spring Boot - WebSocket
- Spring Boot - 批處理服務
- Spring Boot - Apache Kafka
- Spring Boot - Twilio
- Spring Boot - 單元測試用例
- Rest Controller 單元測試
- Spring Boot - 資料庫處理
- 保護 Web 應用程式
- Spring Boot - 使用 JWT 的 OAuth2
- Spring Boot - Google Cloud Platform
- Spring Boot - Google OAuth2 登入
- Spring Boot 資源
- Spring Boot - 快速指南
- Spring Boot - 有用資源
- Spring Boot - 討論
Spring Boot - 批處理服務
批處理服務是一個在單個任務中執行多個命令的過程。在本章中,您將學習如何在 Spring Boot 應用程式中建立批處理服務。
讓我們考慮一個將 CSV 檔案內容儲存到 MySql 的示例。
要建立批處理服務程式,我們需要在構建配置檔案中新增 Spring Boot Starter Batch、MySQL 和 Spring Data JPA 依賴項。
Maven 使用者可以在 pom.xml 檔案中新增以下依賴項。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-batch</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
Gradle 使用者可以在 build.gradle 檔案中新增以下依賴項。
compile("org.springframework.boot:spring-boot-starter-batch")
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("com.mysql:mysql-connector-j")
現在,將簡單的 CSV 資料檔案新增到類路徑資源 - src/main/resources 下,並將檔案命名為 report.csv,如下所示 -
report.csv
William,John Mike, Sebastian Lawarance, Lime Kumar, Mahesh Goswami, Saikat Khan, Jaid Kaur, Manpreet
為 USERS 模型建立一個 POJO 類,如下所示 -
User.java
package com.tutorialspoint.batchservice.model;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String lastName;
private String firstName;
public User() {
}
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return "firstName: " + firstName + ", lastName: " + lastName;
}
}
現在,建立一箇中間處理器,在從 CSV 檔案讀取資料和將資料寫入 SQL 之前執行操作。
UserItemProcessor.java
package com.tutorialspoint.batchservice.processor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.item.ItemProcessor;
import com.tutorialspoint.batchservice.model.User;
public class UserItemProcessor implements ItemProcessor<User, User> {
private static final Logger log = LoggerFactory.getLogger(UserItemProcessor.class);
@Override
public User process(final User user) throws Exception {
final String firstName = user.getFirstName().toUpperCase();
final String lastName = user.getLastName().toUpperCase();
final User transformedPerson = new User(firstName, lastName);
log.info("Converting (" + user + ") into (" + transformedPerson + ")");
return transformedPerson;
}
}
讓我們建立一個批處理配置檔案,用於讀取 CSV 中的資料並將其寫入資料庫,如下所示。
BatchConfiguration.java
package com.tutorialspoint.batchservice.configuration;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecutionListener;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.transaction.PlatformTransactionManager;
import com.tutorialspoint.batchservice.listener.UserListener;
import com.tutorialspoint.batchservice.model.User;
import com.tutorialspoint.batchservice.processor.UserItemProcessor;
import com.tutorialspoint.batchservice.repository.UserRepository;
@Configuration
public class BatchConfiguration {
@Bean
FlatFileItemReader<User> reader() {
FlatFileItemReader<User> reader= new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("/report.csv"));
reader.setLineMapper(new DefaultLineMapper<>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setDelimiter(DELIMITER_COMMA);
setNames("lastName","firstName");
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<>() {{
setTargetType(User.class);
}});
}});
return reader;
}
@Autowired
UserRepository repository;
@Bean
ItemWriter<User> writer(){
return users -> {
System.out.println("Saving User: " +users);
repository.saveAll(users);
};
}
@Bean
public JobExecutionListener listener() {
return new UserListener();
}
@Bean
Job importUserJob(JobRepository jobRepository, Step step1) {
return new JobBuilder("importUserJob", jobRepository)
.incrementer(new RunIdIncrementer())
.listener(listener())
.start(step1)
.build();
}
@Bean
Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
return new StepBuilder("step1", jobRepository)
.<User, User>chunk(100, transactionManager)
.reader(reader())
.processor(userProcessor())
.writer(writer())
.build();
}
@Bean
@StepScope
UserItemProcessor userProcessor() {
return new UserItemProcessor();
}
}
reader() 方法用於從 CSV 檔案讀取資料,而 writer() 方法用於將資料寫入資料庫。
接下來,我們將不得不編寫一個作業完成通知監聽器類 - 用於在作業完成之後發出通知。
UserListener.java
package com.tutorialspoint.batchservice.listener;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobExecutionListener;
public class UserListener implements JobExecutionListener{
@Override
public void beforeJob(JobExecution jobExecution) {
System.out.println("Job Started: "+ jobExecution.getStartTime()
+ ", Status: " + jobExecution.getStatus());
}
@Override
public void afterJob(JobExecution jobExecution) {
System.out.println("Job Started: "+ jobExecution.getStartTime()
+ ", Status: " + jobExecution.getStatus());
}
}
我們將不得不編寫一個儲存庫,它將使用者儲存到資料庫中。
UserRepository.java
package com.tutorialspoint.batchservice.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.tutorialspoint.batchservice.model.User;
public interface UserRepository extends JpaRepository<User, Long> {
}
我們有自定義處理器來顯示儲存到資料庫之前記錄的自定義。
UserItemProcessor.java
package com.tutorialspoint.batchservice.processor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.item.ItemProcessor;
import com.tutorialspoint.batchservice.model.User;
public class UserItemProcessor implements ItemProcessor<User, User> {
private static final Logger log = LoggerFactory.getLogger(UserItemProcessor.class);
@Override
public User process(final User user) throws Exception {
final String firstName = user.getFirstName().toUpperCase();
final String lastName = user.getLastName().toUpperCase();
final User transformedPerson = new User(firstName, lastName);
log.info("Converting (" + user + ") into (" + transformedPerson + ")");
return transformedPerson;
}
}
主要的 Spring Boot 應用程式類。
BatchserviceApplication.java
package com.tutorialspoint.batchservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication()
public class BatchserviceApplication {
public static void main(String[] args) {
SpringApplication.run(BatchserviceApplication.class, args);
}
}
這是完整的 pom.xml
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.tutorialspoint</groupId>
<artifactId>batchservice</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>batchservice</name>
<description>Demo project for Spring Boot</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties
spring.application.name=batchservice #Database Connection spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://:3306/details spring.datasource.username=root spring.datasource.password=Admin@123 spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=create spring.batch.jdbc.initialize-schema=always
編譯和執行
現在,建立一個可執行的 JAR 檔案,並使用以下 Maven 或 Gradle 命令執行 Spring Boot 應用程式。
對於 Maven,使用如下所示的命令 -
mvn clean install
在“BUILD SUCCESS”之後,您可以在 target 目錄下找到 JAR 檔案。
對於 Gradle,您可以使用如下所示的命令 -
gradle clean build
在“BUILD SUCCESSFUL”之後,您可以在 build/libs 目錄下找到 JAR 檔案。
使用此處提供的命令執行 JAR 檔案 -
java –jar <JARFILE>
您可以在控制檯視窗中看到輸出,如下所示 -
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
[32m :: Spring Boot :: [39m [2m (v3.3.4)[0;39m
...
[2m2024-09-23T17:12:15.384+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mcom.zaxxer.hikari.HikariDataSource [0;39m [2m:[0;39m HikariPool-1 - Starting...
...
Hibernate: drop table if exists user
Hibernate: drop table if exists user_seq
Hibernate: create table user (id bigint not null, first_name varchar(255), last_name varchar(255), primary key (id)) engine=InnoDB
Hibernate: create table user_seq (next_val bigint) engine=InnoDB
Hibernate: insert into user_seq values ( 1 )
...
[2m2024-09-23T17:12:19.006+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.BatchserviceApplication [0;39m [2m:[0;39m Started BatchserviceApplication in 4.923 seconds (process running for 5.83)
[2m2024-09-23T17:12:19.010+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mo.s.b.a.b.JobLauncherApplicationRunner [0;39m [2m:[0;39m Running default command line with: []
[2m2024-09-23T17:12:19.110+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mo.s.b.c.l.support.SimpleJobLauncher [0;39m [2m:[0;39m Job: [SimpleJob: [name=importUserJob]] launched with the following parameters: [{'run.id':'{value=1, type=class java.lang.Long, identifying=true}'}]
Job Started: 2024-09-23T17:12:19.131510100, Status: STARTED
[2m2024-09-23T17:12:19.186+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mo.s.batch.core.job.SimpleStepHandler [0;39m [2m:[0;39m Executing step: [step1]
[2m2024-09-23T17:12:19.252+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: John, lastName: William) into (firstName: JOHN, lastName: WILLIAM)
[2m2024-09-23T17:12:19.253+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: Sebastian, lastName: Mike) into (firstName: SEBASTIAN, lastName: MIKE)
[2m2024-09-23T17:12:19.253+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: Lime, lastName: Lawarance) into (firstName: LIME, lastName: LAWARANCE)
[2m2024-09-23T17:12:19.253+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: Mahesh, lastName: Kumar) into (firstName: MAHESH, lastName: KUMAR)
[2m2024-09-23T17:12:19.253+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: Saikat, lastName: Goswami) into (firstName: SAIKAT, lastName: GOSWAMI)
[2m2024-09-23T17:12:19.253+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: Jaid, lastName: Khan) into (firstName: JAID, lastName: KHAN)
[2m2024-09-23T17:12:19.253+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: Manpreet, lastName: Kaur) into (firstName: MANPREET, lastName: KAUR)
Saving User: [items=[firstName: JOHN, lastName: WILLIAM, firstName: SEBASTIAN, lastName: MIKE, firstName: LIME, lastName: LAWARANCE, firstName: MAHESH, lastName: KUMAR, firstName: SAIKAT, lastName: GOSWAMI, firstName: JAID, lastName: KHAN, firstName: MANPREET, lastName: KAUR], skips=[]]
Hibernate: select next_val as id_val from user_seq for update
Hibernate: update user_seq set next_val= ? where next_val=?
Hibernate: select next_val as id_val from user_seq for update
Hibernate: update user_seq set next_val= ? where next_val=?
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
[2m2024-09-23T17:12:19.368+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mo.s.batch.core.step.AbstractStep [0;39m [2m:[0;39m Step: [step1] executed in 181ms
Job Started: 2024-09-23T17:12:19.131510100, Status: COMPLETED
[2m2024-09-23T17:12:19.411+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mo.s.b.c.l.support.SimpleJobLauncher [0;39m [2m:[0;39m Job: [SimpleJob: [name=importUserJob]] completed with the following parameters: [{'run.id':'{value=1, type=class java.lang.Long, identifying=true}'}] and the following status: [COMPLETED] in 263ms
[2m2024-09-23T17:12:19.456+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mo.s.b.c.l.support.SimpleJobLauncher [0;39m [2m:[0;39m Job: [SimpleJob: [name=importUserJob]] launched with the following parameters: [{'time':'{value=1727091739411, type=class java.lang.Long, identifying=true}'}]
Job Started: 2024-09-23T17:12:19.456491500, Status: STARTED
[2m2024-09-23T17:12:19.495+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mo.s.batch.core.job.SimpleStepHandler [0;39m [2m:[0;39m Executing step: [step1]
[2m2024-09-23T17:12:19.530+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: John, lastName: William) into (firstName: JOHN, lastName: WILLIAM)
[2m2024-09-23T17:12:19.531+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: Sebastian, lastName: Mike) into (firstName: SEBASTIAN, lastName: MIKE)
[2m2024-09-23T17:12:19.531+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: Lime, lastName: Lawarance) into (firstName: LIME, lastName: LAWARANCE)
[2m2024-09-23T17:12:19.531+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: Mahesh, lastName: Kumar) into (firstName: MAHESH, lastName: KUMAR)
[2m2024-09-23T17:12:19.531+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: Saikat, lastName: Goswami) into (firstName: SAIKAT, lastName: GOSWAMI)
[2m2024-09-23T17:12:19.531+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: Jaid, lastName: Khan) into (firstName: JAID, lastName: KHAN)
[2m2024-09-23T17:12:19.531+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mc.t.b.processor.UserItemProcessor [0;39m [2m:[0;39m Converting (firstName: Manpreet, lastName: Kaur) into (firstName: MANPREET, lastName: KAUR)
Saving User: [items=[firstName: JOHN, lastName: WILLIAM, firstName: SEBASTIAN, lastName: MIKE, firstName: LIME, lastName: LAWARANCE, firstName: MAHESH, lastName: KUMAR, firstName: SAIKAT, lastName: GOSWAMI, firstName: JAID, lastName: KHAN, firstName: MANPREET, lastName: KAUR], skips=[]]
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
Hibernate: insert into user (first_name,last_name,id) values (?,?,?)
[2m2024-09-23T17:12:19.563+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mo.s.batch.core.step.AbstractStep [0;39m [2m:[0;39m Step: [step1] executed in 67ms
Job Started: 2024-09-23T17:12:19.456491500, Status: COMPLETED
[2m2024-09-23T17:12:19.598+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ main][0;39m [2m[0;39m[36mo.s.b.c.l.support.SimpleJobLauncher [0;39m [2m:[0;39m Job: [SimpleJob: [name=importUserJob]] completed with the following parameters: [{'time':'{value=1727091739411, type=class java.lang.Long, identifying=true}'}] and the following status: [COMPLETED] in 129ms
JOB Execution completed!
[2m2024-09-23T17:12:19.603+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ionShutdownHook][0;39m [2m[0;39m[36mj.LocalContainerEntityManagerFactoryBean[0;39m [2m:[0;39m Closing JPA EntityManagerFactory for persistence unit 'default'
[2m2024-09-23T17:12:19.604+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ionShutdownHook][0;39m [2m[0;39m[36mcom.zaxxer.hikari.HikariDataSource [0;39m [2m:[0;39m HikariPool-1 - Shutdown initiated...
[2m2024-09-23T17:12:19.611+05:30[0;39m [32m INFO[0;39m [35m9904[0;39m [2m---[0;39m [2m[batchservice] [ionShutdownHook][0;39m [2m[0;39m[36mcom.zaxxer.hikari.HikariDataSource [0;39m [2m:[0;39m HikariPool-1 - Shutdown completed.
您也可以檢查資料庫中的 users 表以檢視條目。