2016-04-18 4 views
0
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; 
} 

Und hier ist der Testfall, derHikari Verbindungspool mit HSQL Im Speicher

@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")); 
} 

Hier ist der Fehler nicht: (Ignorieren Sie, dass ich es nicht zu einer Assertion statemet in dem obigen Testfall haben als nicht zu schafft eine Verbindung, bevor es zu einer Assertion bekommen kann. auch die init und Einsatz sind einfach nur sQL zu initialisieren und eine Tabelle/Zeilen) einfügen

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) 

Was könnte das Problem sein?

Antwort

1

Funktioniert für mich, wenn ich keinen Datenquellenklassennamen angeben.

So etwas wie dieses

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