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都正常运行。
不过响应慢的问题用了连接池后没有太大改善,下篇再说。
3421

被折叠的 条评论
为什么被折叠?



