2016-01-15 2 views
0

Мы переносим C3P0 в HikarCP \ o /, все идет хорошо, за исключением конфигурации свойства, которое мы хотим переопределить, которое является date_string_format.Конфигурация date_string_format SQLite в HikariCP

Вот немного нашей старой конфигурации C3P0:

<bean id="defaultDataSource" destroy-method="close" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
     <property name="driverClass" value="org.sqlite.SQLiteDataSource" /> 
     ... 
     <property name="properties"> 
     <map value-type="java.lang.String" key-type="java.lang.String"> 
      <entry key="date_string_format" value="${datasource.date_string_format:''}" /> 
     </map> 
     </property> 
    </bean> 

И немного нашей конфигурации HikariCP:

<bean id="merlinDataSourceConfig" class="com.zaxxer.hikari.HikariConfig"> 
     <property name="dataSourceClassName" value="org.sqlite.SQLiteDataSource" /> 
     ... 
     <property name="registerMbeans" value="true"/> 
     <property name="dataSourceProperties"> 
     <props> 
      <prop key="date_string_format">${datasource.date_string_format:''}</prop> 
     </props> 
     </property> 
    </bean> 

Мы получили эту ошибку:

Method not found: setDate_string_format 
    java.beans.PropertyDescriptor.<init>(Unknown Source) 
    com.zaxxer.hikari.util.PropertyBeanSetter.setProperty(PropertyBeanSetter.java:125) 
    com.zaxxer.hikari.util.PropertyBeanSetter.setTargetFromProperties(PropertyBeanSetter.java:63) 
    com.zaxxer.hikari.pool.PoolUtilities.initializeDataSource(PoolUtilities.java:111) 
    com.zaxxer.hikari.pool.BaseHikariPool.<init>(BaseHikariPool.java:157) 
    com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:60) 
    com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:48) 
    com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:80) 
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 

Любая идея как решить эту проблему?

Благодаря

ответ

1

Не знаю, как C3P0 работает, но в HikariCP dataSourceProperties собираются сопоставить вызовы методов против класса DataSource. Таким образом, свойство, подобное date_string_format, собирается направить на поиск сеттера на SQLiteDataSource под названием setDate_string_format(). Такого сеттера нет. Попробуйте что-то вдоль этих линий:

<bean id="sqliteConfig" class="org.sqlite.SQLiteConfig"> 
    <constructor-arg> 
    <props> 
     <prop key="date_string_format">${datasource.date_string_format:''}</prop> 
    </props> 
    <constructor-arg> 
</bean> 

<bean id="merlinDataSourceConfig" class="com.zaxxer.hikari.HikariConfig"> 
    <property name="dataSource"> 
    <bean id="sqlLiteDataSource" class="org.sqlite.SQLiteDataSource"> 
     <constructor-arg ref="sqliteConfig" /> 
    </bean> 
    </property> 
    ... 
    <property name="registerMbeans" value="true"/> 
</bean> 

Вы можете, конечно, гнездо/unnest в <bean> декларации была желательна и добавить/удалить refs.

Не стесняйтесь продолжать использовать dataSourceProperties для любого «сеттера», выставленного на SQLiteDataSource (JavaDoc here).

+0

Спасибо за ответ. Не стоит забывать добавить: <свойство name = "url" value = "$ {datasource.url}" /> в конфигурации компонента свойств dataSource :) –

Смежные вопросы