ClassLoaderTemplateResolver 的用法

现在开发都是前后端分离,上次用模板引擎应该是用Golang自带的 template/html这个库,thymeleaf是Java中第一梯队的模板引擎,不过现在我用来做发送邮件的模板渲染引擎。

要使用thymeleaf需要配置ITemplateResolverClassLoaderTemplateResolver是常用的实现,表示在程序的资源目录里面查找。

final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setResolvablePatterns(Collections.singleton("email/*"));
templateResolver.setPrefix("/template/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setCacheable(false);

参数都比较好理解,setTemplateMode 告诉模板引擎使用HTML语法,设置编码为UTF-8,并且不缓存内容。前面三个参数用来告诉模板引擎如何匹配和查找资源,先匹配路径,路径符合了再查找资源。调用的代码:

Context ctx = new Context(); 
String content = templateEngine.process("email/test.html", ctx);

模板引擎先拿字符串 email/test.htmlemail/*比较符合要求,并且文件名是.html,最后拼接上前缀/template/得到完整的路径/template/email/test.html,在项目里面对应的文件则为:

src/main/resources/template/email/test.html
March 22

PXE-Boot

调试环境

虚拟机一个,选择VMware个人免费版,这个版本不能直接设置UEFI启动,但是可以修改虚拟机的配置文件添加配置,在虚拟机存放目录里面一个后缀是 vmx 的文件,添加下面配置,默认是没有这个选项的,直接添加到末尾就可以。虚拟机多余的磁盘声卡全部删除,然后只留下一张网卡用来启动。

firmware = "efi"

启动Arch

根据Arch官方的教程,很容易就能引导起来,tftp服务器只是用来加载内核和微码镜像,rootfs 并没有使用tftp传输,因此启动完之后,会让你选择 http/nbd/nfs 其中的一种方式加载rootfs。

另外还有一个问题,把 dnsmasq 直接绑定在物理网卡上面,DHCP 始终无法正常工作,需要创建一个网卡,然后把物理网卡桥接到刚刚创建的网卡上面,然后将 dnsmasq 的 DHCP 监听端口绑定到这个桥接网卡上。最后还需要手动给网卡配置 IP 地址,就是网关的地址192.168.100.1

# disable dns server
port=0

# enable tftp server
enable-tftp
tftp-root=/srv/tftp

interface=br0
bind-interfaces
dhcp-range=lan,192.168.100.100,192.168.100.120,255.255.255.0,12h
dhcp-boot=/arch/boot/syslinux/lpxelinux.0
dhcp-option-force=209,boot/syslinux/archiso.cfg
dhcp-option-force=210,/arch/
dhcp-option-force=option:tftp-server,192.168.100.1
dhcp-option=option:router, 192.168.100.1

关于选项中代码和别名的对照表可以执行命令dnsmasq --help dhcp获取到,其中 209 是config-file,210 是 path-prefix这两个是pxelinux自身的参数。

January 16