spring 是一个很强大的框架,可以完成很多的任务,这公司这次项目中,我使用到了spring的数据源配置,定时调度任务,事务处理等
我会在使用相关的文章来阐述这些使用了,也相当于总结一下!
这篇文章我将讲解spring管理hibernate多数据源的配置。
我们先来看看spring的applicationContext.xml配置文件
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:datasource.properties</value>
</list>
</property>
</bean>
<!-- 中间表的数据源-->
<bean id="dataSourceMysql" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="initialSize" value="${pool.initialSize}" />
<property name="maxActive" value="${pool.maxActive}" />
<property name="maxIdle" value="${pool.maxIdle}" />
<property name="maxWait" value="${pool.maxWait}" />
<property name="poolPreparedStatements" value="${pool.poolPreparedStatements}" />
<property name="defaultAutoCommit" value="${pool.defaultAutoCommit}" />
</bean>
<bean id="sessionFactoryMysql" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSourceMysql"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialectMysql}
</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>
<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.ehcache_config_file}</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/mytest/bean/Incident.hbm.xml</value>
</list>
</property>
</bean>
<!-- itsm -->
<bean id="dataSourceItsm" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${itsm.driverClassName}"/>
<property name="url" value="${itsm.url}"/>
<property name="username" value="${itsm.username}"/>
<property name="password" value="${itsm.password}"/>
<property name="initialSize" value="${pool.initialSize}" />
<property name="maxActive" value="${pool.maxActive}" />
<property name="maxIdle" value="${pool.maxIdle}" />
<property name="maxWait" value="${pool.maxWait}" />
<property name="poolPreparedStatements" value="${pool.poolPreparedStatements}" />
<property name="defaultAutoCommit" value="${pool.defaultAutoCommit}" />
</bean>
<bean id="sessionFactoryItsm" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSourceItsm"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialect}
</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>
<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.ehcache_config_file}</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/mytest/bean/Incident.hbm.xml</value>
</list>
</property>
</bean>
上面使用了PropertyPlaceHolderConfigurer ,这个类可以使spring的配置文件的数据来动态获取,如:<property name="driverClassName" value="${jdbc.driverClassName}"/>其中jdbc.driverClassName的值从哪来的呢?
它定义在 datasource.properties中各文件中,它的内容为:
## JDBC Mysql properties
jdbc.datasourceName=itsm
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/itsm
jdbc.username=root
jdbc.password=fansichi
## ITSM JDBC properties
itsm.datasourceName=ITSM
itsm.driverClassName=com.microsoft.jdbc.sqlserver.SQLServerDriver
itsm.url=jdbc:microsoft:sqlserver://192.168.0.91:1433;DatabaseName=Test
itsm.username=sa
itsm.password=sa
#pool properties
pool.initialSize=5
pool.maxActive=100
pool.maxIdle=30
pool.maxWait=1000
pool.poolPreparedStatements=true
pool.defaultAutoCommit=false
## Hibernate properties
hibernate.dialectMysql=org.hibernate.dialect.MySQLDialect
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.use_sql_comments=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.use_query_cache=true;
hibernate.ehcache_config_file=/ehcache/ehcache-hibernate-local.xml
上面其他的的属性的值 也是通过这种方式获取的
上面配置了两个datasource:datasourceMysql和datasourceItsm 她们对应的sessionFactory 分别是:sessionFactoryMysql 和sessionFactoryItsm,记住一点这spring中是不应许bean的id值相同的,所以我们起了两个不同的名字来命名这两个sessionFactory.
有了sessionFactory我们就可以注入到继承了HibernateTemplate类的dao类,就可以完成数据库相关的操作了。