Working on a project with an Informix database and using MyBatis as the persistence layer, I noted that the start-up of the server takes a long time (about 2 minutes). It is not really a problem if the performance of the application are good, as you don’t start your server all the day, but when you are in the implementation phase…
After step-by-step execution, I discovered that MyBatis gathers the metadata of the database to adapt its behavior, but this part was responsible of the delay (maybe Informix specific?).
I decided to replace this step, fortunately, using MyBatis with Spring, it’s not really a big deal 🙂
As the main purpose of this step is to identify the database provider, I defined a class which returns always the same information: Informix database.
- first, you need to define a new DatabaseIdProvider:
public class IfxDatabaseIdProvider implements org.apache.ibatis.mapping.DatabaseIdProvider { private static final Log log = LogFactory.getLog(IfxDatabaseIdProvider.class); private Properties properties; public String getDatabaseId(DataSource dataSource) { return "Informix Dynamic Server"; } public void setProperties(Properties p) { this.properties = p; } public Properties getProperties() { return properties; } }
-
now, you need to tell to MyBatis to use the new class, your Spring config file looks like:
<bean id="ifxDatabaseIdProvider" class="myPackage.IfxDatabaseIdProvider"/> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:mapper/*Mapper.xml"/> <property name="databaseIdProvider" ref="ifxDatabaseIdProvider"/> </bean>
Done!