实现if-else
<choose> <when test="item.tdName == 'hor_acceleration'"> '0' as horAcceleration, </when> <otherwise> hor_acceleration as horAcceleration, </otherwise></choose>
常用api整理
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArraypublic static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObjectpublic static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBeanpublic static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArraypublic static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合public static final String toJSON ...
容器滚动条出现的条件
容器出现滚动条的条件:1,容器有固定的高度,2,容器的内容高度,超出了容器的高度,如果容器未设定高度,则它会向父亲,祖先找到有高度的容器,并在其身上显示滚动条
批量插入和批量更新
批量插入<insert id="insertTgAfterCorrectData"> insert into dtjc_tg_after_correct_data( id, left_low ) values <foreach item="item" index="index" collection="list" separator=","> ( #{item.id}, #{item.left_low} ) </foreach> </insert>
批量更新更新多条数据,每条数据都不一样背景描述:通常如果需要一次更新多条数据有两个方式,(1)在业务代码中循环遍历逐条更新。(2)一次性更新所有数据(更准确的说是一条 ...
自适应宽度的input框
解决办法 1:div 的 contenteditable=”true”属性。能实现一行编辑。待解决的问题:需要禁止回车换行,同时还有编辑完之后光标不会回到最开始,光标会保留在你最后编辑的地方
<div class="dict_val1" contenteditable="true" id="lineLength"></div>
div[contenteditable] { height: 0.1458rem; line-height: 0.1458rem; /*重要*/ width: auto; min-width: 0.1458rem; white-space: nowrap; overflow: hidden; outline: none; /*重要*/ color: #001631; padding: 0 0.0677rem;}
开启编辑状态的话只需把 outline 的 none 去掉就行,改为默认状态或自定义属性如 outline:#00FF00 do ...
开启gzip配置
配置示例
server{ listen 9005; ## nginx监听端口号 #开启gzip gzip on; #vary header支持,该选项可以让前端的缓存服务器缓存经过gzip压缩的页面 gzip_vary on; #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取,默认值是0,不管页面是多大都进行压缩,建议设置成大于1K,如果小于1K可能会越压越大 gzip_min_length 612k; #压缩缓冲区大小,表示申请4个单位为16K的内存作为压缩结果的流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果 gzip_buffers 128 128k; #压缩比率,用来指定gzip压缩比, 1:压缩比最小,速度最快;9:压缩比最大,传输速度最快,但处理也最慢,也比较的消耗CPU资源 gzip_comp_level 9; #用来指定压缩的 ...
解决单页面应用,刷新后出现404或者404的错误
在 location 里加上 try_files $uri $uri/ /index.html;
具体配置如下:
server { listen 81; server_name project_mall; #charset koi8-r; #access_log logs/host.access.log main; location / { root study/project_mall; index index.html index.htm; # 解决单页面应用刷新出现403或者404错误 try_files $uri $uri/ /index.html; }}
部署前端项目
前端项目存储位置/usr/local/webserver/nginx/project/crtoms
配置 0(推荐)
server{ listen 9005; ## nginx监听端口号 location / { root project/crtoms; # project在ngxin目录下,和html同级 try_files $uri $uri/ /index.html; } # 前端代理 location /api/ { #api是同一请求后缀 proxy_pass http://192.168.10.235:8888/; #后台内网地址 }}
假设服务器 ip 为 192.168.10.234那么此时访问方式就是 http:192.168.10.234:9095/
配置 1
server{ listen 9005; ## nginx ...
openFeign的全方位简单讲解
OpenFeign 全方位讲解_Young 丶的博客-CSDN 博客_openfeign
收藏
Nginx 一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化…https://mp.weixin.qq.com/s/YhFaKTg5ZbzM8mkhclUnvQ
反向代理后端项目并配置跨域
后台服务占用端口为 9003,用本地的 9004 代理 9003 并且配置跨域
server{ listen 9004; ## nginx监听端口号 location / { proxy_pass http://127.0.0.1:9003; # 允许 所有头部 所有域 所有方法 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Headers' '*'; add_header 'Access-Control-Allow-Methods' '*'; # OPTIONS 直接返回204 if ($request_method = 'OPTIONS') { ...
配置视频播放
前提:nginx 需要安装 mp4 模块假设服务器 ip 为 192.168.10.234
播放 mp4 视频server { listen 80; location /securityMp4 { alias /home/DevelopKit/FILE/securityFile/; mp4; mp4_buffer_size 1m; mp4_max_buffer_size 2000m; # mp4_limit_rate on; # mp4_limit_rate_after 30s; limit_rate 260k; limit_rate_after 3m; }}
假设存在文件/home/DevelopKit/FILE/securityFile/a.mp4那么访问 192.168.10.234:80/securit ...
向静态类注入bean
方式1@Componentpublic class DtjcProjectGeneralReportUtil { @Autowired private IDataAnalysisService dataAnalysisService; private static IDataAnalysisService staticDataAnalysisService; @PostConstruct public void init() { staticDataAnalysisService = dataAnalysisService; } // 这里是静态方法,该方法请调用静态bean public static String getDtcjGeneralReportTestTaskId(String projectId) { String TestTaskId = ""; TestTaskId = staticDataAnalysisServic ...
配置文件下载,开启文件浏览列表
文件存储配置文件
server { listen 80; location /app { alias /usr/local/webserver/nginx/app/; autoindex on; #下面这个配置开不开启效果是一样的 #我还没发现有什么用 #建议先不加。 #猜测的应用场景:在网页上文件浏览时点击图片要求下载而不是预览就要打开下面的配置 #default_type application/octet-stream; } }
alias 指定虚拟目录autoindex on;打开目录浏览功能
假设服务器 ip 为 192.168.10.234那么访问 192.168.10.234:80/app/cgjc.apk 就能直接下载文件那么访问 192.168.10.234:80/app/cgjc-test.apk 就能直接下载文件
访问 192.16 ...
使用java代码控制事务
代码中控制事务的三种方式
编程式事务:就是直接在代码里手动开启事务,手动提交,手动回滚。优点就是可以灵活控制,缺点就是太麻烦了,太多重复的代码了。
声明式事务:就是使用 SpringAop 配置事务,这种方式大大的简化了编码。需要注意的是切入点表达式一定要写正确。
注解事务:直接在 Service 层的方法上面加上@Transactional 注解,个人比较喜欢用这种方式。
事务回滚的原因
在工作中,看过别人写的代码出现了事务不回滚的现象。当然,事务不回滚的都是采用的声明式事务或者是注解事务;编程式事务都是自己写代码手动回滚的,因此是不会出现不回滚的现象。
再说下声明式事务和注解事务回滚的原理:当被切面切中或者是加了注解的方法中抛出了 RuntimeException 异常时,Spring 会进行事务回滚。默认情况下是捕获到方法的 RuntimeException 异常,也就是说抛出只要属于运行时的异常(即 RuntimeException 及其子类)都能回滚;但当抛出一个不属于运行时异常时,事务是不会回滚的。
下面说说我经常见到的 3 种事务不回滚的产生原因:
(1)声明式 ...
事务的传播行为以及在spring中的配置
一、什么是事务传播行为?事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何运行。
例如:methodA 方法调用 methodB 方法时,methodB 是继续在调用者 methodA 的事务中运行呢,还是为自己开启一个新事务运行,这就是由 methodB 的事务传播行为决定的。
二、事务的 7 种传播行为Spring 在 TransactionDefinition 接口中规定了 7 种类型的事务传播行为。事务传播行为是 Spring 框架独有的事务增强特性。7 种:(required / supports / mandatory / requires_new / not supported / never / nested)
PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,这是最常见的选择,也是 Spring 默认的事务传播行为。(required 需要,没有新建,有加入)
PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务, ...
使用注解和拦截器实现登录验证
1、@LoginRequired 注解/** * 在需要登录验证的Controller的方法上使用此注解 */@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface LoginRequired {}
2、MyControllerAdvice@ControllerAdvicepublic class MyControllerAdvice { @ResponseBody @ExceptionHandler(TokenValidationException.class) public JsonResponse tokenValidationExceptionHandler() { return JsonResponse.loginInvalid(); } @ResponseBody @ExceptionHandler(ServiceException.class) ...
整合druid不支持批量更新的问题
轻骑兵的解决方式
注意 url 后面多了个 allowMultiQueries=true
spring: ################### mysql配置 ################### datasource: url: jdbc:mysql://123.123.122.138:3310/dtjc_sbgl_dev?autoReconnect=true&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2b8&allowMultiQueries=true username: root password: 123456a? db-name: dtjc_sbgl_dev filters: log4j,mergeStat driverClassName: com ...
使用poi导出带有数据的模版
@Overridepublic void downloadLjcjImportTemplate(String xianbie, String xingbie, HttpServletResponse response) { // 设置返回头 response.setHeader( "Content-disposition", "attachment;filename=" + new String(("路基u型槽沉降模版.xlsx").getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1)); // 从库里查询数据 QueryWrapper<TTzCjDmjcd> qw = new QueryWrapper<>(); qw.eq("xianbie", xianbie); qw.eq("xingbie", xingbie); qw.eq("jcd_ ...
动态加载服务器上的图片
<img src="/loadImg?path='xxx'" />
/** * IO流读取存在服务器上的图片 * * @return * @throws IOException */@RequestMapping(value = "/loadImg", method = RequestMethod.GET)public void loadImg(@RequestParam("path") String path, HttpServletResponse response) throws IOException { //这里省略掉通过id去读取图片的步骤。 File file = new File(path);//imgPath为服务器图片地址 if (file.exists() && file.isFile()) { FileInputStream in = null; Ou ...