通过Spring配置文件注入的JdbcTemplate-OracleDataSource在Oracle 11g中插入值。 交易通过DataSourceTransactionManager管理的@Transactional完成。
问题1)如何将自动提交值设置为false?我猜,默认值为true。 以下是代码段:
DataSource ds = (DataSource)ctx.getBean("dataSourceBean");
try {
ds.getConnection().setAutoCommit(false);
System.out.println("Autocommit " +ds.getConnection().getAutoCommit());
} catch (SQLException e) {
e.printStackTrace();
}
println
语句仅提供true
。
还在DAO类的insert方法中打印了getAutoCommit值。也有这样的事实。
问题2)对于唯一约束违规,我需要回滚。
在这种情况下,抛出DuplicateKeyException
,它包含在SQLIntegrityConstraintViolationException上。
所以
@Transactional(rollbackFor =?.class)必须有哪个Exception?
答案 0 :(得分:1)
1.将其存储在变量
中DataSource ds = (DataSource)ctx.getBean("dataSourceBean");
try {
Connection con =ds.getConnection();
con.setAutoCommit(false);
System.out.println("Autocommit " +con.getAutoCommit());
} catch (SQLException e) {
e.printStackTrace();
}
再次调用ds.getConnection()时,您将从池中获得另一个连接
2.更改Weblogic DataSource配置
Auto commit transactions if not explicitly committed or rolledback
答案 1 :(得分:1)
而是以编程方式执行,检查连接池是否可以选择在从池返回连接时将auto commit设置为false。 DBCP的BasicDataSource有这样的选项
如果抛出任何RuntimeException,Spring将执行回滚。