【问题标题】:Unable to create requested service [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]无法创建请求的服务 [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]
【发布时间】: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]

任何想法我缺少什么?

编辑 为了消除所有明显的问题:

  1. 是的,我可以通过 mysqlWorkbench 连接到数据库
  2. 用户名和密码正确。
  3. 没有连接池我已经厌倦了。
  4. 在第一次调用 db 之前不会引发错误。即“从用户中选择*”

这就是我得到的:

Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!

这似乎很简单,但我无法弄清楚这一点!

【问题讨论】:

    标签: java spring hibernate jdbc


    【解决方案1】:

    当通过 Spring 手动覆盖某些内容时,请务必记住您必须覆盖所有内容。我忘记的是 TransactionManager。这就是全部:

    @Bean
    public JpaTransactionManager jpaTransactionManager() {
        LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = this.getEntityManagerFactoryBean();
        EntityManagerFactory ef = (EntityManagerFactory)localContainerEntityManagerFactoryBean.getObject();
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(ef);
        return transactionManager;
    }
    

    我不知道连接池是否正常工作,但我能够从数据库中检索数据。

    【讨论】:

      猜你喜欢
      • 2016-07-20
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2017-03-27
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多