Skip to content

Commit 3d3d785

Browse files
committed
add postgres Jdbc template minimal configuration
1 parent c7dccfc commit 3d3d785

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.cosmotech.common.postgres
2+
3+
import org.springframework.beans.factory.annotation.Qualifier
4+
import org.springframework.beans.factory.annotation.Value
5+
import org.springframework.context.annotation.Bean
6+
import org.springframework.context.annotation.Configuration
7+
import org.springframework.jdbc.core.JdbcTemplate
8+
import org.springframework.jdbc.datasource.DriverManagerDataSource
9+
import javax.sql.DataSource
10+
11+
@Configuration
12+
class PostgresConfiguration {
13+
@Value("\${csm.platform.internalResultServices.storage.admin.username}")
14+
private lateinit var adminStorageUsername: String
15+
@Value("\${csm.platform.internalResultServices.storage.admin.password}")
16+
private lateinit var adminStoragePassword: String
17+
@Value("\${csm.platform.internalResultServices.storage.host}") private lateinit var host: String
18+
@Value("\${csm.platform.internalResultServices.storage.port}") private lateinit var port: String
19+
@Value("\${csm.platform.internalResultServices.storage.db.name}") private lateinit var dbName: String
20+
@Value("\${csm.platform.internalResultServices.storage.db.schema}") private lateinit var schema: String
21+
22+
private val jdbcdriverClass = "org.postgresql.Driver"
23+
24+
@Bean
25+
fun adminDatasource(): DriverManagerDataSource {
26+
val dataSource =
27+
DriverManagerDataSource(
28+
"jdbc:postgresql://$host:$port/$dbName", adminStorageUsername, adminStoragePassword)
29+
dataSource.setDriverClassName(jdbcdriverClass)
30+
return dataSource
31+
}
32+
33+
@Bean
34+
fun adminJdbcTemplate(
35+
@Qualifier("adminDatasource") dataSource: DataSource
36+
): JdbcTemplate {
37+
return JdbcTemplate(dataSource)
38+
}
39+
}
40+
41+
fun JdbcTemplate.existDB(name: String): Boolean {
42+
return this.queryForList("SELECT * FROM pg_catalog.pg_database WHERE datname='$name'").size == 1
43+
}
44+
45+
fun JdbcTemplate.existTable(name: String): Boolean {
46+
return this.queryForList(
47+
"SELECT * FROM information_schema.tables " + "WHERE table_name ilike '${name}'")
48+
.size >= 1
49+
}
50+
51+
fun String.toDataTableName(isProbeData: Boolean): String =
52+
(if (isProbeData) "P_$this" else "CD_$this").lowercase()
53+
54+
fun JdbcTemplate.createDB(name: String, comment: String? = null): String {
55+
this.execute("CREATE DATABASE \"$name\"")
56+
if (comment != null) this.execute("COMMENT ON DATABASE \"$name\" IS '$comment'")
57+
return name
58+
}
59+
60+
fun JdbcTemplate.dropDB(name: String) {
61+
if (this.existDB(name)) this.execute("DROP DATABASE \"$name\"")
62+
}

config/application-dev.sample.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,16 +106,19 @@ csm:
106106
tls:
107107
enabled: false
108108
storage:
109+
host: "[fill-this-value]" # postgresql-NAMESPACE.NAMESPACE.svc.cluster.local
110+
port: 5432
109111
admin:
110112
password: "[fill-this-value]"
111113
username: "[fill-this-value]"
112-
host: "[fill-this-value]" # postgresql-NAMESPACE.NAMESPACE.svc.cluster.local
113-
port: 5432
114114
reader:
115115
password: "[fill-this-value]"
116116
username: cosmotech_api_reader
117117
writer:
118118
password: "[fill-this-value]"
119119
username: cosmotech_api_writer
120+
db:
121+
name: cosmotech
122+
schema: datasets
120123

121124

0 commit comments

Comments
 (0)