Reputation: 375
I am creating javax.sql.DataSource
as below:
@Primary
@Bean
@ConfigurationProperties("spring.datasource")
public DataSource commonDataSource() {
String url = <url>;
String user = <user>;
String driverClass = "oracle.jdbc.driver.OracleDriver";
return DataSourceBuilder.create().url(url).username(user).password(<pwd>).driverClassName(driverClass).build();
//return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "commonEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean commonEntityManagerFactory(EntityManagerFactoryBuilder builder) {
Properties jpaProperties = new Properties();
jpaProperties.put("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
jpaProperties.put("hibernate.connection.autocommit", false);
LocalContainerEntityManagerFactoryBean entityManagerFactory = builder.dataSource(commonDataSource())
.packages("com.data.model.common").build();
entityManagerFactory.setJpaProperties(jpaProperties);
entityManagerFactory.afterPropertiesSet();
return entityManagerFactory;
}
@Primary
@Bean
public PlatformTransactionManager commonTransactionManager(final @Qualifier("commonEntityManagerFactory") LocalContainerEntityManagerFactoryBean commonEntityManagerFactory) {
return new JpaTransactionManager(commonEntityManagerFactory.getObject());
}
Could someone please suggest how to set connection pool properties here. I want to use HikariCP. I am not using following properties in application.propertires
#HikariCP settings
spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.minimum-idle=1
as I am creating multiple data sources. So, I want to set the connection pool related properties programmatically while instantiating the DataSource.
Upvotes: 2
Views: 4491
Reputation: 116
You can do one of the options described here: https://github.com/brettwooldridge/HikariCP#initialization
Here's what we have:
@Getter
@Setter
@ToString(exclude="password")
@Configuration
@ConfigurationProperties(prefix="db")
public class RepositoryProperties {
/**
* Database connection string.
*/
private String url;
/**
* Database username.
*/
private String username;
/**
* Database password.
*/
private String password;
/**
* custom properties to be set on the kikari data source
* implemented as a map so we can add/remove any of them
* without changing the code
*/
private Map<String,String> hikari;
}
@Bean
public DataSource getDataSource() {
Properties properties = new Properties();
properties.setProperty("driverClassName", DEFAULT_JDBC_DRIVER);
properties.setProperty("jdbcUrl", repositoryProperties.getUrl());
properties.setProperty("username", repositoryProperties.getUsername());
properties.setProperty("password", repositoryProperties.getPassword());
if (repositoryProperties.getHikari() != null) {
repositoryProperties.getHikari().forEach(properties::setProperty);
}
HikariConfig config = new HikariConfig(properties);
return new HikariDataSource(config);
}
db.url=jdbc:mysql://localhost:3306/dbname
db.username=dbuname
db.password=dbpass
db.hikari.idleTimeout=30000
db.hikari.maxLifetime=30000
db.hikari.connectionTimeout=30000
db.hikari.validationTimeout=5000
db.hikari.leakDetectionThreshold=30000
Upvotes: 2