package com.spring;
import java.sql.Connection;
import java.sql.Statement;
import javax.sql.DataSource;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.orm.toplink.TopLinkTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
public class TransactionDemo {
/**
* spring事務(wù)模板例子
*
*/
public void templateTemplateDemo(){
final ApplicationContext ctx=new ClassPathXmlApplicationContext("src/bean.xml");
//ClassPathResource cpr=new ClassPathResource("bean.xml");
//final XmlBeanFactory factory=new XmlBeanFactory(cpr);
PlatformTransactionManager ptm=(PlatformTransactionManager)ctx.getBean("transactionManager");
TransactionTemplate tt=new TransactionTemplate(ptm);
tt.execute(new TransactionCallbackWithoutResult(){
@Override
protected void doInTransactionWithoutResult(TransactionStatus ts) {
try{
DataSource ds=(DataSource)ctx.getBean("dataSource");
Connection conn=DataSourceUtils.getConnection(ds);
Statement stmt=conn.createStatement();
stmt.execute("insert into tuser values(123,'裴德萬')");
}catch(Exception e){
ts.setRollbackOnly();
e.printStackTrace();
}
}
});
}
/**
* 使用PlatforTransactionManager實(shí)現(xiàn)類管理事務(wù)
*
*/
public void PlatforTransactionManagerDemo(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");
PlatformTransactionManager tm=(PlatformTransactionManager)ctx.getBean("transactionManager");
DefaultTransactionDefinition dtf=new DefaultTransactionDefinition();//初始化一個(gè)默認(rèn)事務(wù)
dtf.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);//設(shè)置事務(wù)定義對象的事務(wù)傳達(dá)室播屬性
TransactionStatus ts=tm.getTransaction(dtf);//TransactionStatus代表事務(wù)對象本身,getTransaction開始一個(gè)事務(wù)
try{
DataSource ds=(DataSource)ctx.getBean("dataSource");
Connection conn=DataSourceUtils.getConnection(ds);
Statement stmt=conn.createStatement();
stmt.execute("insert into tuser values(123,'裴德萬')");
tm.commit(ts);
}catch(Exception e){
tm.rollback(ts);
e.printStackTrace();
}
}
public static void main(String[] args){
TransactionDemo td=new TransactionDemo();
td.templateTemplateDemo();
}
}
對應(yīng)的XML文件配置(jdbc)如下:import java.sql.Connection;
import java.sql.Statement;
import javax.sql.DataSource;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.orm.toplink.TopLinkTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
public class TransactionDemo {
/**
* spring事務(wù)模板例子
*
*/
public void templateTemplateDemo(){
final ApplicationContext ctx=new ClassPathXmlApplicationContext("src/bean.xml");
//ClassPathResource cpr=new ClassPathResource("bean.xml");
//final XmlBeanFactory factory=new XmlBeanFactory(cpr);
PlatformTransactionManager ptm=(PlatformTransactionManager)ctx.getBean("transactionManager");
TransactionTemplate tt=new TransactionTemplate(ptm);
tt.execute(new TransactionCallbackWithoutResult(){
@Override
protected void doInTransactionWithoutResult(TransactionStatus ts) {
try{
DataSource ds=(DataSource)ctx.getBean("dataSource");
Connection conn=DataSourceUtils.getConnection(ds);
Statement stmt=conn.createStatement();
stmt.execute("insert into tuser values(123,'裴德萬')");
}catch(Exception e){
ts.setRollbackOnly();
e.printStackTrace();
}
}
});
}
/**
* 使用PlatforTransactionManager實(shí)現(xiàn)類管理事務(wù)
*
*/
public void PlatforTransactionManagerDemo(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");
PlatformTransactionManager tm=(PlatformTransactionManager)ctx.getBean("transactionManager");
DefaultTransactionDefinition dtf=new DefaultTransactionDefinition();//初始化一個(gè)默認(rèn)事務(wù)
dtf.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);//設(shè)置事務(wù)定義對象的事務(wù)傳達(dá)室播屬性
TransactionStatus ts=tm.getTransaction(dtf);//TransactionStatus代表事務(wù)對象本身,getTransaction開始一個(gè)事務(wù)
try{
DataSource ds=(DataSource)ctx.getBean("dataSource");
Connection conn=DataSourceUtils.getConnection(ds);
Statement stmt=conn.createStatement();
stmt.execute("insert into tuser values(123,'裴德萬')");
tm.commit(ts);
}catch(Exception e){
tm.rollback(ts);
e.printStackTrace();
}
}
public static void main(String[] args){
TransactionDemo td=new TransactionDemo();
td.templateTemplateDemo();
}
}
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>
JTA的配置如下
<bean id="transactionManager" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="dataSource">
<property name="jndiName">
<value>jdbc/kkmei</value>
</property>
</bean>
<bean id="jtatm" class="org.springframework.transaction.jta.JtaTransactionManager">
</bean>
使用ApplicationContext時(shí)只能通過applicationContext.xml來初始化容器<property name="dataSource">
<property name="jndiName">
<value>jdbc/kkmei</value>
</property>
</bean>
<bean id="jtatm" class="org.springframework.transaction.jta.JtaTransactionManager">
</bean>
final ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
mysql 亂碼問題由來已久,今天發(fā)現(xiàn)把my.ini中的字符編碼改為utf-8時(shí),mysql無法啟動。在這個(gè)例子中我們使用了utf-8編碼,那么我們要把test數(shù)據(jù)庫的編碼,表編碼,字段編碼全改成utf-8就沒問題了,mysql-front停止開發(fā)了,郁悶