下面列出了怎么用org.springframework.boot.jdbc.DatabaseDriver的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* 获取当前使用数据库类型
*/
private static String getDatabaseName(DataSource dataSource) {
try {
String productName = JdbcUtils.
commonDatabaseName(JdbcUtils.extractDatabaseMetaData(
dataSource, "getDatabaseProductName"
).toString());
DatabaseDriver databaseDriver = DatabaseDriver.fromProductName(productName);
if (databaseDriver == DatabaseDriver.UNKNOWN) {
throw new IllegalStateException("Unable to detect database type");
}
return databaseDriver.getId();
} catch (MetaDataAccessException ex) {
throw new IllegalStateException("Unable to detect database type", ex);
}
}
@Override
public void customize(FluentConfiguration configuration) {
// boot's flyway auto-config doesn't allow to define callbacks per
// vendor id, so essentially customizing those here.
DataSource dataSource = configuration.getDataSource();
DatabaseDriver databaseDriver = getDatabaseDriver(dataSource);
logger.info("Customizing flyway config, detected DatabaseDriver as {}.", databaseDriver);
if (databaseDriver == DatabaseDriver.POSTGRESQL) {
configuration.callbacks(new PostgresBeforeBaseline());
}
else if (databaseDriver == DatabaseDriver.MYSQL || databaseDriver == DatabaseDriver.MARIADB) {
configuration.callbacks(new MysqlBeforeBaseline());
}
else if (databaseDriver == DatabaseDriver.SQLSERVER) {
configuration.callbacks(new MsSqlBeforeBaseline());
}
else if (databaseDriver == DatabaseDriver.ORACLE) {
configuration.callbacks(new OracleBeforeBaseline());
}
else if (databaseDriver == DatabaseDriver.DB2) {
configuration.callbacks(new Db2BeforeBaseline());
}
}
@Override
public void customize(FluentConfiguration configuration) {
// boot's flyway auto-config doesn't allow to define callbacks per
// vendor id, so essentially customizing those here.
DataSource dataSource = configuration.getDataSource();
DatabaseDriver databaseDriver = getDatabaseDriver(dataSource);
if (databaseDriver == DatabaseDriver.POSTGRESQL) {
configuration.callbacks(new PostgresBeforeBaseline());
}
else if (databaseDriver == DatabaseDriver.MYSQL || databaseDriver == DatabaseDriver.MARIADB) {
configuration.callbacks(new MysqlBeforeBaseline());
}
else if (databaseDriver == DatabaseDriver.SQLSERVER) {
configuration.callbacks(new MsSqlBeforeBaseline());
}
else if (databaseDriver == DatabaseDriver.ORACLE) {
configuration.callbacks(new OracleBeforeBaseline());
}
else if (databaseDriver == DatabaseDriver.DB2) {
configuration.callbacks(new Db2BeforeBaseline());
}
}
private DatabaseDriver getDatabaseDriver(DataSource dataSource) {
// copied from boot's flyway auto-config to get matching db vendor id
try {
String url = JdbcUtils.extractDatabaseMetaData(dataSource, "getURL");
return DatabaseDriver.fromJdbcUrl(url);
}
catch (MetaDataAccessException ex) {
throw new IllegalStateException(ex);
}
}
public String dataSourceClassName() {
String className = this.properties.get("dataSourceClassName");
if (!StringUtils.hasLength(className)) {
String url = this.properties.get("url");
className = DatabaseDriver.fromJdbcUrl(url).getXaDataSourceClassName();
}
return className;
}
private DatabaseDriver getDatabaseDriver(DataSource dataSource) {
// copied from boot's flyway auto-config to get matching db vendor id
try {
String url = JdbcUtils.extractDatabaseMetaData(dataSource, "getURL");
return DatabaseDriver.fromJdbcUrl(url);
}
catch (MetaDataAccessException ex) {
throw new IllegalStateException(ex);
}
}
private String driverClassName() {
if (StringUtils.hasText(driverClassName)) {
return driverClassName;
}
return DatabaseDriver.fromJdbcUrl(url).getDriverClassName();
}
private String validationQuery() {
if (StringUtils.hasText(validationQuery)) {
return validationQuery;
}
return DatabaseDriver.fromJdbcUrl(url).getValidationQuery();
}