flowable集成到spring boot之后,默认会使用给定的数据库名(mysql系列)或模式名(Oracle、PostgreSQL、达梦等)来创建相关的表结构,虽然flowable提供了可配置参数flowable.database-schema来使用其他模式。druid不支持修改schema的值。
Druid的1.2.4版本中虽然可以修改schema,但仅限于mysql,其他类型的数据库依然不支持修改。工作中需要支持PostgreSQL和达梦,只能通过修改druid的源码来实现。
方法一:
参考Apache的数据库连接池,将类DruidPooledConnection的setSchema方法修改如下
public void setSchema(String schema) throws SQLException {
try{
conn.setSchema(schema);
if (holder.statementPool != null) {
holder.clearStatementCache();
}
} catch (SQLException sqlException) {
throw new SQLFeatureNotSupportedException();
}
}
方法二:
参照Druid的方式,将类DruidPooledConnection的setSchema的方法修改如下:
public void setSchema(String schema) throws SQLException {
String dbType = holder.dataSource.getDbType();
boolean hasSchema = JdbcUtils.isMysqlDbType(dbType)
|| JdbcUtils.isPgsqlDbType(dbType)
|| JdbcUtils.isOracleDbType(dbType)
|| JdbcUtils.isSqlserverDbType(dbType)
|| JdbcUtils.isDmDbType(dbType);
if (hasSchema) {
conn.setSchema(schema);
if (holder.statementPool != null) {
holder.clearStatementCache();
}
} else {
throw new SQLFeatureNotSupportedException();
}
}
在JdbcUtils工具类中添加isDmDbType方法
public static boolean isDmDbType(String dbTypeName) {
return isDmDbType(DbType.of(dbTypeName));
}
public static boolean isDmDbType(DbType dbType) {
if(null == dbType) {
return false;
}
return dbType == DbType.dm;
}