在xml映射器配置中,使用mybatis中的HikariConfig配置HikariCp dataSource



我正在尝试使用XML配置在MyBatis中配置HikariCp

我想知道如何在映射器配置中的对象中设置hikariCongig对象。

我的配置如下:

<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="com.xyz.config.HikariCPDataSourceFactory" >
<property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/beta-prod-db" />
<property name="username" value="postgres" />
<property name="password" value="${password}" />
<property name="poolName" value="test"/>
<property name="maxPoolSize" value="20" />
<property name="registerMbeans" value="true"/>
<property name="minimumIdle" value="5"/>
</dataSource>
</environment>

HikariCData SourceFactory.java

public class HikariCPDataSourceFactory extends PooledDataSourceFactory {
public HikariCPDataSourceFactory() {
// HikariConfig hikariConfig = new HikariConfig();
this.dataSource = new HikariDataSource();
}
}

我没有找到任何在线文章显示如何通过XML配置在hikariDataSource对象中设置hikariConfig对象。

使用Spring,我可以为hikariConfig创建一个bean,并将其作为参数传递到hikariDataSource对象中,但这里我不使用Spring,因此需要找到一种使用XML的方法。

如果没有hikariConfig对象,如果我试图从dataSource获取HikariPoolMXBean对象,我会得到异常org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.

HikariCP 1.4.0 MBean实例NotFoundException

这篇文章说,只有当我设置hikariConfig对象时,它才有效

您需要实现DataSourceFactory,并将您在MyBatis XML配置文件中指定的属性传递给新的数据源:

public class HikariCPDataSourceFactory implements DataSourceFactory {
private HikariDataSource dataSource;
@Override
public void setProperties(Properties props) {
HikariConfig config = new HikariConfig(props);
this.dataSource = new HikariDataSource(config);
}
@Override
public DataSource getDataSource() {
return dataSource;
}
}

我找不到在xml中配置hikariConfig的方法这是我使用的变通方法,对我来说效果很好。

HikariDataSource hikariDataSource = null;
HikariConfig hikariConfig = new HikariConfig();
dataSource.copyStateTo(hikariConfig);
hikariDataSource = new HikariDataSource(hikariConfig);

获得dataSource对象后,我将状态复制到hikariConfig对象,并使用它创建新的dataSource对象。此外,我们还可以将其设为singleton,以便只创建一个实例。

最新更新