Spring多数据源切换

详见 http://www.iteye.com/topic/1125897

 

Applicationcontext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
           http://www.springframework.org/schema/context   
           http://www.springframework.org/schema/context/spring-context-3.0.xsd"
	default-autowire="byName">
	  
	
	<!-- 数据源 -->
	<bean id="parentDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
	 	<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>  
	 	<property name="trace" value="true"/>
	</bean> 
	
	<bean id="sc" parent="parentDataSource">  
        <property name="driverUrl" value="jdbc:oracle:thin:@172.16.6.220:1521:cmes"/>  
        <property name="user" value="meams"/>  
        <property name="password" value="xwcmes"/>  
    </bean>  
      
    <bean id="lz" parent="parentDataSource">  
        <property name="driverUrl" value="jdbc:oracle:thin:@172.16.6.220:1521:cmes"/>  
        <property name="user" value="geams"/>  
        <property name="password" value="geams"/>  
    </bean>  

	<bean id="dataSource" class="com.core.db.DataSources">
		<property name="targetDataSources">
			<map key-type="java.lang.String">
				<entry value-ref="sc" key="MINE_01"/>
				<entry value-ref="lz" key="MINE_02"/>
			</map>
		</property>
	</bean>
	
	<!-- 事务  -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!-- 自定义exception处理 -->
	<bean id="exceptionResolver" class="com.core.framework.CommonExceptionHandler"/>
	<!-- 添加Mybatis支持 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="configLocation" value="classpath:config/ibatis-config.xml"/>
		<!-- 无需配置ibatis-config.xml中的mapper 由spring自动扫描加入 -->
		<property name="mapperLocations" value="classpath:com/dhcc/exchange/ibatis/*.xml"/> 
	</bean>
	
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">  
	        <constructor-arg index="0" ref="sqlSessionFactory" />  
	</bean>  
	
	<!-- 自动将映射接口转换为bean -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" 
		p:basePackage="com.dhcc.exchange.*.dao" 
		p:sqlSessionFactory-ref="sqlSessionFactory">
	</bean>
	
	<bean id="storageService" class="com.dhcc.exchange.storage.service.StorageService" />
</beans>  

 

 

Ibatis.xml代码

 <?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration PUBLIC 
	"-//mybatis.org//DTD Config 3.0//EN" 
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
	
<configuration>
	<typeAliases>
		<typeAlias alias="EQUI_STORAGE" type="com.dhcc.exchange.storage.model.Storage" />
	</typeAliases>
</configuration>

 

Storage.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC 
	"-//mybatis.org//DTD Mapper 3.0//EN" 
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.dhcc.exchange.storage.dao.StorageDao">

	<resultMap type="com.dhcc.exchange.storage.model.Storage" id="EQUI_STORAGE_LIST"/>

	<select id="queryStorageList" resultMap="EQUI_STORAGE_LIST" parameterType="EQUI_STORAGE">
		select id,storage_name from t_equi_storage t
	</select>

</mapper>

 

 

Datasourceconstant.java

public class DataSourceConstant {   
    public final static String MINE_01 = "MINE_01";   
    public final static String MINE_02 = "MINE_02";   
}

 

 

Datasources

package com.core.db;</SPAN>   
  
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;   
  
public class DataSources extends AbstractRoutingDataSource {   
    @Override   
    protected Object determineCurrentLookupKey() {   
         return DataSourceSwitch.getDataSourceType();     
    }   
}  

 

 

Datasourceswitch

public class DataSourceSwitch{   
    private static final ThreadLocal<String> contextHolder=new ThreadLocal<String>();   
       
    public static void setDataSourceType(String dataSourceType){   
        contextHolder.set(dataSourceType);   
    }   
       
    public static String getDataSourceType(){   
        return (String) contextHolder.get();   
    }   
       
    public static void clearDataSourceType(){   
        contextHolder.remove();   
    }   
}  

 

 

StorageDao .java

package com.dhcc.exchange.storage.dao;   
  
import com.dhcc.exchange.storage.model.Storage;   
import java.util.List;   
  
public abstract interface StorageDao {   
    public abstract List<Storage> queryStorageList(Storage paramVO);   
}  

 

 

Storageimpl.java

package com.dhcc.exchange.storage.dao.impl;

import java.util.List;

import com.core.framework.BaseDao;
import com.dhcc.exchange.storage.dao.StorageDao;
import com.dhcc.exchange.storage.model.Storage;

public class StorageImpl extends BaseDao implements StorageDao {

	@SuppressWarnings("unchecked")
	@Override
	public List<Storage> queryStorageList(Storage paramVO) {
		return this.getSqlSession().selectList("queryStorageList", paramVO);
	}

}

 

 

Storage .java

package com.dhcc.exchange.storage.model;   
  
public class Storage {   
       
    private String ID;   
    private String storage_name;   
       
    public String getID() {   
        return ID;   
    }   
    public void setID(String ID) {   
        this.ID = ID;   
    }   
       
    public String getStorage_name() {   
        return storage_name;   
    }   
    public void setStorage_name(String storage_name) {   
        this.storage_name = storage_name;   
    }   
}  

 

 

Storageservice.java

public class StorageService extends BaseService {   
  
    @Autowired   
    private StorageDao storageDao;   
    public String getStroage() throws ServiceException{   
        String returnVal = "";   
        try {   
              DataSourceSwitch.setDataSourceType(DataSourceConstant.MINE_01);   
            List<Storage> storages = storageDao.queryStorageList(new Storage());   
            returnVal = binder.toJson(storages);   
            Tracer.trace(returnVal);   
            log.debug("[StorageService.getStroage]JSON IS:"+returnVal);   
        } catch (Exception e) {   
            throw new ServiceException("查询菜单列表失败", e);   
        }   
        return returnVal;   
    }   
}  

 

 

 

内容概要:本文档详细介绍了基于MATLAB实现多目标差分进化(MODE)算法进行无人机三维路径规划的项目实例。项目旨在提升无人机在复杂三维环境中路径规划的精度、实时性、多目标协调处理能力、障碍物避让能力和路径平滑性。通过引入多目标差分进化算法,项目解决了传统路径规划算法在动态环境和多目标优化中的不足,实现了路径长度、飞行安全距离、能耗等多个目标的协调优化。文档涵盖了环境建模、路径编码、多目标优化策略、障碍物检测与避让、路径平滑处理等关键技术模块,并提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,对无人机路径规划和多目标优化算法感兴趣的科研人员、工程师和研究生。 使用场景及目标:①适用于无人机在军事侦察、环境监测、灾害救援、物流运输、城市管理等领域的三维路径规划;②通过多目标差分进化算法,优化路径长度、飞行安全距离、能耗等多目标,提升无人机任务执行效率和安全性;③解决动态环境变化、实时路径调整和复杂障碍物避让等问题。 其他说明:项目采用模块化设计,便于集成不同的优化目标和动态环境因素,支持后续算法升级与功能扩展。通过系统实现和仿真实验验证,项目不仅提升了理论研究的实用价值,还为无人机智能自主飞行提供了技术基础。文档提供了详细的代码示例,有助于读者深入理解和实践该项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值