0

I used Hikari and AbstractRoutingDataSource to have two datasources, but there are some issues when context started.

Here are configrations:

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
    <property name="maximumPoolSize" value="${hikari.maximumPoolSize}" />
    <property name="minimumIdle" value="${hikari.minimumIdle}" />
    <property name="maxLifetime" value="${hikari.maxLifetime}" />
    <property name="idleTimeout" value="${hikari.idleTimeout}" />
    <property name="dataSourceProperties">
        <props>
            <prop key="url">jdbc:oracle:thin:@192.168.11.23:1521:ora11g</prop>
            <prop key="user">root</prop>
            <prop key="password">0</prop>
        </props>
    </property>
</bean>

<!-- Hikari master -->
<bean id="master-hikari" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
    <constructor-arg ref="hikariConfig" />
</bean>

<!-- Hikari slave -->
<bean id="slave-hikari" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
    <constructor-arg ref="hikariConfig" />
</bean>

<bean id="dataSource" class="com.lot.common.dataSource.DynamicDataSource">  
    <property name="defaultTargetDataSource" ref="master-hikari"></property>
    <property name="targetDataSources">  
        <map key-type="java.lang.Object">  
            <entry value-ref="master-hikari" key="master"></entry>  
            <entry value-ref="slave-hikari" key="slave"></entry>
        </map>  
    </property>  
</bean>

Here are issues:

Caused by: com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: DataSource router not initialized
    at com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:528)
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:520)
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:112)
    at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:72)
    at com.lot.common.dataSource.HikariDataSource.<init>(HikariDataSource.java:19)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
    ... 66 more
Caused by: java.lang.IllegalArgumentException: DataSource router not initialized
    at org.springframework.util.Assert.notNull(Assert.java:112)
    at org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.determineTargetDataSource(AbstractRoutingDataSource.java:149)
    at org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:133)
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:341)
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:193)
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:428)
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:499)

I have researched the issue last long time and dont know where is the issue, anybody know that, thanks.

Raw
  • 615
  • 1
  • 7
  • 22

0 Answers0