У меня есть проект, который подключается к базе данных Oracle, которая содержит некоторые пакеты и хранимые процедуры. Проблема в том, что Spring JDBC возвращает сообщение об ошибке при попытке вызвать хранимую процедуру из веб-службы REST.
org.springframework.jdbc.UncategorizedSQLException:
CallableStatementCallback; неклассифицированное SQLException для SQL
[{вызов PKG_RECLAMO.SP_INSERTAR_RECLAMO ()}];
Состояние SQL [90022]; код ошибки [90022]; Функция "SP_INSERTAR_RECLAMO"
нет энконтрада
Функция "SP_INSERTAR_RECLAMO" не найдена; Оператор SQL:
вызов PKG_RECLAMO.SP_INSERTAR_RECLAMO () [90022-197]; вложенное исключение
org.h2.jdbc.JdbcSQLException: функция "SP_INSERTAR_RECLAMO" без encontrada
Функция "SP_INSERTAR_RECLAMO" не найдена; Оператор SQL:
вызов PKG_RECLAMO.SP_INSERTAR_RECLAMO () [90022-197]
несколько строк ниже ... показывает другое сообщение ...
Вызывается: org.h2.jdbc.JdbcSQLException : Функция "SP_INSERTAR_RECLAMO"
нет энконтрада
Функция "SP_INSERTAR_RECLAMO" не найдена; Оператор SQL:
вызов PKG_RECLAMO.SP_INSERTAR_RECLAMO () [90022-197]
в
org.h2.message.DbException.getJdbcSQLException (DbException.java:357)
Похоже, что шаблон Spring JDBC ищет процедуру в базе данных H2 и не использует соединитель Oracle.
@Repository
public class ClsReclamoDao implements ClsIReclamoDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public Long insertReclamo(ClsReclamoRequestBean objRequest) {
SimpleJdbcCall jdbcCall = new
SimpleJdbcCall(jdbcTemplate).withCatalogName("PKG_RECLAMO")
.withProcedureName("SP_INSERTAR_RECLAMO");
SqlParameterSource parameterSource = new MapSqlParameterSource()
.addValue("p_nuReclamoTipoReclamo",
"123")
.addValue("p_nuAnonimo", "1")
[more parameters...]
Map<String, Object> returnMap = jdbcCall.execute(parameterSource);
...
}
Это мои зависимости POM
<dependency>
<groupId>com.oracle</groupId>
<artifactId>oracleConnector</artifactId>
<version>7.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
Есть способ сообщить Spring, который всегда использует Oracle Connector вместо H2 DB?
Обновление
Когда я пытаюсь поместить SCOPE = TEST в зависимость от H2, вот так ...
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
При запуске приложения происходит сбой, и отображается это сообщение об ошибке.
APPLICATION FAILED TO START
***************************
Description:
Failed to configure a DataSource: 'url' attribute is not specified and
no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
Action:
Consider the following:
If you want an embedded database (H2, HSQL or Derby),
please put it on the classpath.
If you have database settings to be loaded from a
particular profile you may need to activate it
(no profiles are currently active).
Обновление
это файл свойств моего приложения
spring.jmx.default-domain:appOracleService
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl
spring.datasource.username=userdb
spring.datasource.password=passdb
spring.datasource.driver-class-oracle.jdbc.driver.OracleDriver
## LOGGING
logging.config=classpath:logback.xml
logging.exception-conversion-word=%wEx
logging.file.max-history=0
logging.file.max-size=10MB
logging.level.org.springframework.web=INFO