I was doing that, can now function correctly.
1.application.properties
# hikariCP
spring.datasource.type=com.zaxxer.HikariDataSource
spring.datasource.driver-class-name=@datasource.db.databaseDriver@
spring.datasource.url=@datasource.db.databaseUrl@
spring.datasource.username=@datasource.db.username@
spring.datasource.password=@datasource.db.password@
spring.datasource.poolName=SpringBootHikariCP
spring.datasource.maximumPoolSize=60
spring.datasource.minimumIdle=3
spring.datasource.maxLifetime=2000000
spring.datasource.connectionTimeout=30000
spring.datasource.idleTimeout=30000
spring.datasource.pool-prepared-statements=true
spring.datasource.max-open-prepared-statements=250
Hikari config
@Configuration
@Component
class DataSourceConfig {
@Value("${spring.datasource.username}")
private String user;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.url}")
private String dataSourceUrl;
@Value("${spring.datasource.poolName}")
private String poolName;
@Value("${spring.datasource.connectionTimeout}")
private int connectionTimeout;
@Value("${spring.datasource.maxLifetime}")
private int maxLifetime;
@Value("${spring.datasource.maximumPoolSize}")
private int maximumPoolSize;
@Value("${spring.datasource.minimumIdle}")
private int minimumIdle;
@Value("${spring.datasource.idleTimeout}")
private int idleTimeout;
public DataSource primaryDataSource() {
HikariConfig config = new HikariConfig();
config.setPoolName(poolName);
config.setJdbcUrl(dataSourceUrl);
config.setUsername(user);
config.setPassword(password);
config.setConnectionTimeout(connectionTimeout);
config.setMinimumIdle(minimumIdle);
config.setIdleTimeout(idleTimeout);
config.setMaximumPoolSize(maximumPoolSize);
config.setMaxLifetime(idleTimeout);
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
HikariDataSource ds = new HikariDataSource(config);
return ds;
}
}
ebean
@Component
public class EbeanFactoryBean implements FactoryBean<EbeanServer>, EnvironmentAware {
@Autowired
CurrentUserProv currentUser;
@Autowired
DataSourceConfig dataSourceConfig;
/**
* Properties used to configure EbeanServer instance
* (loaded from spring boot application properties).
*/
Properties properties = new Properties();
public EbeanFactoryBean() {
}
@Override
public EbeanServer getObject() throws Exception {
ServerConfig config = new ServerConfig();
config.setName("db");
config.setCurrentUserProvider(currentUser);
config.setDataSource(dataSourceConfig.primaryDataSource());
config.setDefaultServer(true);
config.setRegister(true);
return EbeanServerFactory.create(config);
}
@Override
public Class<?> getObjectType() {
return EbeanServer.class;
}
@Override
public boolean isSingleton() {
return true;
}
@Override
public void setEnvironment(Environment environment) {
loadProperties((AbstractEnvironment) environment);
}
/**
* Load into Properties (from Spring PropertySource implementations).
*/
private void loadProperties(AbstractEnvironment environment) {
MutablePropertySources propertySources = environment.getPropertySources();
// reverse the order of the property sources
List<MapPropertySource> props = new ArrayList<>();
for (PropertySource propertySource : propertySources) {
if (propertySource instanceof MapPropertySource) {
props.add(0, (MapPropertySource) propertySource);
}
}
// merge them into the single Properties
for (MapPropertySource propertySource : props) {
properties.putAll(propertySource.getSource());
}
}
}