[New] added connection pool properties for PersistenceHandler
- e.g. for PostgreSQL enforce pool size: <db.pool.maximumPoolSize>1</db.pool.maximumPoolSize>
This commit is contained in:
parent
a6b320268f
commit
01535fb515
|
@ -32,12 +32,15 @@ import javax.sql.DataSource;
|
|||
import li.strolch.agent.api.ComponentContainer;
|
||||
import li.strolch.agent.api.StrolchRealm;
|
||||
import li.strolch.persistence.api.StrolchPersistenceException;
|
||||
import li.strolch.runtime.StrolchConstants;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
public abstract class DbConnectionBuilder {
|
||||
|
||||
private static final String PROP_DB_POOL_PREFIX = "db.pool";
|
||||
|
||||
private ComponentContainer container;
|
||||
private ComponentConfiguration configuration;
|
||||
|
||||
|
@ -69,7 +72,37 @@ public abstract class DbConnectionBuilder {
|
|||
String username = configuration.getString(dbUsernameKey, null);
|
||||
String password = configuration.getString(dbPasswordKey, null);
|
||||
|
||||
DataSource ds = build(realmName, dbUrl, username, password, null);
|
||||
// find any pool configuration values
|
||||
Set<String> propertyKeys = configuration.getPropertyKeys();
|
||||
Properties props = new Properties();
|
||||
for (String key : propertyKeys) {
|
||||
if (!key.startsWith(PROP_DB_POOL_PREFIX))
|
||||
continue;
|
||||
|
||||
// TODO we should change how properties for realms are configured
|
||||
// since defaultRealm does not have to be on the key, we need this hack:
|
||||
String[] segments = key.split("\\.");
|
||||
String poolKey;
|
||||
String foundRealm;
|
||||
if (segments.length == 4) {
|
||||
// ends with realm
|
||||
foundRealm = segments[3];
|
||||
} else if (segments.length == 3) {
|
||||
// default realm
|
||||
foundRealm = StrolchConstants.DEFAULT_REALM;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Can't detect realm of this property: " + key);
|
||||
}
|
||||
// see if this is our realm
|
||||
if (!foundRealm.equals(realmName))
|
||||
continue;
|
||||
|
||||
poolKey = segments[2];
|
||||
String value = configuration.getString(key, null);
|
||||
props.setProperty(poolKey, value);
|
||||
}
|
||||
|
||||
DataSource ds = build(realmName, dbUrl, username, password, props);
|
||||
|
||||
dsMap.put(realmName, ds);
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
<db.url>jdbc:postgresql://localhost/testdb</db.url>
|
||||
<db.username>testuser</db.username>
|
||||
<db.password>test</db.password>
|
||||
<db.pool.maximumPoolSize>1</db.pool.maximumPoolSize>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component>
|
||||
|
|
|
@ -57,19 +57,15 @@ public final class PostgreSqlDbConnectionBuilder extends DbConnectionBuilder {
|
|||
public DataSource build(String realm, String url, String username, String password, Properties props) {
|
||||
|
||||
HikariDataSource ds;
|
||||
if (props != null) {
|
||||
props.setProperty("dataSource.autoCommit", "false");
|
||||
HikariConfig config = new HikariConfig(props);
|
||||
ds = new HikariDataSource(config);
|
||||
} else {
|
||||
ds = new HikariDataSource();
|
||||
ds.setAutoCommit(false);
|
||||
}
|
||||
HikariConfig config = new HikariConfig(props);
|
||||
config.setAutoCommit(false);
|
||||
config.setPoolName(realm);
|
||||
config.setJdbcUrl(url);
|
||||
config.setUsername(username);
|
||||
config.setPassword(password);
|
||||
|
||||
ds.setPoolName(realm);
|
||||
ds.setJdbcUrl(url);
|
||||
ds.setUsername(username);
|
||||
ds.setPassword(password);
|
||||
ds = new HikariDataSource(config);
|
||||
System.err.println(ds.getMaximumPoolSize());
|
||||
|
||||
return new StrolchPostgreDataSource(ds);
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
<db.url>jdbc:postgresql://localhost/testdb</db.url>
|
||||
<db.username>testuser</db.username>
|
||||
<db.password>test</db.password>
|
||||
<db.pool.maximumPoolSize>1</db.pool.maximumPoolSize>
|
||||
</Properties>
|
||||
</Component>
|
||||
</env>
|
||||
|
|
|
@ -41,10 +41,12 @@
|
|||
<db.url.first>jdbc:postgresql://localhost/testdb1</db.url.first>
|
||||
<db.username.first>testuser1</db.username.first>
|
||||
<db.password.first>test</db.password.first>
|
||||
<db.pool.maximumPoolSize.first>1</db.pool.maximumPoolSize.first>
|
||||
|
||||
<db.url.second>jdbc:postgresql://localhost/testdb2</db.url.second>
|
||||
<db.username.second>testuser2</db.username.second>
|
||||
<db.password.second>test</db.password.second>
|
||||
<db.pool.maximumPoolSize.second>1</db.pool.maximumPoolSize.second>
|
||||
</Properties>
|
||||
</Component>
|
||||
</env>
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
<db.url>jdbc:postgresql://localhost/testdb</db.url>
|
||||
<db.username>testuser</db.username>
|
||||
<db.password>test</db.password>
|
||||
<db.pool.maximumPoolSize>1</db.pool.maximumPoolSize>
|
||||
</Properties>
|
||||
</Component>
|
||||
</env>
|
||||
|
|
|
@ -52,10 +52,12 @@
|
|||
<db.url.svcCached>jdbc:postgresql://localhost/cacheduserdb</db.url.svcCached>
|
||||
<db.username.svcCached>cacheduser</db.username.svcCached>
|
||||
<db.password.svcCached>test</db.password.svcCached>
|
||||
<db.pool.maximumPoolSize.svcCached>1</db.pool.maximumPoolSize.svcCached>
|
||||
|
||||
<db.url.svcTransactional>jdbc:postgresql://localhost/transactionaluserdb</db.url.svcTransactional>
|
||||
<db.username.svcTransactional>transactionaluser</db.username.svcTransactional>
|
||||
<db.password.svcTransactional>test</db.password.svcTransactional>
|
||||
<db.pool.maximumPoolSize.svcTransactional>1</db.pool.maximumPoolSize.svcTransactional>
|
||||
|
||||
</Properties>
|
||||
</Component>
|
||||
|
|
Loading…
Reference in New Issue