我用PostgreSQL运行了Corda。如何将Corda扩展到与其他数据库一起使用?是否足以将数据库驱动程序添加为Gradle依赖项并尝试连接到其他数据库?
答案 0 :(得分:6)
Corda将Hibernate 5.x与HikariCP JDBC连接池一起使用。
所有查询都是由Hibernate生成的,期望来自finance
模块的一个查询(CashSelection
使用具有特定于每个数据库供应商的SQL构造的JDBC PreparedStatement
。)
配置数据库
在运行时,节点在其node.conf
文件中查找JDBC设置。默认情况下,它连接到嵌入式H2服务器(请参阅Corda源代码中的文件/node/src/main/resources/reference.conf
)。
要将Corda与其他数据库(*)一起使用或使用非默认设置连接,node.conf
文件需要设置节点的数据源属性:
dataSourceProperties = {
dataSourceClassName = "org.postgresql.ds.PGSimpleDataSource"
dataSource.url = "jdbc:postgresql://[HOST]:[PORT]/postgres"
dataSource.user = [USER]
dataSource.password = [PASSWORD]
}
database = {
transactionIsolationLevel = READ_COMMITTED
}
jarDirs = [PATH_TO_JDBC_DRIVER_DIR]
其中dataSourceProperties
是典型的JDBC设置,database
条目包含特定于Hibernate的设置,jarDirs
是包含驱动程序的目录的路径列表(例如jarDirs = ['/Library/postgres-lib']
})。
在deployNodes中配置数据库
您可以通过传递deployNodes
中的设置来避免手动配置数据库设置。例如:
node {
name "O=Bank C,L=Tokyo,C=JP"
p2pPort 10010
webPort 10011
rpcSettings {
address("localhost:10036")
adminAddress("localhost:10037")
}
cordapps = ["$project.group:finance:$corda_release_version"]
rpcUsers = ext.rpcUsers
extraConfig = [
‘dataSourceProperties.dataSource.url’ : ‘jdbc:postgresql://localhost:32774/postgres’,
‘dataSourceProperties.dataSourceClassName’ : ‘org.postgresql.ds.PGSimpleDataSource’,
‘dataSourceProperties.dataSource.user’ : ‘postgres’,
‘dataSourceProperties.dataSource.password’ : ‘postgres’,
‘jarDirs’ : [ ‘/Library/Java/postgres’ ]
]
}
添加驱动程序
添加完这些设置后,需要在部署节点后将JDBC驱动程序添加到extraConfig.jarDirs
中指定的位置。
另一种方法是在node/build.gradle
中添加JDBC驱动程序依赖项(就像PostgreSQL一样)。无论何时编译/构建节点,它都将包含开箱即用的驱动程序。
(*)Corda Open Source附带了H2文件数据库,并且对Postgres和Sql Server提供了实验性支持。 Corda Enterprise对其他数据库(包括Sql Server,AzureSQL,Postgres和Oracle数据库)提供了更广泛的测试支持。尽管使用了Hibernate / JDBC,但某些查询可能需要修改才能在所有受支持的数据库之间兼容。 Corda Enterprise支持此兼容性。
答案 1 :(得分:3)
只需添加到Joel的答案中:
选项schema = [SCHEMA]
在Corda Open Source中不可用,某些驱动程序允许在JDBC URL字符串中设置当前模式。
对于Corda 3.X,包含.
的key应该用双引号引起来,以正确覆盖默认设置(在https://github.com/corda/corda/issues/4037中进行了描述),例如
dataSourceProperties = {
"dataSource.url" = "jdbc:postgresql://[HOST]:[PORT]/postgres"
...
或在deployNodes中:
extraConfig = [
'dataSourceProperties': [
'"dataSource.url"': 'jdbc:postgresql://localhost:5432/postgres',
...