Memory River

记忆河,记今日之事忆往昔之流

Linux中MySQL数据库的时间相差13个小时

在做一个项目中,使用的是Linux系统,yun安装了MySQL5.7,在Linux上跑一个springboot的工程,使用JDK8,发现页面数据库保存的时间格式的数据比传入的时间相差13个小时。以前一般都是碰到相差8个小时的情况,一直以为是相差8个小时,奈何仔细一看竟是13小时!敏锐的猿类嗅觉判断这种情况肯定是时区的问题。开始有了怀疑的对象。 怀疑:1、Linux系统时区。2、mysql时区。Linux系统时区击破怀疑1,Linux时区。 连上服务器,输入命令 date -R ,查看系统时间与时区: 从上图可以得出,Linux的系统时区是正确的。怀疑1不成立。mysql时区 连上mysql,输入命令 show variables like '%time_zone%' ,查看MySQL的时区: 上图可以看出来,MySQL使用的是系统时区,而系统时区验证过是正确的。郁闷良久。本着死马当作活马治,也没什么可以怀疑的对象了,就试试把mysql的时区设为东八区,明确指定 MySQL 数据库的时区,不使用引发误解的CST。输入命令 vim /etc/my.cnf ,编辑配置文件,并加入 default_time-zone='+08:00' :按Esc进入命令模式,输入 :wq 并回车保存退出vim。然后重启MySQL服务。再次输入命令 show variables like '%time_zone%' ,查看MySQL的时区:OK,测试一下工程的时间保存,问题得到解决。完美!
    2019-10-16 23:11:45    ·    1       0

SpringBoot设置访问默认首页

在SpringBoot的工程项目中,是没有配置工程的xml文件,SpringBoot官方推荐使用Thymeleaf模板,我也是使用了这个view渲染引擎。1.若采用渲染引擎即JSP等VIEW渲染技术,可以通过addViewController的方式解决。@Configuration public class DefaultView extends WebMvcConfigurerAdapter { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/Blog").setViewName("forward:index.jsp"); registry.setOrder(Ordered.HIGHEST_PRECEDENCE); super.addViewControllers(registry); } } 或者@Controller @RequestMapping("/") public class IndexController { @RequestMapping("/Blog") public String index(){ return "forward:index.html"; } } 2.若完全采用前后端分离的模式即前端所有资源都放在addresourceHandler配置的路径下@Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/temples/**") .addResourceLocations("classpath:/temples/"); super.addResourceHandlers(registry); } 此时不能通过配置addViewController的方式解决,会抛出异常javax.servlet.ServletException: Could not resolve view with name 'forward:/temples/index.html' in servlet with name 'dispatcherServlet' 只能通过response.redirect(“temples/index.html”)的方式重指向默认主页@Controller @RequestMapping("/") public class IndexController { @RequestMapping("/") public void index(HttpServletResponse response) throws IOException { response.sendRedirect("/temples/index.html"); } }
    2019-10-16 08:31:55    ·    5       0

Nginx 使用 gzip 的配置

在Nginx的配置文件nginx.cof的http类加入下面代码: gzip on; #开启或关闭gzip on off gzip_disable "msie6"; #不使用gzip IE6 gzip_min_length 100k; #gzip压缩最小文件大小,超出进行压缩(自行调节) gzip_buffers 4 16k; #buffer 不用修改 gzip_comp_level 3; #压缩级别:1-10,数字越大压缩的越好,时间也越长 gzip_types text/plain application/x-javascript application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #压缩文件类型 gzip_vary off;#跟Squid等缓存服务有关,on的话会在Header里增加 "Vary: Accept-Encoding"ru 如图:
    2019-10-16 08:17:08    ·    2       0

nginx location配置详细解释

一、Location语法语法规则: location [=|~|~*|^~] /uri/ { … }= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。~ 开头表示区分大小写的正则匹配~* 开头表示不区分大小写的正则匹配!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则/ 通用匹配,任何请求都会匹配到。多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。二、ReWrite语法last – 基本上都用这个Flag。break – 中止Rewirte,不在继续匹配redirect – 返回临时重定向的HTTP状态302permanent – 返回永久重定向的HTTP状态3011、下面是可以用来判断的表达式:-f和!-f用来判断是否存在文件-d和!-d用来判断是否存在目录-e和!-e用来判断是否存在文件或目录-x和!-x用来判断文件是否可执行2、下面是可以用作判断的全局变量例:http://localhost:88/test1/test2/test.php$host:localhost $server_port:88 $request_uri:http://localhost:88/test1/test2/test.php $document_uri:/test1/test2/test.php $document_root:D:\nginx/html $request_filename:D:\nginx/html/test1/test2/test.phpsa 三、Redirect语法server { listen 80; server_name start.igrow.cn; index index.html index.php; root html; if ($http_host !~ "^star\.igrow\.cn$" { rewrite ^(.*) http://star.igrow.cn$1 redirect; } } 四、防盗链location ~* \.(gif|jpg|swf)$ { valid_referers none blocked start.igrow.cn sta.igrow.cn; if ($invalid_referer) { rewrite ^/ http://$host/logo.png; } } 五、根据文件类型设置过期时间location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ { if (-f $request_filename) { expires 1h; break; } } 六、禁止访问某个目录location ~* \.(txt|doc)${ root /data/www/wwwroot/linuxtone/test; deny all; } 附:一些可用的全局变量$args $content_length $content_type $document_root $document_uri $host $http_user_agent $http_cookie $limit_rate $request_body_file $request_method $remote_addr $remote_port $remote_user $request_filename $request_uri $query
    2019-10-16 08:11:22    ·    1       0

springboot在1.5.X和2.X版本的上传文件大小限制设置方法

springboot 1.5.X系列处理方式第一种、直接在springboot的启动类里加入下面的代码。在配置类中配置@Bean,注意当前配置类上需要加注解@Configuration/** * 文件上传配置 * @return */ @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); //文件最大 factory.setMaxFileSize("10240KB"); //KB,MB /// 设置总上传数据总大小 factory.setMaxRequestSize("102400KB"); return factory.createMultipartConfig(); } 第二种、在application.properties中添加如下配置信息配置文件直接配置,与springboot2.x版本一致application.properties spring.servlet.multipart.max-file-size=20MB spring.servlet.multipart.max-request-size=20MB application.yml spring: servlet: multipart: max-file-size: 20MB max-request-size: 20MB maxFileSize 是单个文件大小maxRequestSize是设置总上传的数据大小这就可以了。根据自己需求定义吧,只能是MB和KB两种类型,字母大小写随意,Long类型可以的另外这是MultipartConfigFactory类中的转换,可以瞅一眼Springboot 2.X系列配置第一种:在配置文件中添加配置@Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); //文件最大10M,DataUnit提供5中类型B,KB,MB,GB,TB factory.setMaxFileSize(DataSize.of(10, DataUnit.MEGABYTES)); /// 设置总上传数据总大小10M factory.setMaxRequestSize(DataSize.of(10, DataUnit.MEGABYTES)); return factory.createMultipartConfig(); } 第二种配置文件直接配置application.properties spring.servlet.multipart.max-file-size=20MB spring.servlet.multipart.max-request-size=20MB application.yml spring: servlet: multipart: max-file-size: 20MB max-request-size: 20MB
    2019-09-10 21:36:30    ·    35       0

谈谈$(document).ready和window.onload的区别

$(document).ready和window.onload,这两个都是在页面加载完执行的函数,大多数情况下可以随意使用,差别不大,但总是有区别的。$(document).ready:是在页面DOM结构绘制完毕后就执行。 举个栗子:页面中只有有img标签使用远程图片,那么当img标签加载完毕之后就会马上执行ready函数,并不会等img的远程图片加载完成。并且页面可以写多个ready函数。window.onload:是页面所有元素都加载完毕,包括图片等所有元素。只能执行一次。 综上,$(document).ready的执行时间要早于window.onload。
    2019-07-28 13:05:44    ·    126       0

bootstrap的modal模态框点击遮罩层不会关闭modal弹窗

bootstrap提供了一个很好看很好用的模态弹窗modalmodal的弹出关闭方法如下:$('#id').modal('show'); $('#id').modal('hide'); 但是点击背景就会关闭modal,现在做的效果要求除非用户点击“取消”按钮才会关闭modal,否则不会关闭。$("#id").modal({backdrop:'static', keyboard: false}); 或者直接在模态弹窗的div上设置以下属性,也可以达到点击遮罩层不关闭。keyboard:false时,esc键盘不关闭。data-backdrop="static" data-keyboard="false"backdrop:static 官方使用api文档:https://getbootstrap.com/docs/4.0/components/modal/
    2019-07-25 17:00:43    ·    676       0

thymeleaf模板引擎字符串Strings常见的使用方法

判断是不是为空:null:<span th:if="${name} != null">不为空</span> <span th:if="${name1} == null">为空</span> 判断是不是为空字符串: “”<span th:if="${#strings.isEmpty(name1)}">空的</span> 判断是否相同:<span th:if="${name} eq 'jack'">相同于jack,</span> <span th:if="${name} eq 'ywj'">相同于ywj,</span> <span th:if="${name} ne 'jack'">不相同于jack,</span> 不存在设置默认值:<span th:text="${name2} ?: '默认值'"></span> 是否包含(分大小写):<span th:if="${#strings.contains(name,'ez')}">包ez</span> <span th:if="${#strings.contains(name,'y')}">包j</span> 是否包含(不分大小写)<span th:if="${#strings.containsIgnoreCase(name,'y')}">包j</span> 同理。。。下面的和JAVA的String基本一样。。。。${#strings.startsWith(name,'o')} ${#strings.endsWith(name, 'o')} ${#strings.indexOf(name,frag)}// 下标 ${#strings.substring(name,3,5)}// 截取 ${#strings.substringAfter(name,prefix)}// 从 prefix之后的一位开始截取到最后,比如 (ywj,y) = wj, 如果是(abccdefg,c) = cdefg//里面有2个c,取的是第一个c ${#strings.substringBefore(name,suffix)}// 同上,不过是往前截取 ${#strings.replace(name,'las','ler')}// 替换 ${#strings.prepend(str,prefix)}// 拼字字符串在str前面 ${#strings.append(str,suffix)}// 和上面相反,接在后面 ${#strings.toUpperCase(name)} ${#strings.toLowerCase(name)} ${#strings.trim(str)} ${#strings.length(str)} ${#strings.abbreviate(str,10)}// 我的理解是 str截取0-10位,后面的全部用…这个点代替,注意,最小是3位
    2019-07-11 09:15:14    ·    350       0

阿里云CentOS挂载新数据盘

文记录下在阿里云 CentOS 服务器下安装和挂载新的数据盘的详细命令和步骤:1、查看磁盘列表fdisk -l 2、分区数据盘fdisk /dev/vdb 创建一个单分区数据盘,依次执行以下命令: 输入 n 并按回车键:创建一个新分区。 输入 p 并按回车键:选择主分区。因为创建的是一个单分区数据盘,所以只需要创建主分区。 说明:如果要创建 4 个以上分区,您应该创建至少一个扩展分区,即选择 e(extended)。 输入分区编号并按回车键。因为这里仅创建一个分区,可以输入 1。 输入第一个可用的扇区编号:按回车键采用默认值 1。 输入最后一个扇区编号:因为这里仅创建一个分区,所以按回车键采用默认值。 输入 wq 并按回车键,开始分区。3、重新查看磁盘列表fdisk -l 4、格式化分区此数据盘被格式化成 ext4 文件格式。mkfs.ext4 /dev/vdb1 5、将设备挂载到指定的目录下mount /dev/vdb1 /data 6、保存到文件系统表 /etc/fstab 当系统重新启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。echo /dev/vdb1 /data ext4 defaults 0 0 >> /etc/fstabji 就这样就完成了数据盘的挂载了。使用命令 df -h 查看磁盘情况。
    2019-07-10 09:04:14    ·    684       0

Linux vim编辑器命令

保存命令按ESC键 跳到命令模式,然后::w 保存文件但不退出vi:w file 将修改另外保存到file中,不退出vi:w! 强制保存,不推出vi:wq 保存文件并退出vi:wq! 强制保存文件,并退出viq: 不保存文件,退出vi:q! 不保存文件,强制退出vi:e! 放弃所有修改,从上次保存文件开始再编辑
    2019-07-06 11:59:19    ·    127       0