Corda节点如何扩展以与H2以外的数据库一起使用?

Joe*_*oel 1 corda

我已经在PostgreSQL上运行了Corda。Corda如何扩展以与其他数据库一起使用?将数据库驱动程序添加为Gradle依赖项并尝试连接到其他数据库是否足够?

Joe*_*oel 7

Corda将Hibernate 5.x与HikariCP JDBC连接池一起使用。

所有查询都是由Hibernate生成的,期望从finance模块中查询一个(CashSelection使用具有PreparedStatement特定于每个数据库供应商的SQL构造的JDBC )。

配置数据库

在运行时,节点在其node.conf文件中查找JDBC设置。默认情况下,它连接到嵌入式H2服务器(请参见/node/src/main/resources/reference.confCorda源代码中的文件)。

要将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]
Run Code Online (Sandbox Code Playgroud)

其中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’ ]
    ]
}
Run Code Online (Sandbox Code Playgroud)

添加驱动程序

添加这些设置后,需要将JDBC驱动程序添加到extraConfig.jarDirs节点部署后指定的位置。

另一种方法是在其中添加JDBC驱动程序依赖项node/build.gradle(就像在PostgreSQL中那样)。每当编译/构建节点时,它将立即包含驱动程序。

(*)Corda Open Source随H2文件数据库一起提供,并具有对Postgres和Sql Server的实验性支持。Corda Enterprise对其他数据库(包括Sql Server,AzureSQL,Postgres和Oracle数据库)进行了更广泛的测试支持。尽管使用了Hibernate / JDBC,某些查询可能仍需要修改才能在所有受支持的数据库中兼容。Corda Enterprise支持此兼容性。