Skip to content

Commit 23ffe87

Browse files
authored
[CCAP-1629] Using flyway to manage Spring database tables (#1036)
1 parent 564dba2 commit 23ffe87

File tree

3 files changed

+55
-2
lines changed

3 files changed

+55
-2
lines changed

src/main/resources/application-form-flow-library.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ spring:
99
session:
1010
store-type: jdbc
1111
jdbc:
12-
initialize-schema: always
12+
initialize-schema: never
1313
jpa:
1414
open-in-view: false
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
-- This, along with the disabling Spring's autocreation in application.yaml, will
2+
-- mean that Flyway is used to create the appropriate tables, indices, and triggers
3+
-- for Spring to properly store session data
4+
5+
-- 1. SPRING_SESSION table
6+
CREATE TABLE IF NOT EXISTS SPRING_SESSION
7+
(
8+
PRIMARY_ID CHAR(36) NOT NULL,
9+
SESSION_ID CHAR(36) NOT NULL,
10+
CREATION_TIME BIGINT NOT NULL,
11+
LAST_ACCESS_TIME BIGINT NOT NULL,
12+
MAX_INACTIVE_INTERVAL INT NOT NULL,
13+
EXPIRY_TIME BIGINT NOT NULL,
14+
PRINCIPAL_NAME VARCHAR(100),
15+
CONSTRAINT spring_session_pk PRIMARY KEY (PRIMARY_ID)
16+
);
17+
18+
-- 2. Indexes on SPRING_SESSION
19+
CREATE UNIQUE INDEX IF NOT EXISTS spring_session_ix1
20+
ON SPRING_SESSION (SESSION_ID);
21+
22+
CREATE INDEX IF NOT EXISTS spring_session_ix2
23+
ON SPRING_SESSION (EXPIRY_TIME);
24+
25+
CREATE INDEX IF NOT EXISTS spring_session_ix3
26+
ON SPRING_SESSION (PRINCIPAL_NAME);
27+
28+
-- 3. SPRING_SESSION_ATTRIBUTES table
29+
CREATE TABLE IF NOT EXISTS SPRING_SESSION_ATTRIBUTES
30+
(
31+
SESSION_PRIMARY_ID CHAR(36) NOT NULL,
32+
ATTRIBUTE_NAME VARCHAR(200) NOT NULL,
33+
ATTRIBUTE_BYTES BYTEA NOT NULL,
34+
CONSTRAINT spring_session_attributes_pk
35+
PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME)
36+
);
37+
38+
-- 4. Foreign key (add only if missing)
39+
DO
40+
$$
41+
BEGIN
42+
IF NOT EXISTS (SELECT 1
43+
FROM information_schema.table_constraints
44+
WHERE constraint_name = 'spring_session_attributes_fk'
45+
AND table_name = 'spring_session_attributes') THEN
46+
ALTER TABLE SPRING_SESSION_ATTRIBUTES
47+
ADD CONSTRAINT spring_session_attributes_fk
48+
FOREIGN KEY (SESSION_PRIMARY_ID)
49+
REFERENCES SPRING_SESSION (PRIMARY_ID)
50+
ON DELETE CASCADE;
51+
END IF;
52+
END
53+
$$;

src/test/resources/application-test.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,4 @@ spring:
5555
store-type: jdbc
5656
timeout: 72h
5757
jdbc:
58-
initialize-schema: always
58+
initialize-schema: never

0 commit comments

Comments
 (0)