首页 > 其他分享 >Halo自定义部分扩展

Halo自定义部分扩展

时间:2023-04-03 22:58:25浏览次数:40  
标签:set 自定义 utf8mb4 character 扩展 application JVM mysql Halo

简介

Halo是一款现代化的开源博客/CMS系统,前端由Vue,后端java开发的。我选择的原因是因为是java开发的,所以方便我自定义的扩展。

MinIO扩展

在我们写博客的时候经常会用到图片,Halo支持多种文件存储方式。这里我选择了MinIO,但是在使用的过程中发现了一个小的问题,它上传的文件是按照你文件的名称直接进行存储的,这就导致一个问题,重名的文件会被后面上传的文件替换。所以第一个我想改造的点就是,让我上传的文件能够自动重命名,这样就不会因为名称重复被替换。

先从github拉下源码找到MinIO上传文件的相关代码,如图:

我们只需要修改一个这个setFilename就好了,我这里直接简单的用uuid就好了。这样就完成了我的需求了。

接下来就是打包部署,由于我用的是docker的方式安装。所以先要打包成docker镜像。好在它本身附带了Dockerfile文件 执行执行
docker build -t halo:v1 .

然后再重新部署就好了

可以看到图片成功上传并且重命名了

Skywalking扩展

由于后期我相对Halo做一些扩展功能,所以我想引入链路追踪系统方便我在开发使用过程中排查错误。我这里选择Skywalking。
首先我想在请求的响应中加入traceid以便后续可以通过traceid去查询调用链路。

先引入所需要的依赖。

    implementation 'org.apache.skywalking:apm-toolkit-trace:8.7.0'

因为我们需要在每个请求中都加上traceid所以我们用filter来做

@Component
public class TraceResponseFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
                                    FilterChain filterChain) throws ServletException, IOException {
        try{
            //设置skywalking的traceId
            httpServletResponse.addHeader("traceId", TraceContext.traceId());
        }catch (Exception e){}

        filterChain.doFilter(httpServletRequest, httpServletResponse);
    }

}

想要使用skywalking还需要用到javaagent,所以我们在打包镜像的时候需要将agent一并打包到镜像中,所以我们还需要改造Dockerfile

FROM adoptopenjdk:11-jre-hotspot as builder
WORKDIR application
ARG JAR_FILE=halo*.jar
COPY ${JAR_FILE} application.jar
RUN java   -Djarmode=layertools   -jar  application.jar extract

################################

FROM adoptopenjdk:11-jre-hotspot
MAINTAINER johnniang <[email protected]>
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./



# JVM_XMS and JVM_XMX configs deprecated for removal in halov1.4.4
ENV JVM_XMS="256m" \
    JVM_XMX="256m" \
    JVM_OPTS="-Xmx256m -Xms256m" \
    TZ=Asia/Shanghai

RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo $TZ > /etc/timezone \

COPY agent /usr/local/agent

ENTRYPOINT java -Xms${JVM_XMS} -Xmx${JVM_XMX} ${JVM_OPTS}  -javaagent:/usr/local/agent/skywalking-agent.jar -DSW_AGENT_NAME=halo -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=ip:port -Djava.security.egd=file:/dev/./urandom org.springframework.boot.loader.JarLauncher

然后打包部署

可以看到我们的响应头中已经成功携带了traceid

复制traceid去平台查询

新增mysql主从复制

因为我博客的后台系统采用的是mysql作为数据存储的,mysql单节点的如果挂了有数据丢失的风险。所以我决定给mysql做一个主从同步,搭建mysql的主从同步也很简单只需要。修改主节点的my.cnf文件,重启服务。

[client]
default-character-set=utf8mb4
 
[mysql]
default-character-set=utf8mb4
 
[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
log-bin=mysql-bin-master 
server-id=1 

在另外一台主机上修改my.cnf文件把它作为从节点。

[client]
default-character-set=utf8mb4
 
[mysql]
default-character-set=utf8mb4
 
[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
server-id=2

然后重启mysql服务,在主节点mysql内执行

show master status;

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      629 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

再进去从节点的mysql内执行

mysql> CHANGE MASTER TO
    ->     MASTER_HOST='master_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS=recorded_log_position;

然后执行

START SLAVE;

这样我们mysql服务的主从复制就已经完成了

标签:set,自定义,utf8mb4,character,扩展,application,JVM,mysql,Halo
From: https://www.cnblogs.com/loveletters/p/haloExpansion.html

相关文章

  • Flask快速入门day02(1、CBV使用及源码分析,2、模板用法,3、请求与响应的基本用法,4、sessi
    目录Flask框架一、CBV分析1、CBV编写视图类方法二、CBV源码分析1、CBV源码问题2、补充问题3、总结三、模板1、py文件2、html页面四、请求与响应1、request常用方法2、response常用方法五、session及源码分析1、session的基本使用2、session源码分析六、闪现七、请求扩展Flask框......
  • flask CBV写法/中间件/异常捕获/请求与响应/session/请求扩展
    flaskcbv写法基于类的视图写法fromflaskimportFlask,requestfromflask.viewsimportMethodView,Viewapp=Flask(__name__)app.debug=True#必须要继承MethodView这个类来编写classLoginView(MethodView):defget(self):print(request.method)......
  • 【Flask】cbv源码分析 flask模板使用 flask请求与响应 session及源码分析 闪现flash
    目录上节回顾今日内容1cbv分析1.1源码分析2模板2.1app.py2.2index.html3请求与响应4session及源码分析4.1session的使用4.2源码分析4.3session执行原理5闪现6请求扩展练习上节回顾#1web框架 -django大而全-flask小而精-sanic-fastapi-同......
  • flask-day2——cbv源码分析、模版语法、请求与响应、session及源码分析、闪现、请求扩
    目录一、cbv源码分析1.1基于类的视图写法1.2源码分析1.3分析源码,查找不传别名的时候为什么函数名会变成别名1.4flask的路由注册使用装饰器,如果写了一个登录认证装饰器,那么应该放在路由装饰器上还是下?1.5dispatch_request讲解1.6知识点总结二、模板语法2.1py2.2html三、请......
  • 第六篇:自定义集合类型和结构体取代类
    第六篇:自定义集合类型和结构体取代类目录第六篇:自定义集合类型和结构体取代类一、自定义集合类型二、结构体取代类1make和new的区别2结构体取代类一、自定义集合类型集合是一个重要的数据结构,其中,集合中的元素不能重复;集合中的元素无序排列,由于go中没有集合元素,我们可以通过m......
  • 设计模式(三十一)----综合应用-自定义Spring框架-自定义Spring IOC-定义解析器、IOC容
    3定义解析器相关类3.1BeanDefinitionReader接口BeanDefinitionReader是用来解析配置文件并在注册表中注册bean的信息。定义了两个规范:获取注册表的功能,让外界可以通过该对象获取注册表对象。加载配置文件,并注册bean数据。/***@versionv1.0*@ClassName:BeanDe......
  • PL/SQL 基础---复杂数据类型和自定义类型
    原文地址:https://blog.csdn.net/villare/article/details/53437924PL/SQL基础—复杂数据类型和自定义类型PLSQL中常用的自定义类型就两种:记录类型、PLSQL内存表类型(根据表中的数据字段的简单和复杂程度又可分别实现类似于简单数组和记录数组的功能)除此之外,还有大对象类型:CLOB......
  • 对list中的字段进行自定义排序,最后放在LinkedHashMap中
    List<ProjectVO>projectList=dbProjectService.getProjectList();这里面如果第一个字段是如下的顺序:"成都分公司","北京分公司","上海分公司","深圳分公司","广州分公司","重庆分公司"Map<String,List<ProjectVO>>map=projectL......
  • php 扩展 rabbitmq popt
     首先是rabbitmq-c-master.tar.gz包,可以访问https://github.com/alanxz/rabbitmq-c去下载最新的wgethttps://github.com/alanxz/rabbitmq-c.gitwgethttps://github.com/alanxz/rabbitmq-c/archive/v0.10.0.tar.gz  0.8.0这个版本 对popt 要求低一些,如果你遇......
  • flask 请求与响应,session使用与源码分析,闪现与请求扩展
    目录cbv分析总结模板请求与响应请求:全局的request响应:新手四件套session使用及源码分析cookie与sessionsession执行原理session源码分析闪现作用用法请求扩展cbv分析基于类的视图cbv写法fromflaskimportFlask,request#视图基类fromflask.viewsimportMethodViewa......