springboot mybatis-plus 获取数据库名称
时间: 2023-09-17 10:08:50 浏览: 274
在 Spring Boot 中使用 Mybatis-Plus 获取数据库名称,可以先通过 `DataSource` 获取 `Connection` 对象,然后再从 `Connection` 对象中获取数据库名称。具体的代码如下:
```java
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Configuration
public class MybatisPlusConfig {
@Autowired
private DataSource dataSource;
/**
* 配置 MybatisSqlSessionFactoryBean
*/
@Bean
public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean() throws Exception {
MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
// 获取数据库名称
String dbName = getDatabaseName(dataSource);
// 配置 Mybatis-Plus 的 GlobalConfig 和 Mybatis 配置文件
// ...
return sessionFactory;
}
/**
* 获取数据库名称
*/
private String getDatabaseName(DataSource dataSource) throws SQLException {
Connection connection = dataSource.getConnection();
String url = connection.getMetaData().getURL();
connection.close();
Pattern pattern = Pattern.compile("jdbc:mysql://[^/]+/([^?]+)");
Matcher matcher = pattern.matcher(url);
if (matcher.find()) {
return matcher.group(1);
} else {
throw new RuntimeException("Cannot get database name from JDBC URL");
}
}
}
```
在上述代码中,我们通过 `dataSource.getConnection()` 获取了一个 `Connection` 对象,然后从中获取了 JDBC URL。接着,使用正则表达式从 JDBC URL 中提取出数据库名称,并返回。注意,在获取完 JDBC URL 后,需要立即关闭 `Connection` 对象,以释放资源。在实际使用中,需要根据不同的数据库类型,使用不同的正则表达式来提取数据库名称。
阅读全文