-
Spring中读取properties文件信息方法 1.新建一个properties文件. 2.properties文件需要和Spring的applicationContext.xml放在同一个目录下. 3.Spring配置文件中引入PropertyPlaceholderConfigurer类,该类有location属性来指明properties文件的位置.或者直接使用<context:property-placeholder location=""/>标签 4.读取Properties文件的数据,以${key}的形式就可以获取. 例子: 有一个pro.properties文件,文件中有name=admin,password=123属性. applicationContext.xml文件中: <bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 或者: <context:property-placeholder location="classpath:pro.properties"/> <property name="location" value="classpath:pro.properties"/> </bean> public class User{ String name; String password; //生成get、set()方法 } <bean id="user" class="com.own.User"> <property name="name" value="${name}"/> <property name="password" value="${password}"/> </bean>查看全部
-
使用事务之前要有一个环境准备 银行转账的例子: 1.首先要创建一个数据库表,表中有id(主键)、name、money字段. 从第四条记录开始自动增长,手动的插入了前三条记录.且money都是1000 INSERT account VALUES('1','aaa','1000'); 插入数据库时,基本数据类型可以使用单引号或双引号(只是可以,不会出错) 字符类型必须使用单引号或双引号. sql的单引号有特殊含义,用来把字符串内容引起来,而双引号无特殊含义,只用来作为字符串的内容. 2.定义Dao接口,声明了outMoney(String out,Double money);方法与inMoney(String in,Double money)方法;其中第一个参数为帐号,第二个为金额. 3.通过Dao实体类实现Dao接口并继承JdbcDaoSupport类,实现接口的方法,在方法里通过继承JdbcDaoSupport的getJdbcTemplate()方法获取到模版来对数据库操作. 4.定义properties文件,文件里是关于数据源的配置,通过<context:properties-placeholder location="classpath:xx"> 标签来引入properties文件. 配置文件中引入Dao实体类并定义数据源(用c3p0),数据源的属性值可以使用${}来引入properties文件中的属性. 将数据源注入Dao实体类.属性名为dataSource.因为只要给继承JdbcDaoSupport的类注入数据源那么它就会自动创建一个JdbcTemplate. 或者在配置文件中引入JdbcTemplate类,并把数据源注入到该bean的dataSource属性,再将该bean注入到Dao实体类中的jdbcTemplate属性中. (Dao实体类中不需要创建datasource、JdbcTemplate属性) 5.定义Service接口,接口中声明transfer(String out,String in,Double);方法,定义Service实现类,类里定义一个Dao成员变量并注入,并实现transfer()方法,方法里调用Dao接口声明的那两个方法. 6.配置文件中引入Service. (还没有设置事务)查看全部
-
Spring的事务 支持编程式的事务管理与声明式的事务管理 其中声明式又包括了传统声明式与基于XML Schena的方式与Annotation的方式: 声明式是通过Spring AOP实现的(增强操作),实际上就是在没有事务的代码执行之前去开启事务,在代码执行之后要进行事务的提交,所以这也是一段增强的操作,可以通过AOP的思想来进行实现.查看全部
-
TransactionStatus接口用来记录事务的状态 该接口定义了一组方法,用来获取或判断事务的相应状态信息. 平台事务管理器(PlatformTransactionManager)会根据TransactionDefinition中定义的事务信息(包括隔离级别、传播行为)来进行事务的管理,在管理的过程中事务可能产生了保存点或事务是新的事务等情况,那么这些信息都会记录在TransactionStatus的对象中.查看全部
-
事务的传播行为:主要用来决规定事务方法和事务方法发生嵌套调用时事务如何进行传播 (事务是会传播的) Service层的方法一般调用DAO层的业务方法,一个Service层可以有多个Service类. 一般是将事务设置在Service层的方法中,Service层中的方法调用DAO层的方法. 当我们调用Service层的一些方法的时候,它能保证这个方法中执行的所有对数据库的操作方法都保持在一个事务中.在事务里调用的方法要不全都成功,要不全部失败. 如果在Service层的某个方法中,又调用了Service层的另外一个方法,这两个方法可能都设置了事务,那么在多个事务方法的相互调用时,事务是怎样规定呢?要保证在方法里调用Service层另外的方法与我本身这个Service层的方法要处在同一个事务中,否则就不能保证事务的一致性. 事务的传播行为就是解决这种情况. 调用一个基于Spring的Service接口方法(如UserService#addUser())时,它将运行于Spring管理的事务环境中,Service接口方法可能会在内部调用其它的Service接口方法以共同完成一个完整的业务操作,因此就会产生服务接口方法嵌套调用的情况,Spring通过事务传播行为控制当前的事务如何传播到被嵌套调用的目标服务接口方法中. Service1{ aaa(){ bbb(); dao(); } bbb(){} } 一共有7种事务的传播行为,当前事务即指aaa()方法的事务. (常用)PROPAGATION_REQUIRED PROPAGATION_SUPPORTS PROPAGATION_MANDATORY (常用)PROPAGATION_REQUIRES_NEW PROPAGATION_NOT_SUPPORTED PROPAGATION_NEVER (常用)PROPAGATION_NESTED PROPAGATION_NESTED(事务嵌套执行):在执行aaa()方法的时候,如果aaa()方法与bbb()方法都设置了事务,那么当执行完bbb()方法后,该方法会根据事务设置一个保存点,假如aaa()方法执行没有异常,那么就顺利执行,如果遇到了异常,那么可以回滚到保存点的位置或者最初始的状态.查看全部
-
TransactionDefinition接口 该接口里定义了一组常量与方法 常量: (隔离级别) static int ISOLATION_DEFAULT; static int ISOLATION_READ_COMMITTED; static int ISOLATION_READ_UNCOMMITTED; static int ISOLATION_REPEATABLE_READ; static int ISOLATION_SERIALIZABLE; (传播行为) static int PROPAGATION_MANDATORY; static int PROPAGATION_NESTED; static int PROPAGATION_NEVER; static int PROPAGATION_NOT_SUPPORTED; static int PROPAGATION_REQUIRED; static int PROPAGATION_REQUIRES_NEW; static int PROPAGATION_SUPPORTS; (超时) static int TIMEOUT_DEFAULT; 方法: //获取隔离级别 int getIsolationLevel(); //获取事务名称 String getName(); //获取超时信息 int getTimeout(); //判断是否为只读 boolean isReadOnly(); 如果不考虑事务的隔离性,会引发安全问题:包括脏读、不可重复读、幻读.隔离级别就是解决这几种读的问题. 脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的.导致查询结果不一致的问题. 不可重复读:在同一个事务中,多次读取同一数据返回的结果有所不同.(即事务一要多次读取数据,突然读取到事务二已经提交并更新后的数据,导致这个事务中多次的查询结果不一致) 幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了,在后来的查询中,第一个事务就会发现有些原来没有的记录. MySQL默认事务隔离级别:REPATABLE_READ(可能出现幻读) Oracle默认:READ_COMMITTED(可能出现不可重复读和幻读)查看全部
-
在Spring中如果要实现事务管理,可以直接使用PlatformTransactionManager来完成. PlatformTransactionManager接口有很多实现类,如: DataSourceTransactionManager(数据源事务管理) HibernateTransactionManager(Hibernate事务管理) JdoTransactionManager(Jdo事务管理) JtaTransactionManager(Jta事务管理) DataSourceTransactionManager:事务管理器 对JDBC、Mybatis进行事务管理,在spring中是对JdbcTemplate进行事务管理 HibernateTransactionManager:是对Hibernate进行事务管理,当在spring中使用HibernateTemplate时,要使用此管理器. 当在service的方法中同时使用了JdbcTemplate和HibernateTemplate时,就要使用HibernateTransactionManager了,因为当使用DataSourceTransactionManager时,JdbcTemplate和HibernateTemplate获得的connection并不是同一个,也就没办法对service的方法进行事务管理了.查看全部
-
Spring中的事务管理: Spring提供了一组接口来进行对事务的管理. 主要有: 1.PlatformTransactionManager(平台事务管理器) 2.TransactionDefinition(事务定义信息,隔离、传播、超时、只读) 3.TransactionStatus(事务具体运行状态) ------ 在PlatformTransactionManager接口中声明了三个方法. //获取TransactionStatus实例 TransactionStatus getTransaction(TransactionDefinition t); //事务提交 void commit(TransactionStatus t); //事务回滚 void rollback(TransactionStatus t); ----- 在TransactionDefinition接口中定义了事务的隔离程度、传播行为、超时、只读,该接口是事务属性的集合. TransactionStatus getTransaction(TransactionDefinition t)方法就是通过事务的属性集合来获取一个TransactionStatus实例,然后根据TransactionStatus实例来决定是否提交事务. ----- 在TransactionStatus接口中声明了5个方法: //是否是一个新的事务 boolean isNewTransaction(); //判断该事务是否有内部保存点 boolean hasSavepoint(); //设置事务为只读,即不可操作必须回滚 void setRollbackOnly(); //判断事务是否为只读 boolean isRollbackOnly(); //判断事务是否完成 boolean isCompleted();查看全部
-
事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败. 事务的特性: 1.原子性:是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 2.一致性:指事务前后数据的完整性必须保持一致. 3.隔离性:指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离. (即同时有两个事务操作数据库,事务一修改张三的记录,事务二也在修改张三的记录,最后可能导致记录被重复修改或修改记录被覆盖,通过设置隔离级别来解决这种问题) 4.持久性:指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发送故障也不应该对其有任何影响.未提交事务之前,数据还没有真正保存进数据库.查看全部
-
spring 事务 事务中的操作要么都成功,要么都失败查看全部
-
111查看全部
-
222查看全部
-
112查看全部
-
111查看全部
-
112查看全部
举报
0/150
提交
取消