[英]Creating thread safe MyBatis sessions from a java.sql.Connection
我正在尝试将 MyBatis 与 Snowflake 数据库一起使用。 我的情况和这张海报类似:
Essentially, I can get a java.sql.Connection Object, but I cannot get that by way of a DataSource, or other steps normally done by RDBMS databases like Oracle. 一种建议的解决方案是执行以下操作:
SqlSession snowflakeSession = snowflakeSqlSessionFactory.openSession(getSnowflakeConnection());
这些将在多线程环境中。 如果有人关闭了 snowflakeSession object,那是否会关闭底层 java.sql.Connection ZA8CFDE63311BD59EB2AC96B8F 我计划重复使用这些会话,但只在一个线程内。 这是必要的吗?
对于 Oracle,我可以这样做:
OracleDataSource result = new OracleDataSource();
Class.forName("oracle.jdbc.driver.OracleDriver");
String connectionString = jdbcUrl;
String username = jdbcUserName;
String password = jdbcPassword;
OracleDataSource oracleDataSource = (OracleDataSource)result;
oracleDataSource.setURL(connectionString);
oracleDataSource.setPassword(password);
oracleDataSource.setUser(username);
String timeoutKey = "oracle.jdbc.ReadTimeout";
Properties connectionProperties;
try {
connectionProperties = oracleDataSource.getConnectionProperties();
if(connectionProperties==null) {
connectionProperties = new Properties();
}
connectionProperties.put(timeoutKey, 60 /* minutes */ * 60 /* seconds per minutes */ * 1000 /* ms per seconds */);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
如果我可以创建一个 SnowflakeDataSource object,我可以像创建 Oracle 一样轻松地创建连接。 我必须小心如何创建连接,因为这也是 MyBatis 扫描 XML 映射器文件的同一点,或者重新使用它已经从以前的连接请求中找到的内容。
它似乎没有记录,但雪花的 JDBC 驱动程序 package 确实提供了一个基本的数据源 class可以获取全新的连接对象,当 Data:Source DataSource::getConnection()
import net.snowflake.client.jdbc.SnowflakeBasicDataSource;
SnowflakeBasicDataSource ds = new SnowflakeBasicDataSource();
ds.setUrl("jdbc:snowflake://account.region.snowflakecomputing.com/");
ds.setUser("user");
ds.setPassword("password");
ds.setWarehouse("wh");
ds.setDatabaseName("db");
ds.setSchema("schema");
ds.setRole("role");
// Other arbitrary connection or session properties can be passed
// via URL params in the ds.setUrl(...) call above
// Use ds.setOauthToken(...)
// or ds.setAuthenticator(...)
// or ds.setPrivateKey(...)
// or ds.setPrivateKeyFile(...)
// for alternative modes of authentication
Connection conn = ds.getConnection();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.