SpringCloud通过JdbcTemplate操作Oracle数据库且支持事物处理机制

今天介绍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;
	}

}

欢迎关注索取更多教程:



猜你喜欢

转载自blog.csdn.net/cadn_jueying/article/details/80747593