首页 > 解决方案 > 为什么我在使用 HikariCP 运行此代码时得到一个空数据源?

问题描述

我正在运行此代码来设置我的配置并获取 DataSource 以访问数据库,但是当我调用 ds.getDataSource() 时,我得到一个空值。我在那里想念什么?

    private static HikariConfig config = new HikariConfig();
    private static HikariDataSource ds;

    static {
        config.setJdbcUrl("jdbc:mysql://localhost:5656/...");
        config.setUsername("");
        config.setPassword("");
        config.addDataSourceProperty("cachePrepStmts", "true");
        config.addDataSourceProperty("prepStmtCacheSize", "250");
        config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
        config.setMaximumPoolSize(10);
        config.setConnectionTimeout(30000);
        config.setIdleTimeout(600000);
        config.setMaxLifetime(1800000);
        ds = new HikariDataSource(config);
    }

    public static DataSource getDataSource() {
        return ds.getDataSource();
    }

标签: spring-bootdatasourcehikaricp

解决方案


好的,所以我不熟悉 SpringBoot 的这方面,对于任何有同样问题的人来说,这是我所做的@Autowired工作:

我需要DataSource在我QuickSearchService定义为 a 的类中使用@Service. 在该服务中,我可以使用以下命令调用 HikariCP DataSource @Autowired

@Service
public class QuickSearchService{

@Autowired
private DataSource ds;

...
    
}

然后,当我需要使用该服务时@Autowired,它也会随叫随到:

public class UsingService {

@Autowired
private QuickSearchService qss;

...

}

最后我不得不@ComponentScan在应用程序主类上使用来告诉服务器找到需要自动装配的组件:

@ComponentScan(basePackages = {"example.services", ...})
public class DemoApplication {

public static void main(String[] args){
...
}

}

然后我可以在 application.properties 中配置 DataSource。


推荐阅读