天天看点

springboot2.0 druid数据源配置1. 引入jdbc,db驱动以及druid的starter2. 配置db连接的yml3. 测试类4. Transactional事务管理

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: 
  servlet:
    context-path: /jdbc
spring:
  datasource:
    druid:
      driver-class-name: oracle.jdbc.OracleDriver
      url: jdbc:oracle:thin:@192..::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:可以看到正常的输出结果

springboot2.0 druid数据源配置1. 引入jdbc,db驱动以及druid的starter2. 配置db连接的yml3. 测试类4. Transactional事务管理

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

springboot2.0 druid数据源配置1. 引入jdbc,db驱动以及druid的starter2. 配置db连接的yml3. 测试类4. Transactional事务管理

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

springboot2.0 druid数据源配置1. 引入jdbc,db驱动以及druid的starter2. 配置db连接的yml3. 测试类4. Transactional事务管理

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表示永不超时

继续阅读