【问题标题】:How to configure datasource with HikariCP in Spring @Configuration class?如何在 Spring @Configuration 类中使用 HikariCP 配置数据源?
【发布时间】:2014-07-01 01:27:15
【问题描述】:

我正在尝试在 Spring @Configuration 类[数据库是 oracle] 中配置 HikariCP 数据源。但它不起作用。

我在网上搜索,发现HikariCP数据源需要配置构造函数。我已经尝试过[在他们的 github 网页中提到的方式],但它仍然无法正常工作。请帮我解决这个问题。

private HikariDataSource dataSource() {
    final HikariDataSource ds = new HikariDataSource();
    ds.setMaximumPoolSize(100); 
    ds.setDataSourceClassName("oracle.jdbc.driver.OracleDriver"); 
    ds.addDataSourceProperty("url", "jdbc:oracle:thin:@localhost:1521:XE"); 
    ds.addDataSourceProperty("user", "username");
    ds.addDataSourceProperty("password", "password");
    ds.addDataSourceProperty("cachePrepStmts", true); 
    ds.addDataSourceProperty("prepStmtCacheSize", 250); 
    ds.addDataSourceProperty("prepStmtCacheSqlLimit", 2048); 
    ds.addDataSourceProperty("useServerPrepStmts", true);
    return ds;
} 

【问题讨论】:

  • 没有代码,没有您尝试过的链接。请添加足够的信息。
  • 对了,HikariDataSource 不需要配置构造函数。 HikariDataSource 扩展了HikariConfig,所以你可以构造一个HikariDataSource 并直接在其上配置属性。

标签: spring spring-mvc jdbc hikaricp


【解决方案1】:

您可以在此处的 wiki 中查看我们的示例:

https://github.com/brettwooldridge/HikariCP/wiki/Spring-Hibernate-with-Annotations

如本文所述:

http://www.3riverdev.com/blog/tutorial-spring-hibernate-hikaricp/

编辑: 上面提供的代码不正确。您正在尝试将 MySQL DataSource 属性用于 Oracle DataSource。现在您将基于Driver 的配置与基于DataSource 的配置混合在一起。简化它:

司机:

private HikariDataSource dataSource() {
   final HikariDataSource ds = new HikariDataSource();
   ds.setMaximumPoolSize(100);
   ds.setDriverClassName("oracle.jdbc.driver.OracleDriver"); 
   ds.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:XE"); ;
   ds.setUsername("username");
   ds.setPassword("password");
   return ds;
}

数据源:

private HikariDataSource dataSource() {
   final HikariDataSource ds = new HikariDataSource();
   ds.setMaximumPoolSize(100);
   ds.setDataSourceClassName("oracle.jdbc.pool.OracleDataSource");
   ds.addDataSourceProperty("serverName", "yourServer");
   ds.addDataSourceProperty("port", "1521");
   ds.addDataSourceProperty("databaseName", "XE");
   ds.addDataSourceProperty("user", "username");
   ds.addDataSourceProperty("password", "password");
   return ds;
}

另外,100 连接对于 Oracle 来说太大了,除非您每秒运行 20K 事务,10-20 更合理。

【讨论】:

  • 感谢您的建议。但它不起作用。很奇怪,当访问数据库时它甚至没有抛出任何异常。我什至尝试在数据源配置代码部分周围放置 try-catch 块。仍然没有抛出异常。我的驱动程序是“oracle.jdbc.driver.OracleDriver”,网址是“jdbc:oracle:thin:@localhost:1521:XE”。请帮我解决问题
  • 当你说它不起作用时,究竟是什么不起作用?您说“在访问数据库时它甚至没有抛出任何异常”——这听起来就像它正在工作。您可以完全停止使用基于 DataSource 的配置,并使用 config.setDriverClassName("oracle.jdbc.driver.OracleDriver")config.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:XE")。但听起来问题出在您的配置中的其他地方。
  • 但是当我使用 BoneCP 或 C3P0 或 Spring DriverManagerDataSource 时,相同的配置工作正常。每个罐子都在那里。所以奇怪的是它不仅仅与 HikariCP 一起工作。如果出现任何问题,那么它应该至少抛出一些异常。但它甚至没有抛出任何异常。我渴望在这个项目中使用 HikariCP。请帮帮我。
  • 你还没有粘贴任何代码,所以我们真的不知道你的配置尝试是什么样的。你能用一些代码更新你的问题吗?有成千上万的用户在使用 Spring+HikariCP,所以它必须与您的配置方式有关。
  • private HikariDataSource dataSource() { final HikariDataSource ds = new HikariDataSource(); ds.setMaximumPoolSize(100); ds.setDataSourceClassName("oracle.jdbc.driver.OracleDriver"); ds.addDataSourceProperty("url", "jdbc:oracle:thin:@localhost:1521:XE"); ds.addDataSourceProperty("用户", "用户名"); ds.addDataSourceProperty("密码", "密码"); ds.addDataSourceProperty("cachePrepStmts", true); ds.addDataSourceProperty("prepStmtCacheSize", 250); ds.addDataSourceProperty("prepStmtCacheSqlLimit", 2048); ds.addDataSourceProperty("useServerPrepStmts", true);返回 ds; }
【解决方案2】:

以下内容应该适合您的需求:

@Bean
public DataSource dataSource() {
     HikariConfig config = new HikariConfig();
     config.setMaximumPoolSize(100);
     config.setDataSourceClassName("oracle.jdbc.pool.OracleDataSource");
     config.addDataSourceProperty("serverName", "localhost");
     config.addDataSourceProperty("port", "1521");
     config.addDataSourceProperty("databaseName", "XE");
     config.addDataSourceProperty("user", "yourUser");
     config.addDataSourceProperty("password", "yourPassword");

     return new HikariDataSource(config);
}

【讨论】:

  • 我的驱动程序是“oracle.jdbc.driver.OracleDriver”,url 是“jdbc:oracle:thin:@localhost:1521:XE”。你能告诉我如何使用这个设置属性吗价值观???
  • 我需要稍后再回复您
  • 从您的 URL 中不清楚数据库名称是什么
  • 你也可以写DB的SID来代替Databasename
  • 这对我不起作用。 "java.net.UnknownHostException: locahost Wrapped by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure"
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 2014-10-05
  • 1970-01-01
  • 2019-03-21
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多