SpringMVC hibernate增加多数据源

(以类SSHE/SYPRO增加多数据源为例作说明)

注:适用与SpringMVC + Hibernate的项目。其它框架的仅仅能说作參考用

配置Spring

新建一个Spring的数据源配置文件,如spring-hibernate-aite.xml

怎么新建文件就不说了

新建的Spring的数据源配置文件的内容:

内容能够先将原有的spring-hibernate.xml全然copy过来,然后做对应改动

A.dataSource的对应改动

<!-- 
配置数据源
①bean的name属性,原来是dataSource 如今改成DataSourceAite 
-->
<bean name="dataSourceAite" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url_aite}" />
<property name="username" value="${jdbc_username_aite}" />
<property name="password" value="${jdbc_password_aite}" /> <!-- 初始化连接大小 -->
<property name="initialSize" value="0" />
<!-- 连接池最大使用连接数量 -->
<property name="maxActive" value="20" />
<!-- 连接池最大空暇 -->
<property name="maxIdle" value="20" />
<!-- 连接池最小空暇 -->
<property name="minIdle" value="0" />
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="60000" /> <property name="validationQuery" value="${validationQuery}" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="testWhileIdle" value="true" /> <!-- 配置间隔多久才进行一次检測,检測须要关闭的空暇连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间。单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="25200000" /> <!-- 打开removeAbandoned功能 -->
<property name="removeAbandoned" value="true" />
<!-- 1800秒,也就是30分钟 -->
<property name="removeAbandonedTimeout" value="1800" />
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="true" /> <!-- 监控数据库 -->
<!-- <property name="filters" value="stat" /> -->
<property name="filters" value="mergeStat" />
</bean>

B.sessionFactory的对应改动

<!--
配置hibernate session工厂。
①bean的id属性,原来的id是sessionFactory 如今改成sessionFactoryAite;
②dataSource的ref,原来是dataSource 如今改成上边配好新 数据源名字dataSourceAite
-->
<bean id="sessionFactoryAite" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSourceAite" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">none</prop>
<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>
</props>
</property> <!-- 自己主动扫描注解方式配置的hibernate类文件 -->
<property name="packagesToScan">
<list>
<value>sy.*.model</value>
</list>
</property>
</bean>

C.事物管理器的对应更改

<!-- 
<span style="white-space:pre"> </span>配置事务管理器 
<span style="white-space:pre"> </span>①bean的name属性,原来是transactionManager 如今改成transactionManagerAite
<span style="white-space:pre"> </span>②sessionFactory的ref,原来是sessionFactory 如今改成上边配好的新名字sessionFactoryAite
<span style="white-space:pre"> </span>-->
<span style="white-space:pre"> </span><bean name="transactionManagerAite" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<span style="white-space:pre"> </span><property name="sessionFactory" ref="sessionFactoryAite"></property>
<span style="white-space:pre"> </span></bean>

D.事物拦截规则的对应更改

<!--
拦截器方式配置事物
①用上边新创建的事物管理器来管理事物规则,原来id是transactionAdvice 如今改成transactionAdviceAite
②改动id。原来id是 transactionAdvice 如今改成 transactionAdviceAite
-->
<tx:advice id="transactionAdviceAite" transaction-manager="transactionManagerAite">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="append*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="edit*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="repair" propagation="REQUIRED" />
<tx:method name="delAndRepair" propagation="REQUIRED" /> <tx:method name="get*" propagation="REQUIRED" read-only="true" />
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="load*" propagation="REQUIRED" read-only="true" />
<tx:method name="search*" propagation="REQUIRED" read-only="true" />
<tx:method name="datagrid*" propagation="REQUIRED" read-only="true" /> <tx:method name="*" propagation="REQUIRED" read-only="true" />
</tx:attributes>
</tx:advice>

E.Spring切面配置的对应更改

<!--
将新的规则增加Spring的aop
①改动advice-ref,原来是transactionAdvice 先改成上边新名字transactionAdviceAite
-->
<aop:config>
<aop:pointcut id="transactionPointcut" expression="execution(* sy.*.service..*Impl.*(..))" />
<aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdviceAite" />
</aop:config>

保存文件

到这儿,Spring要做的配置基本完事儿了

改动web.xml

要使新建的数据源配置文件spring-hibernate-aite.xml生效,须要在web.xml里边将增加classpath中

<context-param>
<param-name>contextConfigLocation</param-name>
<!-- 增加classpath:spring-hibernate-aite.xml -->
<param-value>classpath:spring.xml,classpath:spring-hibernate.xml,classpath:spring-hibernate-aite.xml</param-value>
</context-param>

保存文件

这个时候。能够启动执行一下项目,看看是否报错,在做下一步操作

新建dao使用新增的一个数据源

有几个dao就有几个数据源

新建daoI

这里能够直接将原来的sy.dao.BaseDaoI.java复制一个到同一包文件夹下,重命名为sy.dao.AiteBaseDaoI.java

新建daoImpl

这里能够直接将原来的sy.dao.impl.BaseDaoImpl.java复制一个到同一包文件夹下。重命名为sy.dao.AiteBaseDaoImpl.java

然后做一些小调整:

/**Repository原来是baseDao 这里改动成aiteBaseDao**/
@Repository("aiteBaseDao")
public class AiteBaseDaoImpl<T> implements AiteBaseDaoI<T> {
private static final Logger logger=Logger.getLogger(AiteBaseDaoImpl.class); /**sessionFactory名字原来是sessionFactory 如今改动成sessionFactoryAite**/
private SessionFactory sessionFactoryAite; public SessionFactory getSessionFactoryAite() {
return sessionFactoryAite;
} @Autowired
public void setAiteSessionFactory(SessionFactory sessionFactoryAite) {
this.sessionFactoryAite = sessionFactoryAite;
} private Session getCurrentSession() {
return this.sessionFactoryAite.getCurrentSession();
}

其它地方都不用改动

dao层写好了之后。能够启动执行下项目,看看有没有异常,没有异常则继续下一步操作

service层的调用

@Service("taskService")
public class TaskServiceImpl implements TaskServiceI { /** 这里用新数据源的Dao就好了。其它的都和原来一致 **/
private AiteBaseDaoI<Ttask> tdao; public AiteBaseDaoI<Ttask> getTdao() {
return tdao;
} @Autowired
public void setTdao(AiteBaseDaoI<Ttask> tdao) {
this.tdao = tdao;
}

到这里,从配置到使用都完毕了,接下来就来完毕你的应用吧

最新文章

  1. IE6+未知尺寸元素水平垂直居中
  2. java并发编程(2)--volatile(转)
  3. canvas画布在主流浏览器中的尺寸限制
  4. NET WebApi OWIN 实现 OAuth 2.0
  5. C++ 中的virtual关键词
  6. jQuery ui datepicker 日历转中文
  7. Java基础知识强化之集合框架笔记28:ArrayList集合练习之去除ArrayList集合中的重复字符串元素(升级)
  8. UI 设计模式 手势识别器
  9. Android 开发笔记___Intent的使用
  10. nodejs轻量级时间格式化组件Moment.js的使用例子
  11. 算法题丨Move Zeroes
  12. Android开发:在Eclipse中配置Android环境
  13. 《Go并发编程实战》读书笔记-初识Go语言
  14. BZOJ3626 LNOI2014LCA(树链剖分+主席树)
  15. php ldap
  16. Json序列化循环引用的问题
  17. docker 删除无用的镜像文件的命令小计
  18. day22 模块-collections,time,random,pickle,shelve等
  19. 在动作类上加上SkipValidation 在反射时候会获取到该反射信息 就不会执行validate方法
  20. 处理 CALayer 变形后的抗锯齿问题

热门文章

  1. 【HDOJ5536】Chip Factory(Trie树)
  2. .NET and php
  3. DataReader和Dataset的性能比较 以及什么时候用dataset什么时候用DataReader
  4. Console.Write格式化输出
  5. C#执行CMD命令并接收返回结果的实现方法
  6. 四、Ubuntu 一些常用命令
  7. Codeforces Gym100971 F.Two Points (IX Samara Regional Intercollegiate Programming Contest Russia, Samara, March 13)
  8. Codeforces Round #315 (Div. 2)【贪心/重排去掉大于n的元素和替换重复的元素】
  9. Akka 和 &mu;JavaActors入门
  10. eclipse启动Tomcat时报错:严重: Exception loading sessions from persistent storage