3.3.1. Подключение к базам данных
CUBA-приложение получает соединение с базой данных через JDBC DataSource
. Источник данных может быть сконфигурирован в приложении или получен из JNDI. Способ получения источника данных задается свойством приложения cuba.dataSourceProvider
: его значение может быть либо application
, либо jndi
.
Соединения с главным и дополнительным хранилищами можно легко сконфигурировать в CUBA Studio, см. его документацию. Информация, приведенная ниже, может быть полезна при поиске проблем и при необходимости задания параметров, недоступных в Studio, например параметров пула соединений.
- Конфигурирование источника данных в приложении
-
Если источник данных сконфигурирован в приложении, фреймворк создает пул соединений используя HikariCP. При этом и параметры соединения, и параметры пула задаются свойствами приложения, расположенными в файле
app.properties
модуляcore
. Данный способ является рекомендуемым, если вам не нужен специфический пул соединений, предоставляемый сервером приложения.Следующие свойства приложения задают тип БД и параметры соединения:
-
cuba.dbmsType
- задает тип СУБД. -
cuba.dataSourceProvider
- значениеapplication
указывает, что источник данных должен быть сконфигурирован свойствами приложения. -
cuba.dataSource.username
- имя пользователя БД. -
cuba.dataSource.password
- пароль пользователя БД. -
cuba.dataSource.dbName
- имя БД. -
cuba.dataSource.host
- имя хоста сервера БД. -
cuba.dataSource.port
- необязательный параметр, задает порт сервера БД, если он отличается от стандартного для данного типа СУБД. -
cuba.dataSource.jdbcUrl
- необязательный параметр, задает полный JDBC URL если необходимо передать дополнительные параметры соединения. При этом все остальные отдельные параметры описанные выше все равно необходимы для работы задач миграции.
Для конфигурирования параметров пула соединений необходимо указать свойства HikariCP с префиксом
cuba.dataSource.
, напримерcuba.dataSource.maximumPoolSize
илиcuba.dataSource.connectionTimeout
. См. полный список поддерживаемых свойств и их значений по умолчанию в документации по HikariCP.Если в вашем приложении используются дополнительные хранилища, необходимо указать такой же набор параметров для каждого хранилища. При этом имя хранилища добавляется ко второй части имени свойства:
Например:
# main data store connection parameters cuba.dbmsType = hsql cuba.dataSourceProvider = application cuba.dataSource.username = sa cuba.dataSource.password = cuba.dataSource.dbName = demo cuba.dataSource.host = localhost cuba.dataSource.port = 9111 cuba.dataSource.maximumPoolSize = 20 # names of additional data stores cuba.additionalStores = clients,orders # 'clients' data store connection parameters cuba.dbmsType_clients = postgres cuba.dataSourceProvider_clients = application cuba.dataSource_clients.username = postgres cuba.dataSource_clients.password = postgres cuba.dataSource_clients.dbName = clients_db cuba.dataSource_clients.host = localhost # 'orders' data store connection parameters cuba.dbmsType_orders = mssql cuba.dataSourceProvider_orders = application cuba.dataSource_orders.jdbcUrl = jdbc:sqlserver://localhost;databaseName=orders_db;currentSchema=my_schema cuba.dataSource_orders.username = sa cuba.dataSource_orders.password = myPass123 cuba.dataSource_orders.dbName = orders_db cuba.dataSource_orders.host = localhost
Кроме того, для каждого хранилища необходимо в файле
spring.xml
модуляcore
задать определение бинаCubaDataSourceFactoryBean
с соответствующим параметромstoreName
. Например:<bean id="cubaDataSource_clients" class="com.haulmont.cuba.core.sys.CubaDataSourceFactoryBean"> <property name="storeName" value="clients"/> </bean> <bean id="cubaDataSource_orders" class="com.haulmont.cuba.core.sys.CubaDataSourceFactoryBean"> <property name="storeName" value="orders"/> </bean>
Если источник данных сконфигурирован в приложении, задачи Gradle по миграции БД могут не иметь параметров, так как они могут быть получены из свойств приложения. Это является дополнительным преимуществом данного способа определения источника даннных. Например:
task createDb(dependsOn: assembleDbScripts, description: 'Creates local database', type: CubaDbCreation) { } task updateDb(dependsOn: assembleDbScripts, description: 'Updates local database', type: CubaDbUpdate) { }
-
- Получение источника данных из JNDI
-
Если необходимо использовать источник данных, предоставляемый сервером приложения через JNDI, задайте следующие свойства приложения в файле
app.properties
модуляcore
:-
cuba.dbmsType
- задает тип СУБД. -
cuba.dataSourceProvider
- значениеjndi
указывает, что источник данных должен быть получен из JNDI.
JNDI-имя источника данных задается свойством cuba.dataSourceJndiName, которое по умолчанию имеет значение
java:comp/env/jdbc/CubaDS
. Для дополнительных хранилищ необходимо задать свойство с таким же именем, но с добавлением имени хранилища.Например:
# main data store connection parameters cuba.dbmsType = hsql cuba.dataSourceProvider = jndi # names of additional data stores cuba.additionalStores = clients,orders # 'clients' data store connection parameters cuba.dbmsType_clients = postgres cuba.dataSourceProvider_clients = jndi cuba.dataSourceJndiName_clients = jdbc/ClientsDS # 'orders' data store connection parameters cuba.dbmsType_orders = mssql cuba.dataSourceProvider_orders = jndi cuba.dataSourceJndiName_orders = jdbc/OrdersDS
Кроме того, для каждого хранилища необходимо в файле
spring.xml
модуляcore
задать определение бинаCubaDataSourceFactoryBean
с соответствующими параметрамиstoreName
иjndiNameAppProperty
. Например:<bean id="cubaDataSource_clients" class="com.haulmont.cuba.core.sys.CubaDataSourceFactoryBean"> <property name="storeName" value="clients"/> <property name="jndiNameAppProperty" value="cuba.dataSourceJndiName_clients"/> </bean> <bean id="cubaDataSource_orders" class="com.haulmont.cuba.core.sys.CubaDataSourceFactoryBean"> <property name="storeName" value="orders"/> <property name="jndiNameAppProperty" value="cuba.dataSourceJndiName_orders"/> </bean>
Источники данных, получаемые из JNDI конфигурируются специфичным для используемого сервера приложения способом. Для Tomcat это делается в файле context.xml. CUBA Studio записывает параметры соединения в файл
modules/core/web/META-INF/context.xml
и использует его в процессе стандартного развертывания при разработке приложения.Если источник данных сконфигурирован в
context.xml
, задачи миграции БД должны иметь собственные параметры подключения к БД, например:task createDb(dependsOn: assembleDbScripts, description: 'Creates local database', type: CubaDbCreation) { dbms = 'hsql' host = 'localhost:9111' dbName = 'demo' dbUser = 'sa' dbPassword = '' } task updateDb(dependsOn: assembleDbScripts, description: 'Updates local database', type: CubaDbUpdate) { dbms = 'hsql' host = 'localhost:9111' dbName = 'demo' dbUser = 'sa' dbPassword = '' }
-