查询A库数据插入至B库中

来源:互联网 发布:ios内购软件 编辑:程序博客网 时间:2024/06/06 01:41
***********任务需求*********************************
从A系统中查询出信息插入到B系统数据库中

知识点1---------不在同一个数据库操作
  1.因为不止在一个数据库中操作,所以要配置多个数据源.
<context:property-placeholder location="classpath:jdbc.properties"/>    
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
    p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}"  
    p:removeAbandoned="${jdbc.removeAbandoned}" p:removeAbandonedTimeout="${jdbc.removeAbandonedTimeout}"
    p:maxWait="${jdbc.maxWait}"  
    p:username="${jdbc.username}" p:password="${jdbc.password}"/>
一开始的想法是再复制一个,如下
<context:property-placeholder location="classpath:jdbc1.properties"/>    
    <bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
    p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}"  
    p:removeAbandoned="${jdbc.removeAbandoned}" p:removeAbandonedTimeout="${jdbc.removeAbandonedTimeout}"
    p:maxWait="${jdbc.maxWait}"  
    p:username="${jdbc.username}" p:password="${jdbc.password}"/>
但是
    Spring容器仅允许最多定义一个PropertyPlaceholderConfigurer(或<context:property-placeholder/>),其余的会被Spring忽略掉
于是成了这样
<context:property-placeholder location="classpath:jdbc*.properties"/>    
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
    p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}"  
    p:removeAbandoned="${jdbc.removeAbandoned}" p:removeAbandonedTimeout="${jdbc.removeAbandonedTimeout}"
    p:maxWait="${jdbc.maxWait}"  
    p:username="${jdbc.username}" p:password="${jdbc.password}"/>
<!-- 第二个数据源  -->    
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
    p:driverClassName="${jdbc1.driverClassName}" p:url="${jdbc1.url}"  
    p:removeAbandoned="${jdbc1.removeAbandoned}" p:removeAbandonedTimeout="${jdbc1.removeAbandonedTimeout}"
    p:maxWait="${jdbc1.maxWait}"  
    p:username="${jdbc1.username}" p:password="${jdbc1.password}"/>
数据源的配置文件格式大致如下(当然两份文件配置不一样):
    jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
    jdbc.url=jdbc:oracle:thin:@***.***.***.100:1521:databaseName
    jdbc.username=user
    jdbc.password=pass
    jdbc.maxWait=60000
    jdbc.removeAbandoned=true
    jdbc.removeAbandonedTimeout=180
实际中可能***.***.***.100是一个数据地址,***.***.***.120是一个数据库地址,

因为使用JdbcTemplate,给其配置一个数据源,刚开始是这样写的:
<bean id="jdbcTemplate1" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource1">
        <ref local="dataSource1" />
    </property>
</bean>

而name="dataSource"中dataSource是预定义的,这样是不行的,然后成了这样
<!-- 第二个数据源的jdbcTemplate配置的数据源 -->
<bean id="jdbcTemplate1" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource">  <!--dataSource是预定义的,不能改为dataSource1 -->
        <ref local="dataSource1" />
    </property>
</bean>

<!-- 第二个数据源jdbcTemplate1 -->
<bean id="accInfoToBfjServiceImpl"
    class="cn.com.sandpay.amms.manage.dataSyn.service.impl.AccInfoToBfjServiceImpl">
    <property name="jdbcTemplate" ref="jdbcTemplate1" />  <!jdbcTemplate,不能改为dataSource1 -->
</bean>    
<!-- 第二个数据源事务管理 -->
<bean id="txManager"
         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource1" />
</bean>

insert插入,update修改,delete删除需要进行事务管理。!切记!切记!切记!切记!切记!切记
数据源的事务管理:
<!-- <tx:annotation-driven transaction-manager="txManager"/>
这句话的作用是注册事务注解处理器,我这里没有在这里配置,是用注解配置的
@Transactional(value="txManager", propagation=Propagation.REQUIRES_NEW)
public void funName() {}
-->

知识点2-----------------JdbcTemplate的使用
这个因为在前面已经配置好了,这里的使用很简单
方法1
    private JdbcTemplate jdbcTemplate;
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {  
        this.jdbcTemplate = jdbcTemplate;  
    }
方法2
    @Autowired private JdbcTemplate jdbcTemplate;  
调用
    jdbcTemplate.update(insertSql,params)
参数
    private static String insertSql = "insert into tab_Name values("?,?,?");
    Object[] params = dataList.get(i);

知识点3:-----------一个关于事务管理的,但是不懂,先不写了









0 0
原创粉丝点击