SpringBoot 2中获取OracleDataSource
Obtain an OracleDataSource in SpringBoot 2
是否可以使用 NamedParameterJdbcTemplate 对象从默认的 SpringBoot 2 Hikari 连接池中检索 OracleDataSource?
使用 Java 8、Oracle 11g (ojdbc6-11.2.0.1.jar) 和 gradle
这是我试过的。
@Repository
public class MyClass{
@Autowired
NamedParameterJdbcTemplate jdbcTemplate;
public void myMethod(){
try{
//OracleDataSource ods = new OracleDataSource(); // This works but is obviously not Spring
OracleDataSource ods = (OracleDataSource) jdbcTemplate.getJdbcTemplate().getDataSource(); // This fails
ods.setURL(url);
ods.setUser(user);
ods.setPassword(pass);
...
catch(Exception e){
System.out.println("In Exception");
e.printStackTrace();
}
}
}
Application.properties:
spring.datasource.url=jdbc:oracle:thin:@//${ORA_HOST}:${ORA_PORT}/${ORA_SID}
spring.datasource.username=${USER}
spring.datasource.password=${PASS}
错误信息:
In Exception
java.lang.ClassCastException: com.zaxxer.hikari.HikariDataSource cannot be cast to oracle.jdbc.pool.OracleDataSource
我不认为这是可能的(或必要的)。最简单的方法是 unwrap() 一个连接对象,它已经连接到 dB:
Connection conn = this.jdbcTemplate.getJdbcTemplate().getDataSource().getConnection().unwrap(OracleConnection.class);
只是一个查询,比如,你怎么能得到 OracleConnection.class,因为在我的例子中,我在 OracleConnection.class 下面得到了一条波浪线,并且没有可导入的包。
是否可以使用 NamedParameterJdbcTemplate 对象从默认的 SpringBoot 2 Hikari 连接池中检索 OracleDataSource? 使用 Java 8、Oracle 11g (ojdbc6-11.2.0.1.jar) 和 gradle 这是我试过的。
@Repository
public class MyClass{
@Autowired
NamedParameterJdbcTemplate jdbcTemplate;
public void myMethod(){
try{
//OracleDataSource ods = new OracleDataSource(); // This works but is obviously not Spring
OracleDataSource ods = (OracleDataSource) jdbcTemplate.getJdbcTemplate().getDataSource(); // This fails
ods.setURL(url);
ods.setUser(user);
ods.setPassword(pass);
...
catch(Exception e){
System.out.println("In Exception");
e.printStackTrace();
}
}
}
Application.properties:
spring.datasource.url=jdbc:oracle:thin:@//${ORA_HOST}:${ORA_PORT}/${ORA_SID}
spring.datasource.username=${USER}
spring.datasource.password=${PASS}
错误信息:
In Exception
java.lang.ClassCastException: com.zaxxer.hikari.HikariDataSource cannot be cast to oracle.jdbc.pool.OracleDataSource
我不认为这是可能的(或必要的)。最简单的方法是 unwrap() 一个连接对象,它已经连接到 dB:
Connection conn = this.jdbcTemplate.getJdbcTemplate().getDataSource().getConnection().unwrap(OracleConnection.class);
只是一个查询,比如,你怎么能得到 OracleConnection.class,因为在我的例子中,我在 OracleConnection.class 下面得到了一条波浪线,并且没有可导入的包。