-
Notifications
You must be signed in to change notification settings - Fork 0
/
data_sources.clj
75 lines (71 loc) · 2.31 KB
/
data_sources.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
(ns component.jdbc-data-source.postgres.data-sources
(:import
[clojure.lang Reflector]
[com.impossibl.postgres.jdbc PGDataSource]
[com.zaxxer.hikari HikariConfig HikariDataSource]))
(defn- doto-if-present [value thing method]
(if-not (nil? value)
(let [; satisfy linter
_ (Reflector/invokeInstanceMethod
thing (name method) (object-array [value]))]
thing)
thing))
(defn- convert-if-present [value converter]
(if-not (nil? value) (converter value) value))
(defn postgres-data-source
[{:keys [host
port
user
password
database-name
read-only
login-timeout
network-timeout
ssl-mode
ssl-home-dir
ssl-ca-certificate-file
ssl-certificate-file
ssl-key-file
ssl-key-password]}]
(reduce
(fn [data-source [value method]]
(doto-if-present value data-source method))
(PGDataSource.)
[[host 'setHost]
[port 'setPort]
[user 'setUser]
[password 'setPassword]
[database-name 'setDatabaseName]
[read-only 'setReadOnly]
[(convert-if-present login-timeout int) 'setLoginTimeout]
[(convert-if-present network-timeout int) 'setNetworkTimeout]
[ssl-mode 'setSslMode]
[ssl-home-dir 'setSslHomeDir]
[ssl-ca-certificate-file 'setSslCaCertificateFile]
[ssl-certificate-file 'setSslCertificateFile]
[ssl-key-file 'setSslKeyFile]
[ssl-key-password 'setSslKeyPassword]]))
(defn hikari-data-source
[{:keys [data-source
pool-name
maximum-pool-size
minimum-idle
idle-timeout
connection-timeout
maximum-lifetime
auto-commit]}]
(let [hikari-config
(reduce
(fn [hikari-config [value method]]
(doto-if-present value hikari-config method))
(HikariConfig.)
[[data-source 'setDataSource]
[pool-name 'setPoolName]
[maximum-pool-size 'setMaximumPoolSize]
[minimum-idle 'setMinimumIdle]
[idle-timeout 'setIdleTimeout]
[connection-timeout 'setConnectionTimeout]
[maximum-lifetime 'setMaxLifetime]
[auto-commit 'setAutoCommit]])
hikari-data-source (HikariDataSource. hikari-config)]
hikari-data-source))