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.