【问题标题】:Hikari Connection pool with HSQL In memoryHikari Connection pool with HSQL In memory
【发布时间】:2016-04-18 18:18:13
【问题描述】:
public DataSource createHikariDatasource(String url, String username, String password, String driver) {
    HikariConfig hikariConfig = new HikariConfig();
    hikariConfig.setDataSourceClassName(driver);
    hikariConfig.setUsername(username);
    hikariConfig.setJdbcUrl(url);
    hikariConfig.setPassword(password);
    hikariConfig.setConnectionTestQuery("show tables");
    DataSource ds = new HikariDataSource(hikariConfig);
    return ds;
}

这是失败的测试用例

@Test
public void createHikariCPDatasource() throws Exception {
    GreetingConfig greetingConfig = new GreetingConfig();

    String driver = "org.hsqldb.jdbc.JDBCDataSource";
    String url="jdbc:hsqldb:mem:testdb";
    String user = "SA";
    String password = "";


    logger.debug("get message data source");
    DataSource dataSource = greetingConfig.createHikariDatasource(url, user, password,driver);

    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    jdbcTemplate.execute(env.getProperty("init"));
    jdbcTemplate.execute(env.getProperty("insert"));
}

这是错误:(忽略我在上面的测试用例中没有断言状态,因为它无法在到达断言之前创建连接。而且 init 和 insert 只是用于初始化和插入的普通 sql一个表/行)

com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: null
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:524)
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:118)
    at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:71)
    at org.cam.go.microservice.GreetingConfig.createHikariDatasource(GreetingConfig.java:233)
    at org.cam.go.microservice.GreetingConfigTest.createHikariCPDatasource(GreetingConfigTest.java:78)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

可能是什么问题?

【问题讨论】:

    标签: java spring-boot datasource jdbctemplate hikaricp


    【解决方案1】:

    当我不指定数据源类名时对我有用。

    类似的东西

    private static HikariConfig hikariConfig() {
            HikariConfig config = new HikariConfig();
            config.setJdbcUrl("jdbc:hsqldb:mem:customer");
            config.setUsername("sa");
            config.setPassword("");
            return config;
        }
    

    【讨论】: