package io.trygvis.test; import com.jolbox.bonecp.BoneCPDataSource; import org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy; import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; import javax.sql.DataSource; import java.io.PrintWriter; import java.sql.SQLException; import static java.lang.System.getProperty; public class DbUtil { public static DataSource createDataSource() throws SQLException { String username = getProperty("user.name"); String jdbcUrl = getProperty("database.url", "jdbc:postgresql://localhost/" + username); String user = getProperty("database.username", username); String pass = getProperty("database.password", username); return createDataSource(jdbcUrl, user, pass); } public static DataSource createDataSource(String jdbcUrl, String username, String password) throws SQLException { BoneCPDataSource ds = new BoneCPDataSource(); ds.setLogStatementsEnabled(true); ds.setJdbcUrl(jdbcUrl); ds.setUsername(username); ds.setPassword(password); ds.setConnectionTestStatement("/* ping*/SELECT 1"); ds.setDefaultAutoCommit(false); ds.setIdleConnectionTestPeriodInSeconds(60); ds.setIdleMaxAgeInSeconds(240); ds.setMaxConnectionsPerPartition(2); ds.setMinConnectionsPerPartition(0); ds.setPartitionCount(1); ds.setAcquireIncrement(1); ds.setStatementsCacheSize(1000); ds.setReleaseHelperThreads(1); ds.setStatisticsEnabled(true); ds.setLogStatementsEnabled(true); ds.setLogWriter(new PrintWriter(System.err)); return ds; } public static DataSource springifyDataSource(DataSource ds) { return new TransactionAwareDataSourceProxy(new LazyConnectionDataSourceProxy(ds)); } }