Spring Boot项目同时使用druid和另一种连接池来连接Click House

springboot项目用druid连接MySQL,使用JDBC连clickhouse。一段时候后clickhouse的JDBC响应很慢,想着是网络问题,加上一直使用JDBC连,每次JDBC都要新建tcp连接消耗网络资源,太low,决定加上连接池。(clickhouse的jdbc用jar包是 clickhouse-native-jdbc,想用9000端口,tcp连接)

如果复用druid的连接池,一个问题是多数据源配置druid要加代码,spring的AbstractRoutingDataSource那一套,另一个问题是druid那套公司前辈已经封装好jar包,还得找他要项目,重新开发,打包成jar包、所以决定换另一个连接池hikari。遇到了点问题,

正常应该大概这么写

@Configuration

public class ClickhouseDataSourceFactory{

     @Value("${clickhouse.datasource.url:}")
    private String url;

    @Value("${clickhouse.datasource.user:}")
    private String user;

        xxxxxxx一堆配置

        @Bean

        public DataSource clickhouseDataSource{

                HikariConfig hikariConfig = new HikariConfig();

                hikariConfig.setUsername(user);

                hikariConfig.setJdbcUrl(url);//一堆配置

                return new HikariDataSource(hikariConfig);

        }

}

public class TestServiceImpl implements TestService{

        @Autowired

        DataSource clickhouseDataSource;

        Connection c = clickhouseDataSource.getConnection();

        PreparedStatement ps = c.prepareStatement(sql); 

        ResultSet result = ps.executeQuery();

}

结果呢,直接导致我们druid下的mysql也连到这个clickhouse的datasource了,然后报错了,找不到表之类的。原因没有深究,应该要么是重名啥的,要么是bean加载的时候问题,要么就还得用AbstractRoutingDataSource来搞。本想解决响应慢的问题,来不及看了。

没办法换一个方法,先搞定连接池,解决响应慢的问题再说,

@Component
public class ClickHouseDataSourceFactory {
        
@Value("${clickhouse.datasource.db}")
private String database;

@Value("${clickhouse.datasource.user}")
private String user;
  xxxxxxx还是那堆配置

@PostConstruct
private DataSource ds;

public void init() throws Exception {
HikariConfig config = new HikariConfig();
config.setUsername(user);
ds = new HikariDataSource(config);
}
public DataSource getDataSource(){
    return ds;
}
}

搞的像全局变量一样。然后项目启动时,druid会先加载,然后hikari的pool还是创建。之前的问题就没有了,druid和hikari都正常运行。

不过响应慢的问题用了连接池后没有太大改善,下篇再说。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值