Ruoyi前后端分离学习
Ruoyi前后端分离学习
将项目在Linux中部署
https://doc.ruoyi.vip/ruoyi-vue/document/hjbs.html#必要配置
将一个新项目打包部署到linux。首先后端用maven 打包,前端直接进行build。接着分别在两个目录存放炸包和h T M L精彩文件。 接着配置nginx 首先配置静态页面的转发。然后配置一个反向代理,将指定URL的访问转发到本地项目的8080端口。接着启动redis 启动jar包
使用 Maven 打包后端项目:
goCopy code mvn clean package
前端项目构建:
arduinoCopy code npm run build
在两个目录分别存放打包后的文件:
- 后端打包文件存放位置:
/path/to/backend/package
- 前端构建文件存放位置:
/path/to/frontend/build
- 后端打包文件存放位置:
配置 Nginx:
首先,配置静态页面的转发:
nginxCopy codeserver { listen 80; server_name example.com; location / { root /path/to/frontend/build; index index.html; } }
然后,配置反向代理将指定 URL 转发到本地项目的 8080 端口:
nginxCopy codeserver { listen 80; server_name example.com; location / { root /path/to/frontend/build; index index.html; } location /api { proxy_pass http://localhost:8080; # 其他反向代理配置(如果需要) } }
启动 Redis:
sqlCopy code systemctl start redis
启动 Java 可执行 JAR 包:
bashCopy code java -jar /path/to/your.jar
请确保替换示例中的路径和域名为你实际使用的值,并确保所有步骤都按顺序执行。
开启事务
https://doc.ruoyi.vip/ruoyi/document/htsc.html#事务管理
事务配置
新建的Spring Boot
项目中,一般都会引用spring-boot-starter
或者spring-boot-starter-web
,而这两个起步依赖中都已经包含了对于spring-boot-starter-jdbc
或spring-boot-starter-data-jpa
的依赖。 当我们使用了这两个依赖的时候,框架会自动默认分别注入DataSourceTransactionManager
或JpaTransactionManager
。 所以我们不需要任何额外配置就可以用@Transactional
注解进行事务的使用。
坑1
为Spring
的默认的事务规则是遇到运行异常(RuntimeException)
和程序错误(Error)
才会回滚。如果想针对检查异常进行事务回滚,可以在@Transactional
注解里使用 rollbackFor
属性明确指定异常。
抛出普通异常注意加上:@Transactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class)
public int insertUser(User user) throws Exception
{
// 新增用户信息
int rows = userMapper.insertUser(user);
// 新增用户岗位关联
insertUserPost(user);
// 新增用户与角色管理
insertUserRole(user);
// 模拟抛出SQLException异常
boolean flag = true;
if (flag)
{
throw new SQLException("发生异常了..");
}
return rows;
}
坑2
在业务层手工捕捉并处理了异常,你都把异常“吃”掉了,Spring
自然不知道这里有错,更不会主动去回滚数据
不能在事务内捕捉异常:catch (Exception e)
@Transactional
public int insertUser(User user) throws Exception
{
// 新增用户信息
int rows = userMapper.insertUser(user);
// 新增用户岗位关联
insertUserPost(user);
// 新增用户与角色管理
insertUserRole(user);
// 模拟抛出SQLException异常
boolean flag = true;
if (flag)
{
try
{
// 谨慎:尽量不要在业务层捕捉异常并处理
throw new SQLException("发生异常了..");
}
catch (Exception e)
{
e.printStackTrace();
}
}
return rows;
}
登陆日志
获取ip不能放在线程池里面,不然可能出现错误
数据权限
https://doc.ruoyi.vip/ruoyi/document/htsc.html#数据权限使用
主要通过定义注解+拼接sql实现
在mybatis
查询底部标签添加数据范围过滤
<select id="select" parameterType="..." resultMap="...Result">
<include refid="select...Vo"/>
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
例如:用户管理(未过滤数据权限的情况):
select u.user_id, u.dept_id, u.login_name, u.user_name, u.email
, u.phonenumber, u.password, u.sex, u.avatar, u.salt
, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by
, u.create_time, u.remark, d.dept_name
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0'
例如:用户管理(已过滤数据权限的情况):
select u.user_id, u.dept_id, u.login_name, u.user_name, u.email
, u.phonenumber, u.password, u.sex, u.avatar, u.salt
, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by
, u.create_time, u.remark, d.dept_name
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0'
and u.dept_id in (
select dept_id
from sys_role_dept
where role_id = 2
)
结果很明显,我们多了如下语句。通过角色部门表(sys_role_dept)
完成了数据权限过滤
and u.dept_id in (
select dept_id
from sys_role_dept
where role_id = 2
)
- 0
- 0
- 0
- 0
- 0
- 0