Шаблон JDBC не может найти хранимую процедуру в БД - PullRequest
0 голосов
/ 04 января 2019

У меня есть проект, который подключается к базе данных 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   

1 Ответ

0 голосов
/ 06 января 2019

после долгих исследований я понял, что этот раздел maven нарушает все соединения.

<resources>
    <resource>
        <directory>${project.basedir}/target/generated-sources</directory>
    </resource>
</resources>

Я хочу зарегистрировать сгенерированные файлы jasper в пути к классам.

Но в данный момент я не понимаю, почему этот maven-код нарушает всю работу Spring JDBC.

...