【发布时间】:2018-02-01 21:31:11
【问题描述】:
我正在尝试手动设置我的 SPring Boot 应用程序中的所有属性,因为我最终将使用不同的 DataSource 来处理常规 JDBC 内容。但这是我的代码:
@Bean
@Primary
public DataSource getJpaDatasource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(hibernateConfiguration.getDriverClassName());
dataSource.setUrl(hibernateConfiguration.getDatabaseUrl());
dataSource.setUsername(hibernateConfiguration.getUsername());
dataSource.setPassword(hibernateConfiguration.getPassword());
return dataSource;
}
现在我正在使用遗留代码,需要创建一个实体工厂,我想使用 Hikari 作为连接池。这是代码:
@Bean
public EntityManagerFactory getEntityManager() {
LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
localContainerEntityManagerFactoryBean.setDataSource(getJpaDatasource());
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
localContainerEntityManagerFactoryBean.setJpaVendorAdapter(vendorAdapter);
Map<String, String> hibernateProperties = new HashMap<>();
hibernateProperties.put("hibernate.dialect",hibernateConfiguration.getProperties().get("hibernate.dialect"));
hibernateProperties.put("hibernate.show-sql",hibernateConfiguration.getProperties().get("show-sql"));
hibernateProperties.put("hibernate.format-sql",hibernateConfiguration.getProperties().get("format-sql"));
hibernateProperties.put("hibernate.id.new_generator_mappings",hibernateConfiguration.getProperties().get("id.new_generator_mappings"));
hibernateProperties.put("hibernate.ejb.naming_strategy",hibernateConfiguration.getProperties().get("ejb.naming_strategy"));
hibernateProperties.put("hibernate.hikari.minimumIdle",hibernateConfiguration.getConnectionPool().get("hibernate.hikari.minimumIdle"));
hibernateProperties.put("hibernate.hikari.maximumPoolSize", hibernateConfiguration.getConnectionPool().get("hibernate.hikari.maximumPoolSize"));
hibernateProperties.put("hibernate.hikari.idleTimeout", hibernateConfiguration.getConnectionPool().get("hibernate.hikari.idleTimeout"));
hibernateProperties.put("hibernate.connection.provider_class",hibernateConfiguration.getConnectionPool().get("hibernate.connection.provider_class"));
localContainerEntityManagerFactoryBean.setJpaPropertyMap(hibernateProperties);
localContainerEntityManagerFactoryBean.afterPropertiesSet();
EntityManagerFactory ef = (EntityManagerFactory)localContainerEntityManagerFactoryBean.getObject();
return ef;
}
现在什么都没有返回 null 或任何东西,我只是得到这个错误:
nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]
任何想法我缺少什么?
编辑 为了消除所有明显的问题:
- 是的,我可以通过 mysqlWorkbench 连接到数据库
- 用户名和密码正确。
- 没有连接池我已经厌倦了。
- 在第一次调用 db 之前不会引发错误。即“从用户中选择*”
这就是我得到的:
Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!
这似乎很简单,但我无法弄清楚这一点!
【问题讨论】:
标签: java spring hibernate jdbc