JeeSite 快速开发平台
官方网站
    • 平台简介
    • 架构特点
    • 技术选型
    • 功能介绍
    • 安装部署
    • 常见问题
    • 目录结构
    • 更新日志
    • Vue 文档
    • BPM 文档
    • Cloud 文档
V5 演示
Vue 演示
💖联系
  • 我要提意见、文档纠错
  • JeeSite 代码库, 请⭐Star关注
  • JeeSite Vue 代码库, 请⭐关注
  • Spring Cloud 微服务架构
  • JeeSite 手机端/移动端
  • AI + RAG + CMS 人工智能
  • Flowable 中国式工作流
  • OAauth2 统一认证服务器
  • 政务内外网环境中间件
  • 访问 ThinkGem 官方博客
  • 点击进入,下拉查看动态
官方网站
    • 平台简介
    • 架构特点
    • 技术选型
    • 功能介绍
    • 安装部署
    • 常见问题
    • 目录结构
    • 更新日志
    • Vue 文档
    • BPM 文档
    • Cloud 文档
V5 演示
Vue 演示
💖联系
  • 我要提意见、文档纠错
  • JeeSite 代码库, 请⭐Star关注
  • JeeSite Vue 代码库, 请⭐关注
  • Spring Cloud 微服务架构
  • JeeSite 手机端/移动端
  • AI + RAG + CMS 人工智能
  • Flowable 中国式工作流
  • OAauth2 统一认证服务器
  • 政务内外网环境中间件
  • 访问 ThinkGem 官方博客
  • 点击进入,下拉查看动态
  • 快速了解

  • 后端开发手册

    • 快速开始、安装部署
    • 代码生成、表结构 ER 图
    • 持久层、@Table、多数据源
    • 业务层、数据权限、库事务
    • 控制层、功能权限、Shiro
    • 后端工具类、Utils、国密
    • API 接口开发、Vue 接口
    • ★ 常见问题 ★
      • 部署与环境
      • 缓存与会话
      • 其它问答
  • Vue前端手册

  • 经典前端手册

  • 扩展功能专题

  • 云服务技术架构

  • 技术支持与服务

使用 JeeSite 过程中的 ★ 常见问题 ★

# 部署与环境

  • 下载不到 jeesite-xxx.jar 依赖包:有可能是您的 Maven 配置文件 setting.xml 里添加了 mirror 导致的问题,请删除这些配置,再尝试执行 /web/bin/package.bat 脚本,预先下载依赖 jar 包即可。

  • 如果遇到 IDEA 下不编译,可以尝试 File -> Settings -> Build -> Build Tools -> Maven -> Maven home directory 选择 Bundled(Maven3) 选项,还原默认,因为 IDEA 匹配的 Maven 版本耦合度要求较高,建议使用自带的,如果指定了其它 Maven home 可能会导致 IDEA 调用 Maven 报错,导致编译错误。

  • 如果遇到 Could not transfer artifact xxx from/to maven-default-http-blocker (http://0.0.0.0/) 错误,需要手动删除 settings.xml 里的 id 为 maven-default-http-blocker 镜像,因为 maven 3.8 版本后增加了这个镜像,导致的请求错误;IDEA 下请打开 IDEA 所在安装目录,找到 \plugins\maven\lib\maven3\conf\settings.xml 文件,并删除 maven-default-http-blocker 镜像配置。

  • 如果遇到 PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException 这个错误一般 jdk 的问题,使用 openjdk 再试下。

  • 国内 Maven 私服:官方已将 v4.1.8 及以上版本的 Maven 仓库已迁移到国内仓库,从旧版升级上来的用户请更新 /parent/pom.xml 和 /web/pom.xml 最下方的 repositories 和 pluginRepositories 的仓库地址为最新的仓库配置地址代码。已付费用户,请使用官方提供的 Maven 私服工具。

  • IDEA 中提示 NoClassDefFoundError: javax/servlet/ServletOutputStream 错误,您只需要修改 web 项目下的 pom.xml,注释掉 spring-boot-starter-tomcat 的 <scope>provided</scope> 部分改为 <scope>compile</scope> 即可。

  • 出现 NoSuchMethodError 错误,一般是依赖包版本冲突,请 Maven 依赖分析,是否有多个依赖版本导致覆盖,Eclipse 下在 web 项目上右键,选择菜单 -> Maven -> Update Project...(或按Alt+F5) -> 点击 Select All 按钮 -> 选择 Force Update of Snapshots/Releases 复选框 -> 点击OK按钮即可;IDEA 下点击 Maven 选项卡的 Reload All Maven Projects 按钮。

  • MySql 执行 init-data.bat 初始化数据失败,您可尝试设置下 my.ini 给 [mysqld] 增加如下配置:

sql_mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
1
  • MySql 下如果遇到 ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes. 错误,请在 my.ini 中加入如下配置:(也可将忽略这个错误,仅会影响查询当前节点并包含所有下级节点的一点性能)
a)打开 my.ini 给 [mysqld] 增加如下配置:

innodb_large_prefix = ON
innodb_file_format = Barracuda
innodb_file_per_table = ON

b)并修改报错的建表语句后面加上:

ENGINE=InnoDB row_format=DYNAMIC;

c)若没有修改my.ini的权限也可以使用命令查看参数和设置参数:

show global variables like "innodb_large_prefix";
show global variables like "innodb_file_format";
show global variables like "innodb_file_per_table";
set global innodb_large_prefix=ON;
set global innodb_file_format=Barracuda;
set global innodb_file_per_table=ON;

d) 数据库编码类型改为 utf8,非 unicode
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  • MySql 下报 You can't specify target table 'xxx' for update in FROM clause 错误,这是在Mysql的一个BUG,影响版本 MySql 5.7.6 到 5.7.10 【参考 (opens new window)】,并避开此版本,升级MySql数据库,即可解决。

  • 若在初始化每一行语句的都报事务相关的错。MySql下报 The command cannot be executed when global transaction is in the ACTIVE state,Oracle下报 SQLSyntaxErrorException: ORA-02089: COMMIT 不允许在附属会话中 错误。请检查设置 jdbc.jta.enabled=false 是否关闭后再进行尝试导入。

  • 启动报 UnsatisfiedLinkError 错误,如果您是在 Eclipse 手动部署到 Tomcat 服务,请打开 Servers 选项卡,双击您新增的 Tomcat 服务,进入设置,找到 Server Options 给以下选项 Serve models without publishing 和 Pushlish module contexts to separate XML files 打钩即可

  • 修改文件都需要重启比较麻烦,其实不是这样的,使用 Debug 运行系统,除非改变类结构(新增java类,新增属性或方法)才需要重启;其它情况(修改java类内的方法,修改视图文件,修改静态文件)下都不需要重启的。另外推荐使用 JRebel 热部署插件,可动态加载类结构。不建议使用 spring-boot-devtools 插件。

  • IntelliJ IDEA 中不能自动编译,修改类或资源文件后必须重启才生效,设置方法:IDEA (opens new window)、IDEA 2020 (opens new window)

  • 设置 yml 里的参数后没有生效:检查您的yml格式是否正确、前面必须是空格(下级缩进为2个空格)、不能是Tab符号、检查父级选项是否打开、yml语法格式文档:http://www.ruanyifeng.com/blog/2016/07/yaml.html (opens new window)

  • 自己新建的模块,为什么打包的时候,提示找不到我新增模块的类?是依赖问题。解决方法:先打包依赖项目,就是您自己新建的模块 mvn install 安装到本地 Maven 仓库,再打包被依赖项目。建议,将您新建的模块加入 /modules/pom.xml 或 /root/pom.xml 模块里,打包项目的时候,直接运行 /root/bin/backage.bat 一键打包即可。

# 缓存与会话

  • 使用缓存工具类 CacheUtils 过程中,当设置 timeToLiveInSeconds 时报错 Region [sysCache] TTL 3600 not match with 60?原因是指定的缓存名称的超时时间,必须和初次使用的超期时间一致,如果您启用了 Redis 并在 CacheUtils.put("缓存名称", key, value,60) 前面,率先调用了 CacheUtils.get("缓存名称", key) 系统就会初始化一个空缓存,这个空缓存的初始值是 3600,解决办法:CacheUtils.get("缓存名称", key, defaultValue, 60) 加 TTL 参数;另外一种情况如果您调用的是 SysCacheUtils 设置的缓存,其实是存储到了 sysCache 缓存名称里了,这个缓存是使用内置的,启动系统的时候就已经初始化了;我们建议您从 yml 里设置 j2cache.caffeine.region.缓存名称 的超时时间(3600 就是默认的超时时间)方便配置化管理。

  • 缓存 CacheUtils 的 timeToLiveInSeconds 参数,是从写入时间,还是最后访问时间开始计算?一级缓存使用的 caffeine.expireAfterWrite 所以是从写入时间开始计算,二级缓存是 Redis 管理的,默认也是写入时间开始计算。

  • 为什么 Redis 存储的数据没有设置上过期时间?Redis 默认存储模式为 hash 模式,因为 hash 存储不支持对 Key 指定过期时间,所以需要你设置 j2cache.redis.storage 存储模式为 generic,将 Key 以缓存级别存储。并设置 j2cache.broadcast.cache_clean_mode 缓存清理模式,设置为 active 主动清除模式,当二级缓存过期时,主动通知各节点清除。如果对缓存过期要求较高,还可以设置为 blend 双模式,当一级缓存或二级缓存过期时,主动通知各节点清除。

  • 多个项目共用一个 Redis 到时候,如何区分?可设置 j2cache.redis.channel 和 j2cache.redis.namespace 参数为不同的名称即可。

  • 为何设置 session.sessionTimeout 会话超时时间大于30分钟将无效?因为会话是由 J2Cache 缓存管理的,J2Cache 默认有个缓存超期时间,所以您还需要设置 j2cache.caffeine.region.sessionCache 最大个数和超时时间,v4.2 之前版本打开 j2cache.properties 属性文件进行设置。v4.4.0 或 v5.0.1 及以后版本,新增了根据设备,设置独立缓存超时时间,如 session.pcSessionTimeout 为 PC 端超时时间,session.mobileAppSessionTimeout 为手机端超时时间。

  • 如果您一个域名下部署了多个项目,可能会导致登录一个项目,另一个项目的会话被挤下的问题?这是因为 Cookie 的 Session 名称冲突原因,您只需要修改 application.yml 里的 session.sessionIdCookieName 值为,多个项目不一样的就可以。

# 其它问答

  • 如果 erm 文件打不开,使用 Eclipse 安装 ERMaster 插件,菜单 Help -> Install New Software -> Work with:填写 https://jeesite.com/ermaster 回车 -> 取消 Contact all update site... 复选框 -> 取消 Group items by category 复选框 -> 点击 Select All -> 点击 Next 直到 Finish 按钮;也可以手动下载 https://gitee.com/thinkgem/ermasterr (opens new window) 代码仓库到本地磁盘,在 Work with 中,直接填写 代码仓库路径下的/ermasterr/updatesite 目录,进行安装。具体详见:https://jeesite.com/docs/code-gen/ (opens new window)

  • 视图文件的全局变量有 ${ctx}、${ctxPath}、${ctxAdmin}。ctxPath 是 context-path 就是项目路径(如:/js);ctxAdmin 是 yml 里配置的 adminPath(如:/a);如果当前页面在 /a 下 ctx 等于 ctx+ctxAdmin(如:写 ${ctx} 结果就是 /js/a)

  • 视图文件中 ${ctx} 和 ${ctxStatic} 是在哪里定义的,怎么添加新变量?https://gitee.com/thinkgem/jeesite5/issues/IICBF (opens new window)

  • 登录后菜单不见了,菜单状态自动变为 2 停用状态?请检查下菜单归属的模块对应的状态是什么,归属模块指定的class必须是一个存在的class,如果不存在,模块状态会为“未安装”。所以菜单对应模块状态必须为“启用”才可以,否则启动系统时会自动设置菜单的状态停用。如果不需要此特性,您也可以关闭它:menu.updateStatusByModuleStatus=false

  • 菜单权重是什么,添加的默认权重菜单,超级管理员怎么看不到:【内置功能】 搜索:菜单权重

  • 新建用户后的密码是多少?系统默认密码是123456。为了方便HR进行管理用户,不需要手动去设置一个密码,系统会自动默认,您也可以从参数设置菜单中找到sys.user.initPassword修改初始密码。

  • 从数据库里修改密码后为什么没有生效?因为有系统用户缓存,如果使用 system 无法登录系统,需要重启服务和清理Redis缓存即可生效,如果可以登录,进入缓存管理菜单,点击清理缓存即可。

  • 为什么当 Dao 调用,会加一个 status != 1,Service 调用,会加一个 status = 0?如果您的表中有 status 这个字段的时候就会默认加上,是因为大多数业务系统 Dao 调用都需要排除逻辑删除的数据,Service 调用查询正常的数据,为节省手动调用的麻烦。在特殊业务场景下,如果不需要添加状态条件,可以手动调用 sqlMap.getWhere().disableAutoAddStatusWhere() 进行状态查询条件即可,如果想使用 Service 查询非删除的数据,则调用 entity.setStatus("") 将状态设置为空字符串即可。

  • 如果您开启了多租户,就会默认增加 corp_code 这个条件,有些情况需要管理员看全部数据,这时候,您可以调用 sqlMap.getWhere().disableAutoAddCorpCodeWhere() 方法就不会默认添加这个字段了。

  • 文件上传按钮点击没反应,这个可能是因为您的窗口位移或上传控件显示隐藏造成的,在位移或显示后,调用 window.webuploaderRefresh(); 即可刷新按钮控件位置。

  • 主子表的子表,第一次点击提交按钮时,子表数据不能提交到后台(子表属性没有添加 xxxList[i].xxxx 前缀);第二次点击提交按钮时,才能提交后台。这是因为在初始化 dataGrid 时会先去绑定表单 submit 事件,执行 dataGrid 的 updateListFieldName 方法,然后在进行提交。如果您将 validate 绑定表单事件放到 dataGrid 初始化前面去执行,就不会先去执行 updateListFieldName 所以造成了,第一次没有生效。解决方法:将 validate 代码,移动到 dataGrid 代码后面。

  • 为什么 “作业监控”、“消息推送”、“国际化管理” 等功能菜单,显示 404 页面,是因为有些功能默认是没有开启的。您需要打开 application.yml 配置文件开启对应设置,如:web.core.enabled=true、job.enabled=true、msg.enabled=true、lang.enabled=true 等。

  • Spring Boot 上传文件报错:java.io.IOException: The temporary upload location [xxx] is not valid,是因为:服务器内未查到指定目录。在 application.yml 配置文件加入 spring.servlet.multipart.location=/tmp/jeesite-tmp 配置,指定您的服务器临时目录即可

  • 为什么在线预览打不开,提示 “An error occurred” 错误。若您没有配置 LibreOffice,则此功能默认使用的微软公司 Office Web Viewer (opens new window) 服务,需要将项目部署到外网域名默认端口才可以使用该功能。

  • 如果数据表格使用复选框的时候出现重复的参数提交,请尝试将 $('#dataGrid').jqGrid('setGridParam', {postData: {}}); 加入到 ajaxSuccess 事件里。

  • 为何我下载的代码没有顶部菜单?这个可以在 “参数设置” 菜单里找 “sys.index.menuStyle” 参数,设置为 “1” 即可将一级菜单显示到顶部。

  • 下载文件提示 “文件已丢失或不存在”,该问题说明下载的文件没有在磁盘上,上传的文件默认存储在 webapp 下,有可能是您通过 IDE 多次部署的时候,清理了原部署文件,里面可能就包含已上传的文件。建议您修改 application.yml 里的 file.baseDir 指定一个绝对路径即可解决问题。

  • 点击链接浏览器返回了 JSON 字符串,请按 F12 打开浏览器控制台,检查当前页面是否有 js 错误,若有根据情况解决,若没有错误,检查链接绑定 js 方法是否对 JSON 数据进行正确处理。

  • 资源定义 Controller 应该返回一个视图页面,但返回了 JSON 字符串。一般这个问题开发环境正常,部署到正式上出现这个问题,问题原因是 Controller 返回的视图路径不对,导致返回了默认视图(JSON)。由于开发环境大多数是 Windows 系统,是不区分路径和文件名大小写的,发布到 Linux 上,文件系统是区分大小写的,大小写敏感的,导致找不到视图文件。出现这个问题时,请仔细检查视图文件路径是否匹配。

  • 提示“403 - 您的操作权限不足”,说明对应的 URL 当前用户没有权限访问,检查 Controller 的映射方法上的 @RequiresPermissions 注解,是否在 “菜单管理” 里的 “权限字符串” 中配置了,并且当前用户对应的角色是否拥有该权限菜单。

  • 我自己给绑定的弹窗事件,为什么会多打开一个页签?系统默认会绑定 class 里包含 addTabPage 或 btnList 或 btnTool 的标签进行弹窗操作,如果不需要默认弹窗可以删除这些名字即可。

  • Tomcat 部署下 SSO单点登录、OAuth2登录、无条件登录等方式,出现 login 无限跳转,但使用 Application.java 运行时正常的。请检查是否有多个类继承 SpringBootServletInitializer ,否则会造成 Servlet 容器多次重复加载。

进入 JeeSite 源码仓库页面,点击右上角 ⭐ Star 加星关注。

← API 接口开发、Vue 接口 快速开始、安装部署→

联系我们:s.jeesite.com  |  微信号:jeesitex  |  邮箱:jeesite@163.com
© 2013-2025 济南卓源软件有限公司 版权所有 | Theme Vdoing

请关注 JeeSite 微信公众号,了解最新动态

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式