java 之DelayQueue,TaskDelayed,handlerFactory,dataChange消息配置.收发等.java spring事务处理TransactionTemplate
java 之DelayQueue,TaskDelayed,handlerFactory,dataChange消息配置.收发等.java spring事务处理TransactionTemplate等.
================================================================================
事物处理:
public class HelloWorld{
private DataSource dataSource;
//获取数据源
public void setDataSource(DataSource dataSource){
this.dataSource = dataSource;
}
Connection conn = null;
Statement stmt = null;
try{
//获取数据连接
conn = dataSource.getConnection();
//开始事务
conn.setAutoCommit(false);
stmt = conn.createStatement();
//执行想要操作
stmt.executUpdat(...);
//执行成功则提交事务
conn.commit();
}catch(....){
if(conn != null){
//执行不成功,则回滚
conn.roolback();
}catch(...){...}
}finally{...}
}
public interface PlatformTransactionManager{
//目前的事务
TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
//提交事务
void commit(TransactionStatus status) throws TransactionException;
//事务回滚
void rollback(TransactionStatus) throws TransactionException;
}
public interface TransactionDefinition{
//获得事务的传播行为
int getPropagationBehavior();
//获得事务的隔离层次
int getsolationLevel();
//判断事务是否超时
int getTimeour();
//是否为只读事务
boolean isReadOnly();
//返回一个事务的名字
String getName();
}
public interface TransactionStatus{
//判断是否是一个新事务
boolean isNewTransaction();
//设定为只读事务
void setRollbackOnly();
//判断是否是只读事务
boolean isRollbackOnly();
//判断一个事务是否完成
boolean isCompleted();
}
TransactionTemplate extends DefaultTransactionDefinition implements InitializingBean{
private PlatformTransactionManager tranactionManger = null;
//通知依赖注入
publc TransactionTemplate(PlatformTransactionManager transactionManager){
this.transactionManager = transactionManager;
}
public void setTransactionManager(PlatformTransactionManager transaction transactionManager){
this.transactionManger = transactionManager;
}
public PlatformTransactionManager getTransactionManager){
return transactionManager;
}
//执行完毕后调用
public void afterPropertiesSet(){
if(this.transactionManager == null){
throw new IllegalArgumentException("xxxxx");
}
}
//在这里进行事务处理
public Object execute(TransactionCallback action) throws TransactionException{
TransactionStatus status = this.transactionManager.getTransaction(this);
Object result = null;
try{
//执行具体方法
result = action.doInTransaction(status);
}catch(RuntimeException ex){
rollbackOnException(status, ex);
throw ex;
}catch(Error err){
rollbackOnException(status, err);
throw err;
}
this.transactionManager.commit(status);
return result;
} //如果有异常就rollback
private void rollbackOnException(TransactionStatus status, Throwable ex) throws TransactionException{
try{
this.transactionManager.rollback(status);
}catch(RuntimeException ex2){
throw ex2;
}catch(Error err){
throw err;
}
}
}
publc class HelloDAO{
private DataSource dataSource;
private PlatformTransactionManager transactionManager;
//通过依赖注入来完善管理
public void setDataSource(DataSource dataSource){
this.dataSource = dataSource;
}
public void setTransactionManager(PlatformTransactionManager transactionManager){
this.transactionManager = transactionManager;
}
//该方法进行事务处理
public int create(String msg){
TranactionTemplate transactionTemplate(transactionManager);
Object result = transactionTemplate.execute(new TransactionCallback(){
public Object doInTransaction(TransactionStatus status){
//执行操作
return resultObject;
}
});
}
}
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--使用SQLServer数据库-->
<property name="driverClassName">
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<!--设定url-->
<property name="url">
<value>jdbc:microsoft:sqlserver://localhost:1433/stdb</value>
</property>
<!--设定用户名-->
<property name="name">
<value>sa</value>
</property>
<!--密码-->
<property name="msg">
<value>123</value>
</property>
</bean>
<!--设定transactionManager-->
<bean id="transactinManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource">
</property>
</bean>
<!--示例中的一个dao-->
<bean id="helloDAO" class="com.langfei.xxxx.HelloDAO">
<property name="dataSource">
<ref bean="dataSource">
</property>
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
</bean>
public class HelloDao{
private DataSource dataSource;
privata JdbcTemplate jdbcTemplate; //依赖注入
public void setDataSource(DataSource dataSource){
this.dataSource = dataSource;
jdbcTemplate = new JdbcTemplate(dataSource);
}
//注意这里看不到事务处理的代码,都在配置文件中
public void create(String sql){
jdbcTemplate.update(sql);
}
}
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManageDataSource">
<!--使用SQLServer数据库-->
<property name="driverClassName">
<value>com.microsof.jdbc.sqlserver.SQLServerDriver</value>
</property>
<!--设定URL-->
.....
<!--设定用户名-->
....
<!--设定密码-->
....
</bean> <!--设定transactionManager-->
....
<bean id="transactionManager">
</>
..... <!--Dao-->
。。。。。
<!--声明事务处理-->
<bean id="helloDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name ="transactionManager">
<ref bean="transactionManager"/>
</property>
<!--指明代理的是HelloDAO类-->
<property name="target">
<ref bean="helloDAO">
</property> <property name="transactionAttributes">
<props>
<!--表示HelloDAO中的create()方法进行事务管理,并指明如果当前没有事务,就新建一个事务-->
<prop key="create">PROPAGATION_REQUIERD</prop>
</props>
</property> <!--
PROPAGATION_REQUIRED: 如果当前没有事务,就新建一个事务
PROPAGATION_SUPPORTS: 如果当前没有事务,就以非事务方式执行
PROPAGATION_MANDATORY: 如果当前没有事务,就抛出异常
PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
PROPAGATION_NEVER: 以非事务方式执行,如果当前存在事务,则抛出异常 -->
</bean>
java 之DelayQueue,TaskDelayed,handlerFactory,dataChange消息配置.收发等.java spring事务处理TransactionTemplate的更多相关文章
- 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)
接前一篇CentOS 7下最新版(6.2.4)ELK+Filebeat+Log4j日志集成环境搭建完整指南,继续对ELK. logstash官方最新文档https://www.elastic.co/g ...
- ELK学习笔记之Logstash和Filebeat解析对java异常堆栈下多行日志配置支持
0x00 概述 logstash官方最新文档.假设有几十台服务器,每台服务器要监控系统日志syslog.tomcat日志.nginx日志.mysql日志等等,监控OOM.内存低下进程被kill.ngi ...
- Java微信公众平台开发_03_消息管理之被动回复消息
GitHub源码:https://github.com/shirayner/weixin_gz 一.本节要点 1.回调url 上一节,我们启用服务器配置的时候,填写了一个服务器地址(url),如下图, ...
- JAVA基础篇NO1--环境变量的配置及命名规则
标签(空格分隔): java基础 一:计算机概述 计算机:硬件和软件 硬件:控制器 运算器 存储器 输入和输出设备 存储器:外存(硬盘) 内存 软件:系统软件 应用软件 系统软件:wi ...
- Java学习笔记一——安装JDK并配置环境变量
下载安装JDK1.8 在官网上下载JDK,官网地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213 ...
- Java/javaEE/web/jsp/网站编程环境配置及其软件下载和网站路径
Java/javaEE/web/jsp/网站编程环境配置及其软件下载和网站路径 (2015/07/08更新) JDK下载地址(JDK官网下载地址) 下载地址为:http://www.oracle.co ...
- Java Socket发送与接收HTTP消息简单实现
在上次Java Socket现实简单的HTTP服务我 们实现了简单的HTTP服务,它可以用来模拟HTTP服务,用它可以截获HTTP请求的原始码流,让我们很清楚的了解到我们向服务发的HTTP消息的结 构 ...
- java Android SDK安装与环境变量配置以及开发第一个Android程序
JAVA的安装与环境变量的配置 1.先下载JAVA,并且安装. 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u3 ...
- EditPlus配置[C++] [Python] [Java] 编译运行环境
以前一直用Codeblocks写C++,eclipse写Java,再在eclipse里面集成PyDev写Python,首先无法忍受代码自动补全功能(这个功能也许你万分喜欢),也无法忍受如此重量级的ID ...
随机推荐
- 记一次mysql启动不了的问题
在linux上用的是xampp,mysql启动没有报任何错误,但就是查找不到进程,于是找mysql错误日志,日志在哪?在lampp/var/mysql 以.err结尾的文件里.里面内容如下; /opt ...
- cocos代码研究(10)ActionEase子类学习笔记
理论部分 缓动动作的基类,继承自 ActionInterval类.ActionEase本身是一个抽象的概念父类,开发者最好不要在代码中直接创建它的对象,因为它没有具体的执行效果,这一类的子类速度变化大 ...
- VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
前面讲了模态对话框和非模态对话框,本节开始鸡啄米讲一种特殊的对话框--属性页对话框.另外,本套教程所讲大部分对VC++各个版本均可适用或者稍作修改即可,但考虑到终究还是基于VS2010版本的,所以将& ...
- 生成TPC-H数据集
下载tpc-h tool 版本有点老,2.14.3,够用了. 在解压的文件夹下面cd到dbgen下,找到makefile.suite. ~/tpch_2_14_3$ cd dbgen~/tpch_2_ ...
- Flex与SSH集成
Flex与SSH集成 -- ::| 分类: flex |举报|字号 订阅 Flex与SSH集成 ,下载blazeds_bin_3---.zip 包,将其解压 取下blazeds.war包 更改为bla ...
- IntelliJ idea的初次使用
1. 首次使用Idea工具,需要安装.我安装的版本是14.0.2.安装包下载地址 http://pan.baidu.com/s/1gfFkrzt 2. 安装SVN. 3.配置JDK. 4.配置mave ...
- java压缩zip文件中文乱码问题
用java来打包文件生成压缩文件,有两个地方会出现乱码 1.内容的中文乱码问题,这个问题网上很多人给出了解决方法,两种:修改sun的源码:使用开源的类库org.apache.tools.zip.Zip ...
- Python笔记 #10# Histograms
1.Build a histogram In [1]: help(plt.hist) Help on function hist in module matplotlib.pyplot: hist(x ...
- Mysql在InnoDB引擎下索引失效行级锁变表锁案例
先做好准备,创建InnoDB引擎数据表,并添加了相应的索引 DROP TABLE IF EXISTS `innodb_lock`; CREATE TABLE `innodb_lock` ( `a` ) ...
- 20145302张薇《网络对抗技术》PC平台逆向破解
20145302张薇<网络对抗技术>PC平台逆向破解 实验任务 1.简单shellcode注入实验 2.Return-to-libc 攻击实验 实验相关原理 Bof攻击防御技术 从防止注入 ...