今天介绍SpringCloud操作Oracle数据库,更多高级视频教程请关注下方二维码。
介绍
1、在数据库操作中,当遇到异常时,我们最关心的是部分回滚还是整体回滚还是不理会,怎么操作怎么来;
2、所以本章节就着重讲解了如何运用Transactional注解来处理事物回滚机制;
3、rollbackFor 属性:抛出的异常是 rollbackFor 异常的子类时都会回滚数据;
4、noRollbackFor 属性:抛出的异常是 noRollbackFor 异常的子类时不会回滚数据;抛出的异常不是 noRollbackFor 异常的子类时会回滚数据;
实现步骤:
添加pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ppl.springcloud.jdbc</groupId>
<artifactId>ppl-spring-cloud-jdbc-demo01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ppl-spring-cloud-jdbc-demo01</name>
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Dalston.SR5</version>
<relativePath />
</parent>
<dependencies>
<!-- 访问数据库模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MYSQL数据库依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Oracle数据依赖 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
<!-- SpringMVC依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 修改后立即生效,热部署 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
添加配置文件
server:
port: 8335
spring:
application:
name: ppl-spring-cloud-jdbc-jdbctemplate-transactional #全部小写
#############################################
# Oracle 属性配置
datasource:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@ip:1521:ssodb
username: un
password: pwd
jpa:
hibernate:
#ddl-auto: create #ddl-auto:设为create表示每次都重新建表
ddl-auto: update #ddl-auto:设为update表示每次都不会重新建表
show-sql: true
#########################################
# 打印日志
logging:
level:
#root: INFO
#org.hibernate: INFO
#org.hibernate.type.descriptor.sql.BasicBinder: TRACE
#org.hibernate.type.descriptor.sql.BasicExtractor: TRACE
com:
ppl:
cloud:
dao.impl: DEBUG
#######################################
核心代码
package com.ppl.cloud.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.ppl.cloud.dao.IUserDao;
import com.ppl.cloud.entity.User;
import com.ppl.cloud.exception.RollbackExceptionExtendsRuntimeException;
import com.ppl.cloud.service.IUserService;
/**
* 简单用户链接Oracle数据库微服务(通过@Service注解标注该类为持久化操作对象)。
* @author ljl
*
*/
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private IUserDao userDao;
/**
* 由于 RuntimeException、RollbackExceptionExtendsRuntimeException 是 Exception 的子类,所以属于 Exception 的子类异常抛出来,都会回滚数据。
*
* @param user
* @return
*/
@Transactional(propagation = Propagation.REQUIRED, isolation= Isolation.DEFAULT, rollbackFor = Exception.class)
@Override
public boolean add(User user) {
boolean isInsert = userDao.addUser(user);
if(isInsert){
// throw new RuntimeException("抛出 RuntimeException 异常,测试 rollbackFor = Exception.class 是否有效?");
throw new RollbackExceptionExtendsRuntimeException("抛出 RollbackExceptionExtendsRuntimeException 异常,测试 rollbackFor = Exception.class 是否有效?");
}
return false;
}
@Transactional(readOnly = true)
@Override
public User get(String id) {
// TODO Auto-generated method stub
return userDao.findById(id);
}
@Override
public List<User> list() {
// TODO Auto-generated method stub
return null;
}
}
欢迎关注索取更多教程: