[pull] main from spring-projects:main#13
Conversation
`JOB_EXECUTION_ID = ?` in where clause is unnecessary since `STEP_EXECUTION_ID` is primary key. Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
Move MongoDB container setup from tests to centralized configuration Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
1. `\s+,\s*$` -> `,` 2. `\s+\(\s*$` -> ` (` Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
The version to be updated could be computed at server side instead of client side, it will save one parameter of prepared statement. Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
Signed-off-by: Stefano Cordio <stefano.cordio@gmail.com>
Signed-off-by: Stefano Cordio <stefano.cordio@gmail.com>
- JdbcCursorItemReaderBuilder.queryTimeout(int) -> milliseconds - but, AbstractCursorItemReader.setQueryTimeout(int) -> seconds Signed-off-by: Jisu Lee <itis821@gmail.com>
Signed-off-by: jbotuck <jbotuck@gmail.com>
Reviewer's GuideThis pull request modernizes and refactors the Spring Batch codebase by adopting Java’s latest language features and build-time checks, cleaning up SQL schema scripts, and strengthening DAO implementations with optimistic locking and stream-based retrieval. Sequence Diagram for Data Retrieval using JdbcTemplate.queryForStreamsequenceDiagram
participant Client
participant Dao as DAO Component (e.g., JdbcJobExecutionDao)
participant JdbcTemplate
participant Database
Client->>Dao: getEntityList() or getSingleEntity()
Dao->>JdbcTemplate: queryForStream(SQL, rowMapper, params)
JdbcTemplate->>Database: Execute SQL Query
Database-->>JdbcTemplate: Streamable ResultSet
JdbcTemplate-->>Dao: Stream~Entity~
Dao->>Dao: Process stream (e.g., findFirst(), collect())
Dao-->>Client: Entity / List~Entity~ / Optional~Entity~
Updated Class Diagram for JdbcJobExecutionDaoclassDiagram
class JdbcJobExecutionDao {
<<Modified>>
+updateJobExecution(JobExecution jobExecution) // Optimistic locking: VERSION = VERSION + 1 in SQL query
+deleteJobExecution(JobExecution jobExecution) // Optimistic locking: checks VERSION in WHERE clause
+getLastJobExecution(JobInstance jobInstance) JobExecution // Now uses JdbcTemplate.queryForStream
+getJobExecution(Long executionId) JobExecution // Underlying SQL query structure potentially changed
+findJobExecutions(JobInstance jobInstance) List~JobExecution~ // Underlying SQL query structure potentially changed
}
JdbcJobExecutionDao --|> AbstractJdbcBatchMetadataDao
JdbcJobExecutionDao ..|> JobExecutionDao
Updated Class Diagram for JdbcJobInstanceDaoclassDiagram
class JdbcJobInstanceDao {
<<Modified>>
+getJobInstance(String jobName, JobParameters jobParameters) JobInstance // Now uses JdbcTemplate.queryForStream
+deleteJobInstance(JobInstance jobInstance) // Optimistic locking: checks VERSION in WHERE clause
}
JdbcJobInstanceDao --|> AbstractJdbcBatchMetadataDao
JdbcJobInstanceDao ..|> JobInstanceDao
Updated Class Diagram for JdbcStepExecutionDaoclassDiagram
class JdbcStepExecutionDao {
<<Modified>>
+updateStepExecution(StepExecution stepExecution) // Optimistic locking: VERSION = VERSION + 1 in SQL query
+getStepExecution(JobExecution jobExecution, Long stepExecutionId) StepExecution // Now uses JdbcTemplate.queryForStream
+deleteStepExecution(StepExecution stepExecution) // Optimistic locking: checks VERSION in WHERE clause
}
JdbcStepExecutionDao --|> AbstractJdbcBatchMetadataDao
JdbcStepExecutionDao ..|> StepExecutionDao
Updated Class Diagram for JdbcExecutionContextDaoclassDiagram
class JdbcExecutionContextDao {
<<Modified>>
+getExecutionContext(JobExecution jobExecution) ExecutionContext // Now uses JdbcTemplate.queryForStream
+getExecutionContext(StepExecution stepExecution) ExecutionContext // Now uses JdbcTemplate.queryForStream
}
JdbcExecutionContextDao --|> AbstractJdbcBatchMetadataDao
JdbcExecutionContextDao ..|> ExecutionContextDao
Updated Class Diagram for Builder ClassesclassDiagram
class JobBuilderHelper {
+JobBuilderHelper(JobRepository jobRepository) // New constructor
+JobBuilderHelper(String name, JobRepository jobRepository)
}
class JobBuilder {
+JobBuilder(JobRepository jobRepository) // New constructor
+JobBuilder(String name, JobRepository jobRepository)
}
JobBuilder --|> JobBuilderHelper
class StepBuilderHelper {
+StepBuilderHelper(JobRepository jobRepository) // New constructor
+StepBuilderHelper(String name, JobRepository jobRepository)
}
class StepBuilder {
+StepBuilder(JobRepository jobRepository) // New constructor
+StepBuilder(String name, JobRepository jobRepository)
}
StepBuilder --|> StepBuilderHelper
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Important Review skippedBot user detected. To trigger a single review, invoke the You can disable this status message by setting the 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Join our Discord community for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.1)
Can you help keep this open source service alive? 💖 Please sponsor : )
Summary by Sourcery
Integrate Error-Prone static analysis into the build and modernize the codebase with Java language enhancements, enforce optimistic locking in JDBC DAOs, refactor SQL schemas for consistency, and update tests to use modern JUnit and collection APIs.
Bug Fixes:
Enhancements:
Build:
Tests:
Chores: