前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >注解配置 ssh「建议收藏」

注解配置 ssh「建议收藏」

作者头像
全栈程序员站长
发布2022-07-08 17:26:39
3840
发布2022-07-08 17:26:39
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君。

注解

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* ><beans xmlns="http://www.springframework.org/schema/beans"	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"	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-2.5.xsd						http://www.springframework.org/schema/aop 						http://www.springframework.org/schema/aop/spring-aop-2.5.xsd			 			http://www.springframework.org/schema/tx 						http://www.springframework.org/schema/tx/spring-tx-2.5.xsd						 http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context-2.5.xsd">	<!-- 读取properties配置文件 -->	<bean		class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">		<property name="locations">			<list>				<!-- 配置文件的位置 -->				<value>classpath:jdbc.properties</value>			</list>		</property>	</bean>	<!-- 配置数据源 -->	<bean id="dataSource" destroy-method="close"		class="com.mchange.v2.c3p0.ComboPooledDataSource">		<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />		<property name="jdbcUrl" value="${jdbcUrl}" />		<property name="user" value="${user}" />		<property name="password" value="${password}" />		<property name="maxPoolSize" value="40" />		<property name="minPoolSize" value="1" />		<property name="initialPoolSize" value="1" />		<!-- 连接的最大空暇时间 -->		<property name="maxIdleTime" value="60" />		<!--当连接池用完时client调用getConnection()后等待获取新连接的时间,超时后将抛出 SQLException,如设为0则无限期等待。单位毫秒。Default: 			0 -->			<property name="checkoutTimeout" value="2000" />	</bean>	<!-- 配置sessionFactory -->	<bean id="sessionFatory"		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">		<property name="dataSource" ref="dataSource">		</property>		<property name="hibernateProperties">			<props>				<!-- sessionFactory.getCurrentSession()能够完毕一系列的工作,当调用时, hibernate将session绑定到当前线程。事务结束后。hibernate 					将session从当前线程中释放。而且关闭session。当再次调用getCurrentSession ()时。将得到一个新的session -->				<prop key="current_session_context_class">thread</prop>				<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>				<!-- 自己主动重连 -->				<prop key="hibernate.autoReconnect">true</prop>				<!-- 显示sql语句 -->				<prop key="hibernate.show_sql">true</prop>				<!-- 链接编码方式 -->				<prop key="hibernate.connection.characterEncoding">utf-8</prop>				<!-- 二级缓存 -->				<prop key="hibernate.cache.use_second_level_cache">true</prop>				<!-- 3 要指定缓存的供应商 -->				<!-- <prop key="hibernate.cache.provider_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop> -->				<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory				</prop>				<!-- 验证 -->				<prop key="javax.persistence.validation.mode">none</prop>				<!-- 自己主动创建表 -->				<!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->			</props>		</property>		<!-- orm映射文件的位置之三 -->		<!-- mappingDirectoryLocations:指定映射的文件路径 -->		<property name="mappingDirectoryLocations">			<list>				<value>classpath:cn/jbit/bean</value>			</list>		</property>				<![CDATA[			<!-- orm映射文件的位置之中的一个 -->		<!-- mappingResources:指定classpath下详细映射文件名称 -->		<property name="mappingResources">			<list>				<value>					cn/jbit/bean/Dept.hbm.xml				</value>			</list>		</property>		<!-- orm映射文件的位置之二 -->		<!-- mappingLocations:能够指定不论什么文件路径,而且能够指定前缀:classpath、file等 -->		<!-- 也能够用通配符指定。'*'指定一个文件(路径)名。'**'指定多个文件(路径)名,比如: -->		<property name="mappingLocations">			<list>				<value>classpath:cn/jbit/bean/*.hbm.xml</value>			</list>		</property>		<!-- orm映射文件的位置之三 -->		<!-- mappingDirectoryLocations:指定映射的文件路径 -->		<property name="mappingDirectoryLocations">			<list>				<value>classpath:cn/jbit/bean</value>			</list>		</property>		<!-- 注解扫描类 -->		<property name="annotatedClasses">			<list>				<value></value>			</list>		</property>		<!-- 注解扫描包 -->		<property name="annotatedPackages">			<list>				<value></value>			</list>		</property>		]]>	</bean>	<!-- 声明事务管理器 -->	<bean id="transactionManager"		class="org.springframework.orm.hibernate4.HibernateTransactionManager">		<property name="sessionFactory" ref="sessionFactory" />	</bean>	<!-- 配置事物管理 -->	<![CDATA[		事务管理是企业级应用程序开发中不可缺少的技术,  用来确保数据的完整性和一致性. 			事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么所有完毕, 要么所有不起作用			事务的四个关键属性(ACID)			原子性(atomicity): 事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么所有完毕要么全然不起作用.			一致性(consistency): 一旦所有事务动作完毕, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中.			隔离性(isolation): 可能有很多事务会同一时候处理同样的数据, 因此每一个事物都应该与其它事务隔离开来, 防止数据损坏.			持久性(durability): 一旦事务完毕, 不管发生什么系统错误, 它的结果都不应该受到影响. 通常情况下, 事务的结果被写到持久化存储器中.						Spring 中的事务管理		作为企业级应用程序框架, Spring 在不同的事务管理 API 之上定义了一个抽象层. 而应用程序开发者不必了解底层的事务管理 API, 就能够使用 Spring 的事务管理机制.		Spring 既支持编程式事务管理, 也支持声明式的事务管理. 		编程式事务管理: 将事务管理代码嵌入到业务方法中来控制事务的提交和回滚. 在编程式管理事务时, 必须在每一个事务操作中包括额外的事务管理代码. 		声明式事务管理: 大多数情况下比编程式事务管理更好用. 它将事务管理代码从业务方法中分离出来, 以声明的方式来实现事务管理. 事务管理作为一种横切关注点,		 能够通过 AOP 方法模块化. Spring 通过 Spring AOP 框架支持声明式事务管理.		 Spring 从不同的事务管理 API 中抽象了一整套的事务机制. 开发者不必了解底层的事务 API, 就能够利用这些事务机制. 有了这些事务机制, 事务管理代码就能独立于特定的事务技术了.		 Spring 的核心事务管理抽象是                     org.springframework.transaction.PlatformTransactionManager	org.springframework.orm.hibernate4.HibernateTransactionManager	用 Hibernate 框架存取数据库事务管理器的一个实现	]]>	<!-- 开启注解事务 -->	<tx:annotation-driven transaction-manager="transactionManager" />	<![CDATA[		Spring 还同意简单地用 @Transactional 注解来标注事务方法. 			为了将方法定义为支持事务处理的, 能够为方法加入 @Transactional 注解. 依据 Spring AOP 基于代理机制, 仅仅能标注公有方法.			能够在方法或者类级别上加入 @Transactional 注解. 当把这个注解应用到类上时, 这个类中的所有公共方法都会被定义成支持事务处理的. 			在 Bean 配置文件里仅仅须要启用 <tx:annotation-driven> 元素, 并为之指定事务管理器就能够了. 			假设事务处理器的名称是 transactionManager, 就能够在<tx:annotation-driven> 元素中省略 transaction-manager 属性. 这个元素会自己主动检測该名称的事务处理器.		事务传播属性			当事务方法被还有一个事务方法调用时, 必须指定事务应该怎样传播. 比如: 方法可能继续在现有事务中执行, 也可能开启一个新事务, 并在自己的事务中执行.		  	REQUIRED:业务方法须要在一个容器里执行。
*/

假设方法执行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新的事务。

	       	NOT_SUPPORTED:声明方法不须要事务。假设方法没有关联到一个事务,容器不会为他开启事务。假设方法在一个事务中被调用。该事务会被挂起,调用结束后,原先的事务会恢复执行。	       	REQUIRESNEW:不管是否存在事务,该方法总汇为自己发起一个新的事务。假设方法已经执行在一个事务中。则原有事务挂起,新的事务被创建。	       	MANDATORY:该方法仅仅能在一个已经存在的事务中执行,业务方法不能发起自己的事务。假设在没有事务的环境下被调用。容器抛出例外。	       	SUPPORTS:该方法在某个事务范围内被调用。则方法成为该事务的一部分。假设方法在该事务范围外被调用,该方法就在没有事务的环境下执行。

	       	NEVER:该方法绝对不能在事务范围内执行。

假设在就抛例外。仅仅有该方法没有关联到不论什么事务,才正常执行。	      	NESTED:假设一个活动的事务存在,则执行在一个嵌套的事务中。假设没有活动事务。则按REQUIRED属性执行。它使用了一个单独的事务。这个事务拥有多个能够回滚的保存点。

内部事务的回滚不会对外部事务造成影响。它仅仅对DataSourceTransactionManager事务管理器起效。

	      事务的隔离级别	     	 从理论上来说, 事务应该彼此全然隔离, 以避免并发事务所导致的问题. 然而, 那样会对性能产生极大的影响, 由于事务必须按顺序执行. 			在实际开发中, 为了提升性能, 事务会以较低的隔离级别执行.			事务的隔离级别能够通过隔离事务属性指定	  Spring 支持的事务隔离级别	  		Default 使用数据库的默认隔离级别,对于大多数数据库来说,默认是隔离级别是READ_COMMITED	  		READ_UNCOMMITED 同意事务读取已经被其它事务提交的变更,脏读,不可反复度和幻读的问题都会出现	  		READ_COMMITED 仅仅同意事务读取已经被其它事务提交的变更,能够避免脏读,但不可反复读和幻读问题仍然可能出现	  		REPEATABLE_READ  这样的事务隔离级别能够防止脏读,不可反复读。可是可能出现幻像读。

 	  		SERIALIZABLE 这是花费最高代价可是最可靠的事务隔离级别。

事务被处理为顺序执行。除了防止脏读。不可反复读外,还避免了幻读 	  脏读,不可反复读,幻读	  		  脏读:张三的工资为5000,事务A中把他的工资改为8000,但事务A尚未提交。与此同一时候。事务B正在读取张三的工资,读取到张三的工资为8000。

随后,事务A发生异常,而回滚了事务。张三的工资又回滚为5000。最后,事务B读取到的张三工资为8000的数据即为脏数据。事务B做了一次脏读。	  		  不可反复读:在事务A中。读取到张三的工资为5000,操作没有完毕,事务还没提交。 						与此同一时候,事务B把张三的工资改为8000,并提交了事务。

随后,在事务A中,再次读取张三的工资。此时工资变为8000。在一个事务中前后两次读取的结果并不致。导致了不可反复读。 	  		  幻读:A眼下工资为5000的员工有10人。事务A读取所有工资为5000的人数为10人。此时。事务B插入一条工资也为5000的记录。这是,事务A再次读取工资为5000的员工,记录为11人。此时产生了幻读。	  		  	 设置回滚事务属性	 	默认情况下仅仅有未检查异常(RuntimeException和Error类型的异常)会导致事务回滚. 而受检查异常不会.		事务的回滚规则能够通过 @Transactional 注解的 rollbackFor 和 noRollbackFor 属性来定义. 这两个属性被声明为 Class[] 类型的, 因此能够为这两个属性指定多个异常类.			rollbackFor:  遇到时必须进行回滚			noRollbackFor: 一组异常类。遇到时必须不回滚	超时和仅仅读属性		由于事务能够在行和表上获得锁,  因此长事务会占用资源, 并对总体性能产生影响. 		假设一个事物仅仅读取数据但不做改动, 数据库引擎能够对这个事务进行优化.		超时事务属性timeout: 事务在强制回滚之前能够保持多久. 这样能够防止长期执行的事务占用资源.		仅仅读事务属性readonly: 表示这个事务仅仅读取数据但不更新数据, 这样能够帮助数据库引擎优化事务.			]]></beans>

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116081.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档