1. 引入jdbc,db驱动以及druid的starter

这里以oracle为例

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc</artifactId>
    <version>11.2.0.4</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.9</version>
</dependency>

druid的starter配置可以参照:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

2. 配置db连接的yml

server:
  port: 50001
  servlet:
    context-path: /jdbc
spring:
  datasource:
    druid:
      driver-class-name: oracle.jdbc.OracleDriver
      url: jdbc:oracle:thin:@192.168.14.16:1521:orcl
      username: test
      password: test
      stat-view-servlet:
        url-pattern: /druid/*
        reset-enable: true
        login-username: druid
        login-password: druid
      web-stat-filter:
        url-pattern: /*
        exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"

3. 测试类

@RestController
public class HiController {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @RequestMapping(value="/hi")
    public Integer hi() {
        String sql = "select count(0) from aaa";
        return jdbcTemplate.queryForObject(sql, Integer.class);

    }
}

启动应用,访问/hi:可以看到正常的输出结果

springboot druid queryTimeout默认 springboot druid oracle_bc

访问/druid:用户名/密码我们在第二步设置的是druid/druid

springboot druid queryTimeout默认 springboot druid oracle_bc_02

进入后可以查看druid的所有内容:

springboot druid queryTimeout默认 springboot druid oracle_druid_03

4. Transactional事务管理

springboot开启db事务非常简单,只需要在service类上或者方法上加上@Transactional 注解即可。

关于事务管理器,不管是JPA还是JDBC等都实现自接口 PlatformTransactionManager
如果你添加的是 spring-boot-starter-jdbc 依赖,框架会默认注入 DataSourceTransactionManager 实例。
如果你添加的是 spring-boot-starter-data-jpa 依赖,框架会默认注入 JpaTransactionManager 实例。

@Transactional 的参数:

参 数 名 称

功 能 描 述

readOnly

该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。例如:@Transactional(readOnly=true)

rollbackFor

该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。例如:指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})

rollbackForClassName

该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。例如:指定单一异常类名称@Transactional(rollbackForClassName=”RuntimeException”)指定多个异常类名称:@Transactional(rollbackForClassName={“RuntimeException”,”Exception”})

noRollbackFor

该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。例如:指定单一异常类:@Transactional(noRollbackFor=RuntimeException.class)指定多个异常类:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})

noRollbackForClassName

该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。例如:指定单一异常类名称:@Transactional(noRollbackForClassName=”RuntimeException”)指定多个异常类名称:@Transactional(noRollbackForClassName={“RuntimeException”,”Exception”})

propagation

该属性用于设置事务的传播行为。例如:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)

isolation

该属性用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置

timeout

该属性用于设置事务的超时秒数,默认值为-1表示永不超时