• SpringMVC hibernate增加多数据源 (SSHE/SYPRO增加多数据源为例)


    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;
    	}
    


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











  • 相关阅读:
    导入maven工程遇见的问题【问题】
    Java 反射机制
    SSH 使用JUnit测试
    Struts2 Convention插件的使用(4)使用@Action注解返回json数据
    Struts2 Convention插件的使用(3)方法前的@Action注解
    Struts2 Convention插件的使用(2)return视图以及jsp的关系
    Struts2 Convention插件的使用(1)
    Struts2 直接返回字符串(可用于json)
    PowerDesigner 将CDM、PDM导出为图片
    Servlet3.0-使用注解定义Servlet
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7231273.html
Copyright © 2020-2023  润新知