Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Как установить значение параметра reWriteBatchedInserts?  [new]
Михаил Конопко
Member

Откуда: Москва
Сообщений: 19
Параметр PostgreSQL jdbc reWriteBatchedInserts можно установить используя url. Например,
автор
spring.datasource.jdbc-url=jdbc:postgresql://[host]:5432/[имя БД]?reWriteBatchedInserts=true
.
Вопрос - можно ли его установить каким-либо другим образом - в файле свойств или в java коде или еще как-то?
24 май 21, 09:41    [22326050]     Ответить | Цитировать Сообщить модератору
 Re: Как установить значение параметра reWriteBatchedInserts?  [new]
Михаил Конопко
Member

Откуда: Москва
Сообщений: 19
Поставлю вопрос немного по-другому. Как в SpringBoot дотянуться от HikariDataSource к объекту PGSimpleDataSource. А у объекта PGSimpleDataSource уже есть возможность выполнить
автор
( (PGSimpleDataSource) dataSource()).setReWriteBatchedInserts(true);
24 май 21, 15:49    [22326303]     Ответить | Цитировать Сообщить модератору
 Re: Как установить значение параметра reWriteBatchedInserts?  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9654
Задача не очень понятна, т.к. нормальные люди jdbc-url и так в файле свойств указывают.

И вообщеm кажется, что это вопрос по Java, а не по PG. Если нужно получить доступ к родным классам PG JDBC драйвера, то можно посмотреть какой именно класс Connection (ProxyConnection) у Вас возврашается из пула. Попытаться найти его исходные коды и взять из него родной PG Connection.

Если это https://github.com/brettwooldridge/HikariCP/blob/dev/src/main/java/com/zaxxer/hikari/pool/ProxyConnection.java
то поле delegate protected и получить доступ вполне можно

Конкретно c reWriteBatchedInserts не сталкивался. Дальше копаться в PG сорцах лениво.

Сообщение было отредактировано: 24 май 21, 16:50
24 май 21, 16:59    [22326366]     Ответить | Цитировать Сообщить модератору
 Re: Как установить значение параметра reWriteBatchedInserts?  [new]
Михаил Конопко
Member

Откуда: Москва
Сообщений: 19
В данном случае, jdbc-url задается в application.properties SpringBoot. Не хочется его обременять ?reWriteBatchedInserts=true . Хочется где-нибудь в собственном фреймворке определить это свойство и чтобы те кто будут пользоваться этим фреймворком не думали об этом.
А зачем мне PG Connection, как мне дотянуться от него до PGSimpleDataSource?
reWriteBatchedInserts это один из параметров, перечисленных в org.postgresql.PGProperty, заначения, которых можно устанавливать в jdbc-url и еще как-то. Конкретно reWriteBatchedInserts=true приводит к тому что batch пакет одинаковых insert ... into values (...) объединяются в один insert ... into values(...), values(...) ..., values(...) перед посылкой на сервер БД.
24 май 21, 18:16    [22326419]     Ответить | Цитировать Сообщить модератору
 Re: Как установить значение параметра reWriteBatchedInserts?  [new]
Михаил Конопко
Member

Откуда: Москва
Сообщений: 19
Проблема решена. В классе конфигурации DataSource SpringBoot, в бине определения DataSоurce надо добавить установку параметра примерно следующим образом
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource getDataSource() {
        DataSourceBuilder<?> dataSourceBuilder = DataSourceBuilder.create();
        DataSource dataSource = dataSourceBuilder.build();
        	
        if(dataSource instanceof HikariDataSource) {
	if ("org.postgresql.Driver".equals(driverClassName)) {
        		logger.trace("set search_path to'{}'", schemaName);
        		((HikariDataSource) dataSource).setConnectionInitSql("set search_path to '" + schemaName  +"'");
        		Properties dsProperties = new Properties();
        		dsProperties.setProperty( "reWriteBatchedInserts", "true");
        		((HikariDataSource) dataSource).setDataSourceProperties(dsProperties);
	}
	}
        return dataSource;
   }
25 май 21, 18:22    [22326996]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить