Spring Boot JdbcTemplate Невозможно определить правильную подпись вызова - несколько процедур / функций / подписей - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть приложение Spring Boot, которое использует JdbcTemplate для вызова хранимой процедуры с именем up_RefData_getParticipantBitCrossINTERN

Когда приложение вызывает хранимую процедуру, выдается следующее исключение:

org.springframework.dao.InvalidDataAccessApiUsageException: невозможно определить правильную подпись вызова - несколько процедур / функций / подписей для 'up_RefData_getParticipantBitCrossINTERN' : найдено [ aquadev2. null.up_RefData_getParticipantBitCrossINTERN, aquaprod .null.up_RefData_getParticipantBitCrossINTERN]

Моя база данных - MySql 5.xx и содержит два каталога (aquadev2 и aquapd) *1017* (aquadev2 и aquapd) та же самая хранимая процедура.

JdbcTemplate даже не должен знать о каталоге aquaprod, так как я специально указал, к какому каталогу подключаться в приложении. 1031 * код:

SimpleJdbcCall getBitCrossInternal = new SimpleJdbcCall(jdbcTemplate)
        .withProcedureName(STORED_PROC_INTERN).withCatalogName("aquadev2");

Работает нормально, но это недопустимо для жесткого кодирования имени каталога.

Почему JdbcTemplate не распознает имя каталога в URL источника данных?

1 Ответ

0 голосов
/ 05 мая 2020

Я так и не получил ответ о том, почему я должен указывать «каталог», но мне удалось избежать жесткого кодирования и не допустить необходимости указывать каталог в application.properties.

в application.properties:

refdataserver.datasource.catalog=${DB}

Создайте класс с именем Datasource в пакете com.XXX.refdataserver Убедитесь, что у вас есть получатель и установщик для каталога и аннотации @ConfigurationProperties.

@Configuration
@ConfigurationProperties(prefix = "refdataserver.datasource")
@Validated
@Getter
@Setter
@ToString
public class Datasource {
   /**
    * Must specify the database in applicaton.properties
    */
   @NotNull(message = "refdataserver.datasource.catalog is mandatory")
   private String catalog;
}

Создание конфигурации владельца свойств с помощью экземпляр источника данных

@Component("serverProps")
@Configuration
@ConfigurationProperties(prefix = "refdataserver")
@Validated
@Getter
@Setter
@ToString
public class RefDataServerProperties {
   /** refdataserver.datasource properties */
   private Datasource dataSource;
}

Затем в любом классе с помощью autowire вы можете получить каталог через конфигурацию свойств.

@Autowired
private RefDataServerProperties serverProps;
...
serverProps.getDataSource().getCatalog()
...