前提服务端已经配置好TLS,客户端拥有访问证书、证书密码等基本数据
问题原因:
mybatis-config.xml 配置文件中不支持TLS初始值设定
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="sample_id">
<environment id="sample_id">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<property name="javax.net.ssl.trustStore" value="${trustStore}" />
<property name="javax.net.ssl.trustStoreType" value="${trustStoreType}" />
<property name="javax.net.ssl.trustStorePassword" value="${trustStorePassword}" />
</dataSource>
</environment>
</environments>
</configuration>
运行程序后,会出现如下错误
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### The error may exist in SQL Mapper Configuration
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: javax.net.ssl.trustStorePassword
解决办法:
去除mybatis-config.xml中的environments分支,通过代码自行配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
java代码示例,根据实际情况更改
// Driver
String driver = "oracle.jdbc.driver.OracleDriver";
// jdbc连接url
String url = "jdbc:oracle:thin:@tcps://[ip]:[port]/[sid]?ssl_server_dn_match=off";
// DB 连接参数
Properties props = new Properties();
props.setProperty("user", "DB用户");
props.setProperty("password", "DB密码");
props.setProperty("javax.net.ssl.trustStore", "证书路径");
props.setProperty("javax.net.ssl.trustStoreType","证书类型");
props.setProperty("javax.net.ssl.trustStorePassword", "创建证书的密钥");
// MyBatis PooledDataSource作成
PooledDataSource pooledDataSource = new PooledDataSource(driver, url, props);
// MyBatis Environment作成(参考原来的mybatis-config.xml 里的分支配置)
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("sample_id", transactionFactory, pooledDataSource);
// mybatis-config.xml中的environments部分删除,SqlSessionManager作成
SqlSessionManager sessionManager = SqlSessionManager.newInstance(in);
// Environment的SqlSessionManager配置
Configuration configuration = sessionManager.getConfiguration();
configuration.setEnvironment(environment);
SqlSession sqlSession = sessionManager.openSession(false);
// DB连接生成
Connection conn = sqlSession.getConnection();
System.out.println(conn.isClosed());
conn.close();
运行结果控制台输出false,连接成功;