Skip to content

Commit d64af08

Browse files
authored
added MySQL and MariaDB (#4)
* added mariadb * Update build.yml * added mysql * ping will always start a transaction * update to readme
1 parent 8fac8b8 commit d64af08

File tree

22 files changed

+170
-99
lines changed

22 files changed

+170
-99
lines changed

.github/workflows/build.yml

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Java CI with Maven
22

33
on:
44
push:
5-
branches: "*"
5+
branches: "main"
66
pull_request:
77
branches: "*"
88

@@ -74,6 +74,30 @@ jobs:
7474
- name: Run tests with postgres
7575
run: mvn test -pl core -am -Dspring.profiles.active=postgres
7676

77+
test-mariadb:
78+
runs-on: ubuntu-latest
79+
needs: build
80+
services:
81+
postgres:
82+
image: mariadb:latest
83+
env:
84+
MYSQL_USER: sa
85+
MYSQL_ROOT_PASSWORD: veryStrong123
86+
MYSQL_PASSWORD: veryStrong123
87+
MYSQL_DATABASE: testdb
88+
ports:
89+
- 3306:3306
90+
steps:
91+
- uses: actions/checkout@v4
92+
- name: Set up JDK 21
93+
uses: actions/setup-java@v4
94+
with:
95+
java-version: '21'
96+
distribution: 'temurin'
97+
cache: maven
98+
- name: Run tests with mariadb
99+
run: mvn test -pl core -am -Dspring.profiles.active=mariadb
100+
77101
java-doc:
78102
runs-on: ubuntu-latest
79103
needs: [build]
@@ -105,7 +129,7 @@ jobs:
105129

106130
maven-deploy:
107131
runs-on: ubuntu-latest
108-
needs: [build, test-mssql, test-postgres]
132+
needs: [build, test-mssql, test-postgres, test-mariadb]
109133
if: ${{ github.ref == 'refs/heads/main' }}
110134
steps:
111135
- uses: actions/checkout@v4

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## v1.3.0 - (2025-01-01)
4+
5+
- MariaDB support
6+
- PostgreSQL support
7+
38
## v1.2.0 - (2024-12-31)
49

510
- Run now button in the UI

README.md

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,20 @@ Secondary goal is to support [Poor mans Workflow](https://github.com/sterlp/pmw)
1212

1313
## Tested in the pipeline
1414

15-
- H2
16-
- azure-sql-edge (MSSQL)
15+
- H2
16+
- azure-sql-edge (MSSQL)
17+
- PostgreSQL
18+
- MariaDB
19+
20+
![History](screenshots/supported-dbs.png)
1721

1822
## Supported in theory
1923

20-
- MSSQL
21-
- PostgreSQL
22-
- mySQL
23-
- MariaDB
24+
- MSSQL, as azure-sql-edge is tested
25+
26+
## Not supported
27+
28+
- mySQL: sequences are not supported
2429

2530
# Setup and Run a Task
2631

RUN_AND_BUILD.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
mvn versions:display-dependency-updates
2-
mvn versions:set -DnewVersion=1.2.1 -DgenerateBackupPoms=false
3-
mvn versions:set -DnewVersion=1.2.2-SNAPSHOT -DgenerateBackupPoms=false
2+
mvn versions:set -DnewVersion=1.3.0 -DgenerateBackupPoms=false
3+
mvn versions:set -DnewVersion=1.3.1-SNAPSHOT -DgenerateBackupPoms=false
44

5+
## postgres
56
docker run --name pg-container -e POSTGRES_USER=sa -e POSTGRES_PASSWORD=veryStrong123 -p 5432:5432 -d postgres
67

8+
## azure-sql-edge
79
docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=veryStrong123' -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge
10+
11+
## MariaDB
12+
docker run -e MYSQL_ROOT_PASSWORD=veryStrong123 -e MYSQL_DATABASE=testdb -e MYSQL_USER=sa -e MYSQL_PASSWORD=veryStrong123 -p 3306:3306 -d mariadb:latest
13+
14+
## MySQL
15+
docker run -e MYSQL_ROOT_PASSWORD=veryStrong123 -e MYSQL_DATABASE=testdb -e MYSQL_USER=sa -e MYSQL_PASSWORD=veryStrong123 -p 3306:3306 -d mysql

core/pom.xml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>org.sterl.spring</groupId>
88
<artifactId>spring-persistent-tasks-root</artifactId>
9-
<version>1.2.2-SNAPSHOT</version>
9+
<version>1.3.1-SNAPSHOT</version>
1010
<relativePath>../pom.xml</relativePath>
1111
</parent>
1212

@@ -89,6 +89,16 @@
8989
<artifactId>postgresql</artifactId>
9090
<scope>test</scope>
9191
</dependency>
92+
<dependency>
93+
<groupId>com.mysql</groupId>
94+
<artifactId>mysql-connector-j</artifactId>
95+
<scope>test</scope>
96+
</dependency>
97+
<dependency>
98+
<groupId>org.mariadb.jdbc</groupId>
99+
<artifactId>mariadb-java-client</artifactId>
100+
<scope>test</scope>
101+
</dependency>
92102
</dependencies>
93103

94104
<build>

core/src/main/java/org/sterl/spring/persistent_tasks/history/model/TriggerHistoryDetailEntity.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@
2525
* Just a copy of the trigger status but without any data/state.
2626
*/
2727
@Entity
28-
@Table(name = "PT_TRIGGER_HISTORY_DETAILS", indexes = {
29-
@Index(name = "IDX_PT_TRIGGERS_HISTORY_INSTANCE_ID", columnList = "instance_id"),
30-
@Index(name = "IDX_PT_TRIGGERS_HISTORY_TASK_NAME", columnList = "task_name"),
31-
@Index(name = "IDX_PT_TRIGGERS_HISTORY_TRIGGER_ID", columnList = "trigger_id"),
32-
@Index(name = "IDX_PT_TRIGGERS_HISTORY_STATUS", columnList = "status"),
33-
@Index(name = "IDX_PT_TRIGGERS_HISTORY_CREATED_TIME", columnList = "created_time"),
28+
@Table(name = "pt_trigger_history_details", indexes = {
29+
@Index(name = "idx_pt_triggers_history_instance_id", columnList = "instance_id"),
30+
@Index(name = "idx_pt_triggers_history_task_name", columnList = "task_name"),
31+
@Index(name = "idx_pt_triggers_history_trigger_id", columnList = "trigger_id"),
32+
@Index(name = "idx_pt_triggers_history_status", columnList = "status"),
33+
@Index(name = "idx_pt_triggers_history_created_time", columnList = "created_time"),
3434
})
3535
@Data
3636
@NoArgsConstructor
@@ -39,7 +39,7 @@
3939
@EqualsAndHashCode(of = "id")
4040
public class TriggerHistoryDetailEntity implements HasTriggerData {
4141

42-
@GeneratedValue(generator = "SEQ_PT_TRIGGER_HISTORY_DETAILS", strategy = GenerationType.SEQUENCE)
42+
@GeneratedValue(generator = "seq_pt_trigger_history_details", strategy = GenerationType.SEQUENCE)
4343
@Column(updatable = false)
4444
@Id
4545
private Long id;

core/src/main/java/org/sterl/spring/persistent_tasks/history/model/TriggerHistoryLastStateEntity.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
import lombok.NoArgsConstructor;
2121

2222
@Entity
23-
@Table(name = "PT_TRIGGER_HISTORY_LAST_STATES", indexes = {
24-
@Index(name = "IDX_PT_TRIGGER_HISTORY_LAST_STATES_TASK_NAME", columnList = "task_name"),
25-
@Index(name = "IDX_PT_TRIGGER_HISTORY_LAST_STATES_TRIGGER_ID", columnList = "trigger_id"),
26-
@Index(name = "IDX_PT_TRIGGER_HISTORY_LAST_STATES_STATUS", columnList = "status"),
27-
@Index(name = "IDX_PT_TRIGGER_HISTORY_LAST_STATES_CREATED_TIME", columnList = "created_time"),
23+
@Table(name = "pt_trigger_history_last_states", indexes = {
24+
@Index(name = "idx_pt_trigger_history_last_states_task_name", columnList = "task_name"),
25+
@Index(name = "idx_pt_trigger_history_last_states_trigger_id", columnList = "trigger_id"),
26+
@Index(name = "idx_pt_trigger_history_last_states_status", columnList = "status"),
27+
@Index(name = "idx_pt_trigger_history_last_states_created_time", columnList = "created_time"),
2828
})
2929
@Data
3030
@NoArgsConstructor

core/src/main/java/org/sterl/spring/persistent_tasks/scheduler/SchedulerService.java

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,14 @@ public void shutdownNow() {
7070
}
7171

7272
public SchedulerEntity pingRegistry() {
73-
var result = editSchedulerStatus.checkinToRegistry(name);
74-
result.setRunnungTasks(taskExecutor.getRunningTasks());
75-
result.setTasksSlotCount(taskExecutor.getMaxThreads());
76-
log.debug("Ping {}", result);
77-
return result;
73+
// using trx template to ensure the TRX is started if we use this method internally
74+
return trx.execute(t -> {
75+
var result = editSchedulerStatus.checkinToRegistry(name);
76+
result.setRunnungTasks(taskExecutor.getRunningTasks());
77+
result.setTasksSlotCount(taskExecutor.getMaxThreads());
78+
log.debug("Ping {}", result);
79+
return result;
80+
});
7881
}
7982

8083
public SchedulerEntity getScheduler() {
@@ -100,21 +103,16 @@ public List<Future<TriggerKey>> triggerNextTasks() {
100103
*/
101104
@NonNull
102105
public List<Future<TriggerKey>> triggerNextTasks(OffsetDateTime timeDue) {
103-
var triggers = trx.execute(t -> {
104-
List<TriggerEntity> result;
105-
// in any case we say hello
106-
final var runningOn = pingRegistry();
107-
if (taskExecutor.getFreeThreads() > 0) {
108-
result = triggerService.lockNextTrigger(
109-
name, taskExecutor.getFreeThreads(), timeDue);
110-
runningOn.setRunnungTasks(taskExecutor.getRunningTasks() + result.size());
111-
} else {
112-
result = Collections.emptyList();
113-
log.debug("triggerNextTasks({}) skipped as no free threads are available.", timeDue);
114-
}
115-
return result;
116-
});
117-
return taskExecutor.submit(triggers);
106+
List<TriggerEntity> triggers;
107+
if (taskExecutor.getFreeThreads() > 0) {
108+
triggers = triggerService.lockNextTrigger(
109+
name, taskExecutor.getFreeThreads(), timeDue);
110+
} else {
111+
triggers = Collections.emptyList();
112+
}
113+
var result = taskExecutor.submit(triggers);
114+
pingRegistry();
115+
return result;
118116
}
119117

120118
/**

core/src/main/java/org/sterl/spring/persistent_tasks/scheduler/entity/SchedulerEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import lombok.ToString;
1414

1515
@Entity
16-
@Table(name = "PT_SCHEDULER", indexes = @Index(name = "IDX_TASK_SCHEDULER_STATUS", columnList = "last_ping"))
16+
@Table(name = "pt_scheduler", indexes = @Index(name = "idx_task_scheduler_status", columnList = "last_ping"))
1717
@Data
1818
@ToString(of = { "id", "lastPing", "runnungTasks", "tasksSlotCount" })
1919
@EqualsAndHashCode(of = "id")

core/src/main/java/org/sterl/spring/persistent_tasks/trigger/model/TriggerEntity.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@
2525
import lombok.NoArgsConstructor;
2626

2727
@Entity
28-
@Table(name = "PT_TASK_TRIGGERS", indexes = {
29-
@Index(name = "UNQ_PT_TRIGGERS_KEY", columnList = "trigger_id, task_name", unique = true),
30-
@Index(name = "IDX_PT_TRIGGERS_PRIORITY", columnList = "priority"),
31-
@Index(name = "IDX_PT_TRIGGERS_RUN_AT", columnList = "run_at"),
32-
@Index(name = "IDX_PT_TRIGGERS_STATUS", columnList = "status"),
33-
@Index(name = "IDX_PT_TRIGGERS_PING", columnList = "last_ping"),
28+
@Table(name = "pt_task_triggers", indexes = {
29+
@Index(name = "unq_pt_triggers_key", columnList = "trigger_id, task_name", unique = true),
30+
@Index(name = "idx_pt_triggers_priority", columnList = "priority"),
31+
@Index(name = "idx_pt_triggers_run_at", columnList = "run_at"),
32+
@Index(name = "idx_pt_triggers_status", columnList = "status"),
33+
@Index(name = "idx_pt_triggers_ping", columnList = "last_ping"),
3434
})
3535
@Data
3636
@NoArgsConstructor
@@ -39,7 +39,7 @@
3939
@Builder
4040
public class TriggerEntity implements HasTriggerData {
4141

42-
@GeneratedValue(generator = "SEQ_PT_TASK_TRIGGERS", strategy = GenerationType.SEQUENCE)
42+
@GeneratedValue(generator = "seq_pt_task_triggers", strategy = GenerationType.SEQUENCE)
4343
@Column(updatable = false)
4444
@Id
4545
private Long id;

0 commit comments

Comments
 (0)