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类,就可以完成数据库相关的操作了。