跳至主要內容

Ruoyi前后端分离学习

小企鹅学习Java大约 3 分钟约 1013 字...

Ruoyi前后端分离学习

将项目在Linux中部署

https://doc.ruoyi.vip/ruoyi-vue/document/hjbs.html#必要配置open in new window

将一个新项目打包部署到linux。首先后端用maven 打包,前端直接进行build。接着分别在两个目录存放炸包和h T M L精彩文件。 接着配置nginx 首先配置静态页面的转发。然后配置一个反向代理,将指定URL的访问转发到本地项目的8080端口。接着启动redis 启动jar包

  1. 使用 Maven 打包后端项目:

    goCopy code
    mvn clean package
    
  2. 前端项目构建:

    arduinoCopy code
    npm run build
    
  3. 在两个目录分别存放打包后的文件:

    • 后端打包文件存放位置:/path/to/backend/package
    • 前端构建文件存放位置:/path/to/frontend/build
  4. 配置 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;
              # 其他反向代理配置(如果需要)
          }
      }
      
  5. 启动 Redis:

    sqlCopy code
    systemctl start redis
    
  6. 启动 Java 可执行 JAR 包:

    bashCopy code
    java -jar /path/to/your.jar
    

请确保替换示例中的路径和域名为你实际使用的值,并确保所有步骤都按顺序执行。

开启事务

https://doc.ruoyi.vip/ruoyi/document/htsc.html#事务管理open in new window

事务配置

新建的Spring Boot项目中,一般都会引用spring-boot-starter或者spring-boot-starter-web,而这两个起步依赖中都已经包含了对于spring-boot-starter-jdbcspring-boot-starter-data-jpa的依赖。 当我们使用了这两个依赖的时候,框架会自动默认分别注入DataSourceTransactionManagerJpaTransactionManager。 所以我们不需要任何额外配置就可以用@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#数据权限使用open in new window

主要通过定义注解+拼接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
评论
  • 按正序
  • 按倒序
  • 按热度