Each node should have a data source that points to one Liferay DXP database (or a database cluster) that all the nodes share. This means, of course, Liferay DXP cannot (and should not) use the embedded HSQL database that is shipped with the bundles (but you already knew that, right?). And, of course, the database server should be on a separate system from the Liferay DXP server.
Read-Writer Database Configuration
To improve database performance, you can use a read-writer database configuration. Instead of using the same data source for read and read-write operations, this strategy uses a separate data source for each operation type. DXP’s Aspect Oriented Programming (AOP) transaction infrastructure directs read transactions to the read data source and read-write transactions to the write data source.
Connections to separate read and read-write data sources are configured using JDBC or JNDI Portal Properties (e.g., in a portal-ext.properties
file), as explained in the following sections. The data sources should use separate instances of the DXP database, where the read-write database instance is replicated to the read database instance.
JDBC
Edit your portal-ext.properties
file following these steps to connect directly to your separate read and write data sources using JDBC:
-
Set the default connection pool provider. For provider information, see the JDBC properties reference. The default setting specifies HikariCP as the pool provider:
jdbc.default.liferay.pool.provider=hikaricp
-
Configure JDBC connections to your separate read and write data sources. Here’s an example:
jdbc.read.driverClassName=[place your driver name here] jdbc.read.url=[place the URL to your "read" database here] jdbc.read.username=[place your user name here] jdbc.read.password=[place your password here] jdbc.write.driverClassName=[place your driver name here] jdbc.write.url=[place the URL to your "read-write" database here] jdbc.write.username=[place your user name here] jdbc.write.password=[place your password here]
For example JDBC connection values, please see Database Templates.
-
Configure DXP to use the write data source (the data source whose prefix is
jdbc.write.
) to create the Counter data source. A separate data source is always dedicated to the counter.counter.jdbc.prefix=jdbc.write.
-
Optionally validate the data connections to make sure bad connections are handled gracefully.
Some connection pools used with JDBC4 (check your driver’s JDBC version) validate connections automatically. Other connection pools may require additional, vendor-specific connection validation properties—specify them in a Portal Properties file. Refer to your connection pool provider documentation for connection validation details.
-
Enable the read-writer database configuration by copying the default
spring.configs
andspring.infrastructure.configs
Portal Properties to yourportal-ext.properties
file and adding the following Spring configuration file paths to them.Add to
spring.configs
:META-INF/dynamic-data-source-spring.xml
Add to
spring.infrastructure.configs
:META-INF/dynamic-data-source-infrastructure-spring.xml
For more information, see the Spring configuration Portal Properties.
JNDI
Edit your portal-ext.properties
file following these steps to connect to your read and write data sources on your app server using JNDI:
-
Set your read and write JNDI data source user names and passwords.
jdbc.read.jndi.name=[place your "read" data source JNDI name here] jdbc.read.username=*[place your user name here] jdbc.read.password=[place your password here] jdbc.write.jndi.name=[place your "read-write" data source JNDI name here] jdbc.write.username=[place your user name here] jdbc.write.password=[place your password here]
-
Configure DXP to use the write data source (the data source whose prefix is
jdbc.write.
) to create the Counter data source. A separate data source is always dedicated to the counter.counter.jdbc.prefix=jdbc.write.
-
Optionally validate the data connections to make sure bad connections are handled gracefully.
Some connection pools used with JDBC4 (check your driver’s JDBC version) validate connections automatically. Other connection pools may require additional, vendor-specific connection validation properties—specify them in a Portal Properties file. Refer to your connection pool provider documentation for connection validation details.
-
Enable the read-writer database configuration by copying the default
spring.configs
andspring.infrastructure.configs
Portal Properties to yourportal-ext.properties
file and add the following Spring configuration file paths to them.Add to
spring.configs
:META-INF/dynamic-data-source-spring.xml
Add to
spring.infrastructure.configs
:META-INF/dynamic-data-source-infrastructure-spring.xml
For more information, see the Spring configuration Portal Properties.
DXP uses a read data source, a write data source, and a counter data source the next time it starts.