整体项目很简单,为了方便,用了Spring Boot和Mybatis集成的方式对数据库进行操作,事物的传播属性是默认的PROPAGATION_REQUIRED.这里最主要是Service外层和Service内层的嵌套,大概看看都能看懂(注:for循环从0开始了,没做修改,忽略数据库id不能为0的无用数据,操作过程中已删除)。
下面分情况介绍异常:
Application层(没用这个,直接用了Junit测试类)
---------------------------------------------------------------------------------------------------------------------------------
package com.sh.springboot;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Created by sh on 18/4/28.
*/
@SpringBootApplication
@MapperScan("com.sh.springboot.dao")
public class
SpringbootApplication
{
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
/*
* @Autowired private ServiceWaiCeng s;
*
* @RequestMapping("/") String home()
throws Exception {
* System.out.println("controller 正常执行"); s.insertWaiCeng();;
*
* return " 正常返回Hello World!"; }
*/
}
Test测试类
---------------------------------------------------------------------------------------------------------------------------------
package com.sh.springboot;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.sh.springboot.servicewaiceng.ServiceWaiCeng;
/**
* Created by sh on 18/4/28.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = SpringbootApplication.class)
public class
PersonDaoTest {
@Autowired
private ServiceWaiCeng servicewaiceng;
@Test
public void test() {
servicewaiceng.insertWaiCeng();
System.out.println("Controller正常执行");
}
}
---------------------------------------------------------------------------------------------------------------------------------
Service外层
---------------------------------------------------------------------------------------------------------------------------------
package com.sh.springboot.servicewaiceng.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import com.sh.springboot.serviceneiceng.ServiceNeiCeng;
import com.sh.springboot.servicewaiceng.ServiceWaiCeng;
/**
* Created by sh on 18/4/28.
*/
@Component
public class
ServiceWaiCengImpl implements ServiceWaiCeng {
@Autowired
private ServiceNeiCeng snc;
@Transactional
public void insertWaiCeng() {
for (int j = 0; j < 8; j++) {
snc.insertNeiCeng(j, j + "姓名");
}
System.out.println("外层正常执行");
}
}
---------------------------------------------------------------------------------------------------------------------------------
Service内层
---------------------------------------------------------------------------------------------------------------------------------
package com.sh.springboot.serviceneiceng.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.sh.springboot.bean.Person;
import com.sh.springboot.dao.PersonDao;
import com.sh.springboot.serviceneiceng.ServiceNeiCeng;
/**
* Created by sh on 18/4/28.
*/
@Service
public class
ServiceNeiCengImpl implements ServiceNeiCeng {
@Autowired
PersonDao
persondao;
@Transactional
public void insertNeiCeng(int id, String name) {
Person
person
= new
Person();
person.setId(id);
person.setName(name);
persondao.insertPerson(person);
System.out.println(id + "内层正常执行");
}
}
---------------------------------------------------------------------------------------------------------------------------------
一、内外都无Try Catch
1.外部有异常,内部无异常
修改Service外层代码如下:
---------------------------------------------------------------------------------------------------------------------------------
package com.sh.springboot.servicewaiceng.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import com.sh.springboot.serviceneiceng.ServiceNeiCeng;
import com.sh.springboot.servicewaiceng.ServiceWaiCeng;
/**
* Created by sh on 18/4/28.
*/
@Component
public class
ServiceWaiCengImpl implements ServiceWaiCeng {
@Autowired
private ServiceNeiCeng snc;
@Transactional
public void insertWaiCeng() {
for (int j = 0; j < 8; j++) {
snc.insertNeiCeng(j, j +