Skip to content

Commit

Permalink
APPNG-2476
Browse files Browse the repository at this point in the history
  • Loading branch information
madness-inc committed Apr 26, 2023
1 parent 1be0eb8 commit 0038ec6
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 2 deletions.
Expand Up @@ -2,8 +2,10 @@

### Database type. Currently hsql, mysql, postgresql and mssql are supported.
database.type = hsql
### http://www.hsqldb.org/doc/2.0/guide/sessions-chapt.html#snc_tx_mvcc
database.initSql = SET DATABASE TRANSACTION CONTROL MVCC
# see validationQuery parameter at
# http://tomcat.apache.org/tomcat-8.5-doc/jdbc-pool.html#Common_Attributes
# https://tomcat.apache.org/tomcat-9.0-doc/jdbc-pool.html#Common_Attributes
database.validationQuery = select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
# the time in minutes between connection validation
database.validationPeriod = 15
Expand Down
Expand Up @@ -110,7 +110,8 @@ public DataSourceFactory dataSource(
@Value("${database.validationTimeout:5000}") Integer validationTimeout,
@Value("${database.connectionTimeout:5000}") Integer connectionTimeout,
@Value("${database.logPerformance:false}") boolean logPerformance,
@Value("${database.autoCommit:true}") boolean autoCommit
@Value("${database.autoCommit:true}") boolean autoCommit,
@Value("${database.initSql:}") String initSql
// @formatter:on
) {
DatabaseConnection connection = new DatabaseConnection(DatabaseType.valueOf(type.toUpperCase()), jdbcUrl,
Expand All @@ -126,6 +127,7 @@ public DataSourceFactory dataSource(
dataSourceFactory.setValidationTimeout(validationTimeout);
dataSourceFactory.setConnectionTimeout(connectionTimeout);
dataSourceFactory.setAutoCommit(autoCommit);
dataSourceFactory.setConnectionInitSql(initSql);
dataSourceFactory.configure(connection);
return dataSourceFactory;
}
Expand Down
Expand Up @@ -40,6 +40,7 @@ public class DataSourceFactory implements FactoryBean<DataSource>, DisposableBea
private @Setter long connectionTimeout = DEFAULT_TIMEOUT;
private @Setter long validationTimeout = DEFAULT_TIMEOUT;
private @Setter long maxLifetime = DEFAULT_LIFE_TIME;
private @Setter String connectionInitSql;

public DataSourceFactory() {

Expand All @@ -65,6 +66,7 @@ private DatasourceConfigurer initConfigurer() {
this.configurer.setConnectionTimeout(connectionTimeout);
this.configurer.setValidationTimeout(validationTimeout);
this.configurer.setMaxLifetime(maxLifetime);
this.configurer.setConnectionInitSql(connectionInitSql);
this.configurer.setAutoCommit(autoCommit);
} catch (Exception e) {
LOGGER.error(String.format("error creating instance of '%s'", configurerClass), e);
Expand Down
Expand Up @@ -96,4 +96,6 @@ public interface DatasourceConfigurer {
default void setAutoCommit(boolean autoCommit) {
}

void setConnectionInitSql(String sql);

}
Expand Up @@ -43,6 +43,7 @@ public class HikariCPConfigurer implements DatasourceConfigurer {
private @Setter long validationTimeout = DEFAULT_TIMEOUT;
private @Setter long maxLifetime = DEFAULT_LIFE_TIME;
private @Setter boolean autoCommit = false;
private @Setter String connectionInitSql;

public HikariCPConfigurer() {

Expand All @@ -56,6 +57,9 @@ public void configure(DatabaseConnection connection) {
configuration.setConnectionTimeout(connectionTimeout);
configuration.setValidationTimeout(validationTimeout);
configuration.setMaxLifetime(maxLifetime);
if (StringUtils.isNotBlank(connectionInitSql)) {
configuration.setConnectionInitSql(connectionInitSql);
}
if (StringUtils.isNotBlank(connection.getValidationQuery())) {
configuration.setConnectionTestQuery(connection.getValidationQuery());
}
Expand Down
Expand Up @@ -17,6 +17,7 @@

import javax.sql.DataSource;

import org.apache.commons.lang3.StringUtils;
import org.apache.tomcat.jdbc.pool.ConnectionPool;
import org.appng.core.JMXUtils;
import org.appng.core.domain.DatabaseConnection;
Expand All @@ -37,6 +38,7 @@ public class TomcatJdbcConfigurer implements DatasourceConfigurer {
private @Setter long connectionTimeout = DEFAULT_TIMEOUT;
private @Setter long validationTimeout = DEFAULT_TIMEOUT;
private @Setter long maxLifetime = DEFAULT_LIFE_TIME;
private @Setter String connectionInitSql;

public TomcatJdbcConfigurer() {

Expand All @@ -60,6 +62,12 @@ public void configure(DatabaseConnection connection) {
tomcatDatasource.setMaxAge(maxLifetime);
tomcatDatasource.setValidationInterval(connection.getValidationPeriod() * 60 * 1000);
tomcatDatasource.setValidationQuery(connection.getValidationQuery());
if (StringUtils.isNotBlank(connectionInitSql)) {
tomcatDatasource.setInitSQL(connectionInitSql);
}
if (StringUtils.isNotBlank(connection.getValidationQuery())) {
tomcatDatasource.setValidationQuery(connectionInitSql);
}
tomcatDatasource.setValidationQueryTimeout((int) validationTimeout);
if (tomcatDatasource.getMaxIdle() > tomcatDatasource.getMaxActive()) {
tomcatDatasource.setMaxIdle(tomcatDatasource.getMaxActive());
Expand Down
2 changes: 2 additions & 0 deletions appng-core/src/test/resources/appNG-hsql.properties
Expand Up @@ -2,6 +2,8 @@

database.type = hsql
database.maxLifetime = 50000
### http://www.hsqldb.org/doc/2.0/guide/sessions-chapt.html#snc_tx_mvcc
database.initSql = SET DATABASE TRANSACTION CONTROL MVCC

hibernate.connection.url = jdbc:hsqldb:file:target/database/appng
hibernate.dialect = org.appng.persistence.dialect.HSQLDialect
Expand Down

0 comments on commit 0038ec6

Please sign in to comment.