EBean是一个无状态的ORM。http://ebean-orm.github.io/
EBean提供了一个Spring Boot工件http://ebean-orm.github.io/docs/setup/spring#spring-boothttps://github.com/ebean-orm/avaje-ebeanorm-spring
但在这种情况下,EBean直接读取jdbc连接细节,如下所示。
ebean.db.ddl.generate=true
ebean.db.ddl.run=true
datasource.db.username=sa
datasource.db.password=
datasource.db.databaseUrl=jdbc:h2:mem:tests
datasource.db.databaseDriver=org.h2.Driver
我想利用我现有的HikariCP DataSource与Spring Boot和EBean。
我们怎么做?
我正在这样做,现在可以正常工作。
1.应用。性质
# 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配置
@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;
}
}
埃宾
@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());
}
}
}
您可以在此处查看一个Spring Boot示例:
https://github.com/bwajtr/java-persistence-frameworks-comparison
在该存储库中有SpringBoot配置:https://github.com/bwajtr/java-persistence-frameworks-comparison/blob/master/src/main/java/com/clevergang/dbtests/DbTestsApplication.java
在该类中,您可以看到EBean是如何配置的,以及数据源是如何连接到其中的-
我正在使用hikaricp(这可能也适用于任何其他数据库连接池)。我有一个DBPool类,在其中我实例化了一个HikariDataSource(使用HikariConfig对象)。对于这个DBPool,我使用lazyholder习惯用法来限制每个VM一个池实例。但是,一旦获得对池的引用,就可以检索连接对象(无需任何进一步的锁/同步/信号量检查),因为我认为连接池会处理我的连接对象限制。每次通过数据
我正在开发一个查询多个数据库的监控插件。我想使用HikariCP来保持连接打开,但我不知道如何实例化连接池。 HikariCP是否只使用一个池来存储多个数据库?或者一个数据库只有一个池,我的责任是实例化我将使用的数据库中的尽可能多的池。
地狱, 我是否可以获取HKARIP连接池度量信息,如总连接数、空闲连接数等? 我知道Hikaripool记录这样的信息: 清理前池统计数据库(总计=20,使用次数=0,可用次数=20,等待次数=0) 但是它太频繁了,我的代码无法控制它。我想在可配置的时间内记录这些信息,例如1分钟。顺便说一句,我用Scala Slick 3.0
我有这个使用HikariCP连接池的代码: 我通过发出命令“Show Processlist”来监控mysql中的连接,我看到在行之后创建了100个连接: 。。。正在运行。我肯定这不是命中注定的,对吧?它应该在稍后执行pooledDataSource时创建连接。getConnection()。 我做错了什么?为什么它会立即创建100个连接??
我正在尝试将我的应用程序与JMS队列集成(使用ActiveMQ)。我使用Spring集成作为集成组件。我们希望有连池。已将'maxContopt消费者'作为100提供给'DefaultMessageListenerContainer'。 问题是,一旦从队列中读取了所有消息,“消费者数量”仍为100(如ActiveMq控制台上所示)。当我们在数据库中使用连接池(通过JNDI)时,一旦不再需要连接,它
此刻我被困住的一点是调试处于“活动”状态的连接,以及它们正在做什么或它们当前被困的原因。 当我运行“10个同时用户”时,它基本上可以转换成2或3倍于此的查询,因此,当我打开HikariCP调试日志时,它会挂在类似的位置-上,而“active”连接并没有真正释放连接,这正是我试图找出的原因,因为查询相当简单,表本身只有4个字段(包括主键)。 HikariCP人员的最佳实践通常也是,增加连接池不是实现