Finology 大数据金融

通过大数据以量化金融

两个 Service 下面的方法,互相调用,这时就会涉及到事务的传播。

传播机制类型

这些类型都是针对被调用的方法来说的。

PROPAGATION_REQUIRED (默认)

支持当前事务,如果当前没有事务,则新建事务

如果当前存在事务,则加入当前事务,合并成一个事务

REQUIRES_NEW

新建事务,如果当前存在事务,则把当前事务挂起

这个方法会独立提交事务,不受调用者的事务影响,父级异常,它也是正常提交

NESTED

如果当前存在事务,它将会成为父级事务的一个子事务,方法结束后并没有提交,只有等父事务结束才提交

如果当前没有事务,则新建事务

如果它异常,父级可以捕获它的异常而不进行回滚,正常提交

但如果父级异常,它必然回滚,这就是和 REQUIRES_NEW 的区别

SUPPORTS

如果当前存在事务,则加入事务

如果当前不存在事务,则以非事务方式运行,这个和不写注解是一样

NOT_SUPPORTED

以非事务方式运行

如果当前存在事务,则把当前事务挂起

MANDATORY

如果当前存在事务,则运行在当前事务中

如果当前无事务,则抛出异常,也即父级方法必须有事务

NEVER

以非事务方式运行,如果当前存在事务,则抛出异常,即父级方法必须无事务。

需要快速安装一个MySQL数据库,还是使用Docker方便快捷。

首先创建本地目录/usr/local/mysql-docker,并设置权限。

1
$ sudo chmod 777 mysql-docker

这样存放Docker上面MySQL的数据文件,哪怕重启以后,数据不会丢失。

运行下面命令,就可以在Docker下面成功安装 MySQL 5.7。

1
docker run --name mysql --env MYSQL_ROOT_HOST=172.17.%.% --env MYSQL_ROOT_PASSWORD=123456 -v /usr/local/mysql-docker:/var/lib/mysql -p 3306:3306 -d mysql/mysql-server:5.7

如果没有把本地路径 添加到Docker的文件共享目录里,可能会报如下错误:

1
2
3
4
The path /usr/local/mysql-docker
is not shared from OS X and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.

进入Docker -> Preferences... -> File Sharing,把路径添加进去即可。

进入Docker容器

1
$ docker exec -it 5fd4bb2b6c67 bash

进入数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bash-4.2# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.29 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
0%