技术问题小总结1

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
日志服务 SLS,月写入数据量 50GB 1个月
全局流量管理 GTM,标准版 1个月
简介: 前言 做项目是提高技术最高效的手段,这句话从某种程度上而言真是太对了。因为不论是大项目还是小项目,不论是正式项目还是个人业务项目,只要在做,就总能遇到各种各样的问题,从而能直接着重于某个点去学习。以下便是最近做业余小项目-tzxbloghttps://github.com/tuzongxun/tzxblog时遇到的一些问题和解决办法记录。

前言

做项目是提高技术最高效的手段,这句话从某种程度上而言真是太对了。
因为不论是大项目还是小项目,不论是正式项目还是个人业务项目,只要在做,就总能遇到各种各样的问题,从而能直接着重于某个点去学习。
以下便是最近做业余小项目-tzxbloghttps://github.com/tuzongxun/tzxblog时遇到的一些问题和解决办法记录。

springboot日志的问题

问题描述

springboot默认的是logback日志框架,不做任何配置的情况下,日志输出在控制台。
我想要通过配置把日志内容输出到指定的文件中,于是做了如下的配置:


logging.level.root=warn
logging.level.com.tzx.blog=warn
logging.file=mylog.log
logging.path=C:/Users/tzx/Desktop/mylog/

我下意识的认为logging.file是日志文件名,logging.path是日志文件输出的目录。
但是实际运行时发现我想要的C:/Users/tzx/Desktop/mylog/mylog.log文件没有出现。

问题分析

经查阅springboot官方文档,发现了如下的一些内容:
logging

很显然,官方文档中并没有我这种配置。
根据上边的描述可知这里的日志有三种配置方式:

  1. logging.filelogging.path都不做任何配置,则默认日志输出到控制台
  2. 只配置logging.file,如果这里只是一个文件名,则会在当前目录下输出一个日志文件;如果是一个绝对路径下的文件名,则会在生成一个该绝对路径的文件
  3. 只配置logging.path,在配置的目录下生成一个spring.log日志文件

解决办法

根据上边分析,我选择的解决方式如下:
去掉logging.path,直接在logging.file中配置成C:/Users/tzx/Desktop/mylog/mylog.log

markdown语法解析

问题描述

由于之前写博客时,那些博客网站基本都支持markdown语法,经过使用后,发现确实很方便,于是决定自己写的这个博客系统也使用markdown。

问题分析

markdown语法解析需要引入markdown相关的js,并使用该js中定义的方法格式化博客内容。

解决办法

引入showdown.min.js文件,同时使用如下自定义代码格式化博客内容:


var text = data.blogContent;
var converter = new showdown.Converter();
var html = converter.makeHtml(text);
document.getElementById("curcontent").innerHTML = html;

jpa关联查询的问题

问题描述

博客中实体类的初始设计是单独的userModelblogModel,如果要在显示某篇博客时显示出作者名称等信息,则需要根据blog表中的userId字段再查user表。

问题分析

jpa里边也可以自定义sql,但是总感觉这样会很麻烦。
而且从某种程度而言,jpa应该不至于连这么简单的需求都无法处理,于是经过查找,得到了关联关系的解决办法。

解决办法

blog表和user表都保持不变,在blog表中有一个字段userid用来保存作者的id。
userModel保持不变,在blogModel中userId的属性使用如下定义:


@JoinColumn(name = "user_id")
@ManyToOne
private Userinfo userinfo;

@JoinColumn注解指定了关联字段,@ManyToOne声明关联关系是多对一。
之后使用jpa的查询方法,例如userDao.findAll(),进行查询时,每一条blog记录中都会带上相应的user对象,也就只需要一次查询数据库就够了。

使用thymeleaf模板后,不能返回对象给前台

问题描述

使用thymeleaf模板渲染页面的时候,spring的controller的方法只需要return一个html的页面文件名就行了,例如index.html,就写成return "index";
使用过程发现这里不是只需要写成return "index",而是必须写成这样,还必须有这个页面存在,否则报错。
例如我本来想在某个方法中返回一个blog对象给前台,但是向这个方法发起请求时后台报错如下:


org.thymeleaf.exceptions.TemplateInputException: Error resolving template
"tzxblog/openBlog", template might not exist or might not be accessible by any of
the configured Template Resolvers

问题分析

看到上边的问题,我猜测可能是用了模板以后,会对所有return的内容进行解析渲染,但是对象是不能直接渲染成html的,因此就解析出错。
这个时候我有两种解决办法,一种是把数据放到modelMap中,然后使用类似th:text这样的方式取得数据,之后还是return回一个html页面。
但是这个地方我不想这样,因为我用了ajax请求,就想要在ajax中获取到返回的数据后进行一定的前台处理,因此就必须要找到能让我返回对象的办法,好在后来在查询的过程中,从其他地方获取到了对的解决办法。

解决办法

在需要返回对象或者普通数据的方法上加上@ResponseBody注解,有了这个注解以后,thymeleaf模板就不会再做其他的处理,也就相当于暂时和thymeleaf没了关系。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
机器学习/深度学习 人工智能 Go
行业趋势与面试准备:了解最新技术对面试的影响
行业趋势与面试准备:了解最新技术对面试的影响
109 0
|
监控 安全 Cloud Native
阿里产品专家:高情商的技术人,如何做沟通?
不愿沟通是固执,不会沟通是傻瓜,不敢沟通是奴隶。——德拉蒙德
阿里产品专家:高情商的技术人,如何做沟通?
|
存储 SQL 前端开发
我是如何失去团队掌控的?一个技术总监的反思
我是一个不合格的技术总监,在过去的快三个月里。我带着从40多个人的研发团队(包含需求、开发、测试)里抽调出20多个人去为公司开疆拓土。在这快三个月中,我们一起奋战奋斗拼搏。在过程中,我通宵时间超过半个月,干到凌晨4/5点的日子数不胜数,干到凌晨1/2点日子更是习以为常。整个团队绝大多数人近乎两个月没有周末,辛苦异常,是实实在在的高峰体验。但是三个月后,我带着失败和一身的惨痛教训回到公司。
|
项目管理
漫谈项目管理之:面对严重的技术问题,你应该怎么做?
  接到紧急电话,你匆忙的赶到用户现场。初步分析后,你大吃一惊:可以确定,这是一个方案设计阶段的重大失误,现在暴露出来,导致项目中的所有工作全面停顿。   此时此刻,作为项目经理,你马上要做那些事情?   你想到了什么? 组织技术人员进行讨论,对技术问题进行分析?非常好,这是必须要做的工作。
1537 0
|
监控
最近的几个技术问题总结和答疑(九)
    最近的琐事比较多,而提问题的朋友还是不少,很多消息都没有来得及回复,各种事情一堆起来,不少问题想起来已经过了好几天了,所以还是来整理一篇技术问答为好。     首先是很多朋友问我关于半自动化搭建Data Guard的脚本,我写了几篇文章来介绍思路,自己也提了不少的改进,团队内部也沟通过了,一直迟迟没有发布出来是因为我觉得目前的实现方式可能对于我的工作能够极大提高,但是很多朋友使用的环境可能没有中控的概念,所以不是很通用,所以我想做一些改变,还有一个是里面的有些逻辑我想改改,至少简化一下。
927 0
|
测试技术 数据库
最近的几个技术问题总结和答疑(八)
今天的技术问答是刘晨兄的一个问题,提问来自于我新书中的一个实验,刘晨兄非常认真,对我书中的很多细节都进行了测试。 看到这个错误,如果出现end-of-file这类的错误信息,基本可以断定数据库实例是宕了。
941 0