精华内容
下载资源
问答
  • 每晚10点,捕获技术思考和创业资源洞察文|洪生鹏 编辑|静子1软件项目管理中,项目...进度是三要素之一,进度要求是通过严密进度计划,使项目能够按时按质完成。02、项目进度管理的影响因素项目范围会影响项目...

    每晚10点,捕获技术思考和创业资源洞察

    文|洪生鹏 编辑|静子

    1

    软件项目管理中,项目进度把控重要性不言而喻,深入落实到细节对项目进度非常有帮助。项目进度管理重要性主要表现在两方面:

    项目进度管理的地位

    01、项目管理集中反映在项目成本、质量和进度三个方面

    通常称为项目管理的“三要素”。进度是三要素之一,对进度的要求是通过严密的进度计划,使项目能够按时按质完成。

    02、项目进度管理的影响因素

    项目范围会影响项目进度。一般来讲,项目模块越大,项目所要完成的任务也就越多,所需的工时也就越多。

    项目成本、质量也都会影响进度。一般情况下,追加成本,可以增加更多的进度管理,比如新增开发人员,从而使某些工作能够并行完成或者加班完成。

    要是没有很好的进度计划,团队成员很难在一个长的时间跨度内掌控和汇报项目进度。计划与实际工作脱节,对于掌控项目的进度非常不利。

    项目负责人经验缺乏,管理不到位也会影响项目进度。由于项目负责人缺乏相应的项目经验,事前没有很好的进行规划分析,制定应急计划,等事情发生了才手忙脚乱不知所踪。管理组织上不能够保证进度目标的实施,人浮于事,重关系、轻能力现象严重,导致执行能力很差。项目成员只关心自己是否得利,而不管项目目标是否顺利实现。

    缺乏有效的监督、激励、考核机制,目标分解不够明确,在进度滞后的情况下找不到直接的负责人,开发人员彼此之间互相推脱责任。由于没有明确的责任又缺乏合作精神,项目成员的积极性调动不起来,对进度目标也就很漠然。

    2

    笔者曾负责实施某电子商务企业进销存管理系统。在项目规划阶段,笔者主要通过对项目进行合理分解,正确估算各个任务的工作量,制定出详细的项目进度管理计划。

    在项目实施过程中,根据基线计划,对项目进度进行有效的跟踪和监控,同时关注可能导致进度延期的项目风险因素,实现动态资源平衡等方法有效管理和控制项目进度。

    在项目计划阶段,项目组要对项目任务进行合理分解,正确估算各个任务的工作量,制定详细的进度管理计划。对项目任务进行了分解,得到了一个较为详细的工作分解结构WBS。

    f5208ae55308ea40d9d7a01bfaf86289.png

    项目任务分解完毕后,对项目设立了相应的阶段里程碑,比如需求分析、系统概要设计、系统详细设计、系统单元测试、系统集成测试、系统试运行、项目验收等阶段。

    对项目进行任务工期估算。在工期估算方面,根据以往的项目经验,大致估算出各模块的工作量,并依据项目投入的开发人员,计算出每个任务的起止时间,形成了初步的项目进度计划。

    在估算项目工期时,考虑了活动清单、资源需求、人员能力等因素,以及环境和和风险因素对工期的影响,在一些关键活动处预留了一定冗余时间以应对项目风险。

    06c7483ce3d1b3dd607e669fbb97c63d.png

    有了对工期的估算,再结合详细的WBS,预估每个模块最迟完成点。有了这些基础的数据后,就形成了项目的整体进度计划,并将进度计划在项目组内部评审后,提交给领导和客户负责人进行审核确认。

    3

    项目进度管理如此重要,那么如何做好项目进度管理,这里有几点建议可以参考

    01、做好项目进度表,明确人员分工

    这一环节看似简单,却直接关系到整个项目能否顺利完成。所以,在项目计划阶段,我们一定花足够多的时间来做好项目进度计划,在对分解项目任务时,颗粒度尽量细一些,确保每个环节具体到相关具体人员,并确定好任务截止时间。

    项目进度表可以用jira或其他项目管理工具,来保持随时汇报项目进度。作为项目经理,要及时对项目任务进度进行跟踪和监控,及时发现和纠正任务偏差。由于在制定项目进度计划时,每位项目组成员都清楚自己任务的完成时间表,以及任务完成标准,项目任务能直接关联到每位开发者。

    02、优化作业流程,确定工作标准

    项目组成员间的作业流程,是通过邮件、钉钉还是其他项目管理工具沟通,在项目启动会上一定要明确清楚。我们可以把作业流程分为

    • 需求收集
    • 需求评审
    • 进度管理
    • 缺陷管理
    • 评审回顾

    每个流程由一位或者多位负责,尽量不要超过三位。任务状态变更后,再进入到下一个流程。

    该项目任务并行较多,要是有项目助理,可以由项目助理按期检查任务完成情况,必要时相关工序人员交叉验证,同时按期汇总检查情况。对于出现任务进度延迟,由相关任务责任人提出解决方案,通过加班、寻求协助等方式完成。

    03、定期检查项目节点/里程碑

    很多时候我们会多个项目同时进行,或是还有很多其他日常工作,那么如何保障项目正常运行,这需要我们时常检查项目节点/里程碑,及时发现项目中可能的风险。要是中间有某个需求变更,需要调整,这时我们就需要尽快找相关负责人沟通。

    34fd833c6f21b31a81412967d6e1ae6a.png

    还需要特别注意关键路径上的任务,尤其是开发和测试阶段的任务,这两个阶段的任务为关键活动,也是项目成员的薄弱环节,项目组面临很多技术难点。

    笔者在负责进销存系统,有两位这方面经验丰富的程序员,并同其他工作组成员讨论技术细节问题,对于项目组确实无法解决的技术难题,则需要协调其他资源来解决,这样不至于因为某一个技术细节而影响整个工程进度。

    04、项目成员的沟通

    项目执行过程中的沟通也是非常重要的,来确保项目进度的信息透明和对称。如果A组已经做好某件事,需要B组做另外的事,如果没有及时反馈沟通,B可能压根就不知道,这样有可能导致项目进度延误。

    一般情况下,项目组会定期召开项目进度会,和项目成员同步进展情况,并再次确认各项任务的截止时间。但如果项目组有用到项目管理工具协作和沟通,信息比较公开透明的话,项目进度会就没有必要太过频繁。当然,和关键干系人的沟通还是必不可少的,可以定期核对项目进度。

    每天上班时,抽个10来分钟开个站会,对各成员提交的进度数据进行比对和汇总,总结问题,对于关键路径的任务进度偏差部分,要进行分析,提出纠正和预防措施。

    05、项目团队的激励

    想让项目成员工作起来更有激情,仅仅依赖管理制度是远远不够的,项目负责人要信任每一位成员,并注意成员的工作状态,适当增加成员在执行任务中的乐趣,做得好的一定要及时鼓励,培养成员的积极性和自我成就动机。整个团队有干劲了,项目的完成也就是水到渠成的事了。

    一起荣辱与共、互相信任、 跌宕起伏、艰难困境,依然能迎难而上,积极面对,形成一股凝聚力。人在一起不是真正的团队,心在一起才是凝聚力强的团队。

    在项目开发过程中,也遇到一些问题,比如,在系统集成测试阶段,系统兼容性,客户方参与度不足等。在今后的项目中,笔者会不断努力和改进,以求更加高效地完成项目任务。

    【END】

    展开全文
  • 下面小编整理数据库开发工程师的主要职责模板。 数据库开发工程师的主要职责模板1 职责: 1、负责产品开发中涉及到数据库创建、维护及提供数据接口。 2、负责产品数据库表设计与管理,完成数据库备份...
  • 是基于Spring Boot、Shiro和Vue等技术进行开发,主要是对后台管理系统常用模块前后端整体抽取构建成通用模板。也是集中权限管理进行再次封装,以至于简单操作,便于二次开发代码重复。主要实现管理管理、角色...
  • 是基于Spring Boot、Shiro和Vue等技术进行开发,主要是对后台管理系统常用模块前后端整体抽取构建成通用模板。也是集中权限管理进行再次封装,以至于简单操作,便于二次开发代码重复。主要实现管理管理、角色...
  • 工商管理专业实习工作报告模板 工商管理专业研究工商企业经济管理基本理论和一般方法学科,主要包括企业经营战略制定和内部行为管理两个方面。下面小编为您精心整理工商管理专业实习工作报告模板。 工商...
  • 班级管理工作总结模板4篇 *目录班级管理工作总结模板班级管理工作总结:抓在细微处落在实效中09年教师班级管理工作总结12月班主任班级管理工作总结范文 平凡班主任工作,让学生提高能力、养成习惯、塑造人格...
  • 该帖子是通过信息中心提供,称为“内容管理系统”或CMS。 其他用户不允许访问此页面,他们只能访问博客文章。 由于CMS是一个巨大开发问题,因此只有管理员可以添加帖子。 但是,随着CMS发展,其他用户也将...
  • 他的模板,一些简单的数据操作我们就不用再去手写sql了,可以通过对hibernate模板的配置去完成。 一、在dao中注入hibernate模板 1.1在dao层继承spring提供的hibernate模板 修改实体product类,让他...

      持久层只要完成数据对数据库增删改查的操作,我们常说的hibernate区别于mybatis是在于他的全自动,而hibernate的全自动则主要体现于

    他的模板,一些简单的数据操作我们就不用再去手写sql了,可以通过对hibernate模板的配置去完成。

    一、在dao中注入hibernate模板

    1.1在dao层继承spring提供的hibernate模板

    修改实体product类,让他继承HibernateDaoSupport如图:

    1.2在applicationcontext.xml中配置dao层注入hibernate模板

            <!-- 配置dao层:注入hibernate模板 -->
            <bean id="productDao" class="com.ssh.dao.productDao">
            	<!-- ref 值与sessionFactory bean id保持一致 -->
            	<property name="sessionFactory" ref="sessionFactory"></property>
            </bean>
    

    1.3在dao层调用hibernate模板完成数据操作:(模板调用this.getHibernateTemplate().)

    	public void sava(product product){
    		System.out.println("业务层调用dao层成功!");
    		//调用hibernate模板完成保存数据操作
    		this.getHibernateTemplate().save(product);
    	}
    

    二、添加事务管理

    2.1配置事务管理

            <!-- 配置事务管理器 -->
            <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            	<property name="sessionFactory" ref="sessionFactory"></property>
            </bean>

    2.2开启事务管理

            <!-- 开启注解事务 -->
            <tx:annotation-driven transaction-manager="transactionManager"/>
    

    2.3在业务层引入事务管理机制@Transactional

     

    转载于:https://www.cnblogs.com/ckxlovejava/p/7062329.html

    展开全文
  • 电话客服工作总结的模板 电话客服客服人员代表公司通过电话与客户进行沟通交流维护一种方便快捷方式。下面小编整理电话客服工作总结的模板,欢迎来参考!电话客服工作总结(一): 客户服务部承担着物业...
  • 实习期自我鉴定模板 我所学习的是工程管理专业,在大学几年当中我已把理论知识牢记在心了,为将理论知识实践到工作中,从今年开始,我在某工程公司附属单位ab公司进行了工程管理实习工作。在实习过程中我不断...
  • 1)algorithm(算法) - 数据进行处理(解决问题) 步骤有限集合 2)container(容器) - 用来管理一组数据元素 3)Iterator (迭代器) - 可遍历STL容器内全部或部分元素”对象 容器和算法通过迭代器可以进行无缝...

    **

    STL(标准模板库)

    **
    STL主要分为分为三类:
    1)algorithm(算法) - 对数据进行处理(解决问题) 步骤的有限集合
    2)container(容器) - 用来管理一组数据元素
    3)Iterator (迭代器) - 可遍历STL容器内全部或部分元素”的对象

    容器和算法通过迭代器可以进行无缝地连接。在STL中几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。

    STL 最早源于惠普实验室,早于C++存在,但是C++引入STL概念后,STL就成为C++的一部分,因为它被内建在你的编译器之内,不需要另行安装。

    STL被组织为下面的13个头文 件:

    <algorithm><deque><functional><iterator><vector><list><map><memory><numeric><queue><set><stack><utility>

    demo.cpp

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    class student
    {
    public:
    	student(int age, const char* name)
    	{
    		this->age = age;
    		strncpy_s(this->name, name,64);
    		cout << "调用构造函数" << endl;
    	}
    
    	student(const student& s)
    	{
    		this->age = s.age;
    		strncpy_s(this->name, s.name, 64);
    		cout << "拷贝构造函数被调用!" << endl;
    	}
    
    public:
    	int age;
    	char name[64];
    
    };
    
    void demo2()
    {
    	vector<student> v1;
    	student s1(18, "李小美");
    	student s2(19, "王大帅");
    	v1.push_back(s1);
    	v1.push_back(s2);
    
    	cout << "v1 学生的个数: " << v1.size() << endl;
    
    	/* 方式1, 下表访问 */
    	/*for (unsigned int i = 0; i < v1.size(); i++)
    	{
    		cout << v1[i].name << " : " << v1[i].age << endl;
    	}*/
    
    	/* 方式二, 迭代器访问 */
    	for (vector<student>::iterator it = v1.begin(); it != v1.end();it++)
    	{
    		cout << (*it).name << " : " << (*it).age << endl;
    	}
    }
    
    /* 容器中存放指针 */
    void demo3()
    {
    	vector<student*> v1;
    
    	student s1(18, "李小美");
    	student s2(19, "王大帅");
    	v1.push_back(&s1);
    	v1.push_back(&s2);
    
    	cout << "v1 学生的个数: " << v1.size() << endl;
    
    	/* 方式一, 下表访问 */
    	for (unsigned int i = 0; i < v1.size(); i++)
    	{
    		cout << v1[i]->name << " : " << v1[i]->age << endl;
    	}
    
    	/* 方式二, 迭代器访问 */
    	for (vector<student*>::iterator it = v1.begin(); it != v1.end(); it++)
    	{
    		cout << (**it).name << " : " << (**it).age << endl;
    	}
    }
    
    void demo1()
    {
    	/* 第一部分 容器 */
    	vector<int> v1;
    
    	v1.push_back(1);
    	v1.push_back(2);
    	v1.push_back(3);
    	v1.push_back(4);
    	v1.push_back(5);
    
    	cout << "v1 元素的个数: " << v1.size() << endl;
    
    	cout << "v1 中保存的元素: " << endl;
    	/* 方式1 下表访问 */
    	/*for (unsigned int i = 0; i < v1.size; i++)
    	{
    		cout << v1[i] << endl;
    	}*/
    
    	/* 方式2 迭代器访问 */
    	for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
    	{
    		cout << (*it) << endl;
    	}
    	
    	/* 第三部分 算法 */
    	int ncount = count(v1.begin(), v1.end(), 90);
    	cout << "v1 中数值为 90 的元素个数: " << ncount << endl;
    
    }
    
    int main()
    {
    	demo3();
    
    	system("pause");
    	return 0;
    }
    

    编译环境: vs2019
    运行结果:
    在这里插入图片描述

    结语:

    学到的知识要, 多复习, 多总结, 多敲. 需要时间的积累, 才能引起质的改变. 自己写不出来的永远是别人的.

    分享一下我的技巧: 代数法把具体的数字带进去, 看看能能能找到规律(掌握思想).
    还有就是画图, 也很重要. 用笔画出来, 把数代进去, 方法虽然笨, 但真的很实用, 好记忆不如烂笔头!!!

    我是小白, 如果存在问题, 欢迎大神给予评判指正.
    错了不可怕, 可怕的是找不出bug

    今日是: 2020年5月5日, (由于疫情的原因)在家里整天坐在电脑前, 眼神逐渐从大到小, 视力也有所大大的下降 ,中午期待打篮球. 写博客, 就当写写日记吧!!!,

    希望给个赞: 反正你又不亏, 顺便而已

    展开全文
  • ZigBee工业控制的主要原理下位机利用微处理器采集现场环境和运行信息,并通过接口电路将现场信息发送到ZigBee 节点,ZigBee 节点通过ZigBee 网络发送到ZigBee 协调器,协调器将收到信息转发到上位管理计算机,...
  • 升旗演讲稿模板:我中国娃,爱说普通话 信息化和频繁国际交往都当前时代特征。在信息化时代,社会起决定作用的是信息知识。信息知识获得,重要途径依靠计算机技术和通信技术。衡量一个国家社会信息化...
  • 制造企业公文审批过程自动化的要求高效性和安全性,需要系统...为方便公文审批流程的管理引入模板的概念,最后通过开发出能够与企业内其他信息系统集成的基于Web的模板式公文审批系统验证了模型的合理性和有效性。
  • ZigBee工业控制的主要原理下位机利用微处理器采集现场环境和运行信息,并通过接口电路将现场信息发送到ZigBee 节点,ZigBee 节点通过ZigBee 网络发送到ZigBee 协调器,协调器将收到信息转发到上位管理计算机,...
  • 第二课堂活动培养学生美的感受能力和提高美术作品欣赏能力,引导学生体会色彩对比,调和,培养学生想象能力。本学期通过组织美术小组活动,使学生美术特长得到了更好发展。在此,把本学期小组学习...
  • 对于试图捆绑此软件包人员或ESM与CJS有意见人员,此信息主要有用。 这一个软件包。 这意味着该软件包同时公开了CJS2和ESM入口点。 通过require(...)加载此程序包将导致Node和Webpack使用入口点,禁用...
  • 模板工程实习心得体会 通过模板工程实习,对于工程造价,主要培养具备管理学、经济学和土木工程技术基本知识,掌握现代工程造价管理科学理论、方法和手段,具有工程建设项目投资决策和全过程各阶段工程造价管理...
  • 对于试图捆绑此软件包人员或ESM与CJS有意见人员,此信息主要有用。 这一个软件包。 这意味着该软件包同时公开了CJS2和ESM入口点。 通过require(...)加载此程序包将导致Node和Webpack使用入口点,禁用...
  • 化工工作总结模板4篇 *目录化工工作总结模板县文化局文化工作总结市规划局信息化工作总结县农机化工作总结及2018年工作计划 一、校园网的管理 网络是否能真正发挥效益,管理关键,而校园网管理的主要目的保障...
  • 实习目的与要求: 本次在九州通医药集团股份有限公司实习目的主要是熟悉物流流程及物流管理信息系统在整个过程中应用,通过此次实习将自己在校期间所学理论联系实践,通过对日常业务流程、物流管理信息系统...
  •  通过实习,让新员工公司的性质、经营方式和营运环境获得初步认识,同时结合所学专业观察和了解公司的管理制度、运作特点、业务要求和主要产品等,为进一步正式工作打下坚实的工作经验基础。无论从事什么都将是对...
  • 思考: Spring 提供了一个jdbc Api进行封装的模板类,通过模板类能够数据库进行CRUD操作,而没有事务进行操作。而下面可以介绍Spring中事务如何管理的 1.1 简介 在 Java EE中 项目都分层次开发 ,事务...

    事务管理

    思考: Spring 提供了一个对jdbc Api进行封装的模板类,通过模板类能够对数据库进行CRUD操作,而没有对事务进行操作。而下面可以介绍Spring中的事务是如何管理的

    1.1 简介

    在 Java EE中 项目都是分层次的开发 ,事务放在持久层明显是不合理的
    在Spring中提供分层设计业务层的事务处理解决方案,其原理是利用Spring AOP将事务管理代码抽取出来形成通知 ,然后再通过配置或编码的方式织入业务层的切入点
    Spring中事务管理器的主要是PlatformTransactionManager接口来管理其中的主要方法为:

    • getTransaction 获取事务状态
    • commit 提交事务
    • rollback 回滚事务
      但是在实际的开发中一般使用DataSourceTransactionManager去管理JDBC或者Mybatis的事务

    1.2 事务的隔离级别

    在TransactionDefinition定了事务的隔离级别

    注意:
    写操作:增加 删除 修改 会开启事务
    读操作:执行查询的时候也会开启事务

    具体在该接口中 事务的隔离级别如下:

    • ISOLATION_DEFAULT 默认级别 归属下面级别的以一种
    • ISOLATION_READ_UNCOMMITTED 读未提交
    • ISOLATION_READ_COMMITTED 读以提交
    • ISOLATION_REPEATABLE_READ 可重复读
    • ISOLATION_SERIALIZABLE 可串行化

    1.3事务传播行为

    在String中定义了以下事务传播行为

    • REQUIRED

      如果当前没有这个事务就新建一个事务 如果已经存在一个事务中 就加入到这个事务

    • SUPPORTS

      支持当前事务,如果当前没有事务,就以非事务的方式执行(没有事务)

    • MANDATORY

      使用当前的事务 如果当前没有事务就抛出异常

    • REQUERS_NEW

      新建事务,如果在当前事务中 就把当前事务挂起

    • NOT_SUPPORTED

      以非事务方式执行操作,如果当前存在事务就把当前事务挂起

    • NEVER

      以非事务的方式运行,如果存在事务 , 那就抛出异常

    • NESTED

      如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行REQUIRED

    1.4基础XML配置事务

    准备工作

    导入jar包 需要导入 spring-tx-xxxx.jar

    准备表 在这里插入图片描述
    写好实体类
    package com.xyx.jdbc,bean;
    	import lombok.Data;
    	@Data
    	public class Account{
    		private long id;
    		private String name;
    		private double money;
    }
    
    编写dao层的接口以及它的实现类

    -接口

    	package com.xyx.jdbc.dao
    	import com,xyx.jdbc.bean.Account;
    public interface IAccountDao{
    	Account findAccountById(long id);
    	void updateAccount(Account account);
    	Account findAccountByName(String name);
    }
    
    • 实现类
    	package com.xyx.jdbc.dao.impl;
    	import java.util.List;
    	import java.util.Objects;
    	import org.springframework.jdbc.core.RowMapper;
    	import org.springframework.jdbc.core.support.JdbcDaoSupport;
    	import com.xyx.jdbc.bean.IAccount;
    	import com.xyx.jdbc.dao.IAccountDao;
    	public class AccountDaoImpl extends JdbcDaoSupport implements IAccountDao{
    	@Override
    	public Account findAccountById(long id){
    		return getJdbcTemplate().queryForOnject("select * from account where id = ?"),Account.class,id);
    	}
    	@Override
    	public void updateAccount(Account account){
    	getJdbcTemplate().update("update
    	account set money = ? where id =
    	?",account.getMoney(),account.getId());
    	}
    	@Override
    public Account findAccountByName(String
    name) {
    List<Account> accouns =
    getJdbcTemplate().query("select *
    from account where name = ?",(rs,rowNum) -> {
    Account account = new Account();
    account.setId(rs.getLong("id"));
    account.setName(rs.getString("name"));
    	account.setMoney(rs.getDouble("money"));
    	return account;
    	}, name);
    	if(Objects.isNull(accouns)) {
    	return null;
    	}
    	if(accouns.size() > 1) {
    	throw new RuntimeException("该用户
    	拥有多个账户");
    	}
    return accouns.get(0);
    		}
    	}
    }
    
    • 撰写业务层接口和实现类

      接口:

      package com.xyx.jdbc.service;
      
      import com.xyx.jdbc.bean.Account;
      
      public interface  IAccountService {
      	Account findById(long id);
      	
      	/**
      	 * 	转账
      	 * @param sourceName	转出账户名称
      	 * @param targetName	转入账户名称
      	 * @param money			转入金额
      	 */
      	void transfer(String sourceName,String targetName,double money);
      }
      
      

      实现类

      package com.xyx.jdbc.service;
      
      import com.xyx.jdbc.bean.Account;
      import com.xyx.jdbc.dao.IAccountDao;
      
      public class AccountServiceImpl implements IAccountService {
      
      	
      	private IAccountDao accountDao;
      	
      	public void setAccountDao(IAccountDao accountDao) {
      		this.accountDao = accountDao;
      	}
      
      	@Override
      	public Account findById(long id) {
      		return accountDao.findAccountById(id);
      	}
      
      	@Override
      	public void transfer(String sourceName, String targetName, double money) {
      		Account sourceAccount = accountDao.findAccountByName(sourceName);
      		Account targetAccount = accountDao.findAccountByName(targetName);
      		
      		sourceAccount.setMoney(sourceAccount.getMoney() - money);
      		targetAccount.setMoney(targetAccount.getMoney() + money);
      		
      		accountDao.updateAccount(sourceAccount);
      		
      		int a = 10 / 0;
      		
      		accountDao.updateAccount(targetAccount);
      	}
      
      }
      
      

    增加配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:aop="http://www.springframework.org/schema/aop"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    						http://www.springframework.org/schema/beans/spring-beans.xsd
    						http://www.springframework.org/schema/tx 
    						http://www.springframework.org/schema/tx/spring-tx.xsd
    						http://www.springframework.org/schema/aop 
    						http://www.springframework.org/schema/aop/spring-aop.xsd">
    	<!-- 
    		配置数据库连接池
    	 -->
    	<bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource">
    		<property name="driver" value="oracle.jdbc.OracleDriver"></property>
    		<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
    		<property name="username" value="spring"></property>
    		<property name="password" value="spring"></property>
    	</bean>
    	
    	<!-- 配置Dao -->
    	<bean id="accountDao" class="com.xyx.jdbc.dao.impl.AccountDaoImpl">
    		<property name="dataSource" ref="datasource"></property>
    	</bean>
    	
    	<!-- 配置Service -->
    	<bean id="accountService" class="com.xyx.jdbc.service.AccountServiceImpl">
    		<property name="accountDao" ref="accountDao"></property>
    	</bean>
    	
    	<!-- 事务配置代码 -->
    	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    		<property name="dataSource" ref="datasource"></property>
    	</bean>
    	
    	<!-- 配置事务通知 -->
    	<tx:advice id="txAdvice" transaction-manager="transactionManager">
    		<!-- 配置事务属性 -->
    		<tx:attributes>
    			<!-- 
    				name : 指定方法名称 *代表任意赐福
    				read-only 是否是只读事务
    				isolation:指定事务的隔离级别。默认值是使用数据库的默认隔离级别。
    				propagation:指定事务的传播行为。
    				timeout:指定超时时间。默认值为:-1。永不超时。
    				rollback-for:用于指定一个异常,当执行产生该异常时,事务回滚。产生其他异常,事务不回滚。没有默认值,任何异常都回滚。
    				no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时,事务回滚。没有默认值,任何异常都回滚
    			
    			 -->
    			<tx:method name="*" read-only="false" propagation="REQUIRED"/>
    			<tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
    		</tx:attributes>
    		
    	</tx:advice>
    	<!-- 配置 aop -->
    	<aop:config>
    		<aop:pointcut expression="execution(* com.xyx.jdbc.service..*.*(..))" id="pt1"/>
    		<aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/>
    	</aop:config>	
    	
    	
    </beans>
    

    至此我们就完成一个基于XML方式配置的事务管理

    展开全文
  • 可视化的管理网站内容和结构:自由的模块布局和组合设计,灵活的内容调用、强大的自定义功能、所见即所得的编辑器等等功能在都体现了网站架构的自由和灵活,网站可以做得很简洁,也可以做得很复杂,完全可以根据自己...
  • 主要内容:通过建立项目管理数据平台,让石油化工项目建设管理经验得到更好传承和利用,数据平台可以实现管理经验数据化、建设数据共享化、数据结构模板化、数据编码标准化、收集数据流程化、数据操作平台化、数据...
  •  个人年终工作总结格式模板一 通过不断努力,较好地完成了自己本职工作,并且在工作上有了新突破,工作方式和工作效率有了很大提升,现将今年工作总结如下: 一主要完成工作: (1)狠抓安全管理,...
  •  这两周,除了熟悉网站更新基本操作外,在如何提高流量方面学到了很多新知识,现作工作总结如下: 一、 关键词 1、热点词抓取:主要是通过百度谷歌关键词搜索量进行抓取,并综合相关营销类*。 2、关键词...
  • 机械生产实习报告模板 一、实习目的及意义 1、实习目的 本次生产实习大四专业课学习一个xx要组成部分,其目的在于通过实习使我们获得基本生产感性知识,理论联系实际,扩大知识面;同时专业实习又锻炼和...
  • 2、可以通过新增栏目制作:1-添加滚屏栏目入口:【管理栏目】-【添加栏目】-选择滚屏类型栏目:2-编辑滚屏栏目:以滚屏全屏纵向为例:2.1:添加栏目成功后,编辑栏目,在【样式】-【全屏】可以全屏导航、顶部、...
  • 采购月度工作总结模板 在整个采购活动过程中,一方面,通过采购获取了资源,保证了企业正常生产顺利进行,这采购效益;另一方面,在采购过程中,也会发生各种费用,这就是采购成本。今天小编给大家为您整理了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 457
精华内容 182
关键字:

对模板的管理主要是通过