前言
最近在部署Spring Boot构建的Api
因为有多个jar要启动,启动的参数也都不一样
搞的我都蛋疼了,只好研究下使用shell脚本来一键管理了
花了两个小时,终于把脚本撸出来了
注意如果在windows下创建shell脚本文件,注意文档格式要转换为unix才能在linux中运行
推荐直接在linux中直接使用vi创建shell脚本文件
创建脚本
在指定路径下运行vi startAll.sh
来创建脚本文件
参考如下代码:
最近在部署Spring Boot构建的Api
因为有多个jar要启动,启动的参数也都不一样
搞的我都蛋疼了,只好研究下使用shell脚本来一键管理了
花了两个小时,终于把脚本撸出来了
注意如果在windows下创建shell脚本文件,注意文档格式要转换为unix才能在linux中运行
推荐直接在linux中直接使用vi创建shell脚本文件
在指定路径下运行vi startAll.sh
来创建脚本文件
参考如下代码:
前些天看中了一个域名,是由我的名字简写的域名 fanhy.com
,正处于赎回期,原注册者也不打算赎回了
于是就写了个监控域名注册的Api来监控该域名,等域名可以注册了就给我发送邮件通知
传送门:自己动手造了个监控域名可否注册的Api → CheckDomain
经过半个多月的等待,终于在今日凌晨,该域名终于被注册局删除
由于我早就推算好时间,今天睡觉的时候就给邮件通知加上了铃声通知,于是凌晨3点左右就收到了域名可以注册的邮件
梦中惊醒,打开早就准备好的注册页面,下单,付款一气呵成,域名终于到手!
开心~~~
不过注册后了才发现是一时冲动,手上已经有两个域名了,拿这个域名干什么呢?
不管这么多了,先拿去备案再说吧~
网站备案期间需要暂时关闭留言功能...
由于友情链接日益增多已经影响阅读,风格也过于单调
所以就抽了个时间把友链从首页移动到内页
这样就能给友链加特效啦
友链的风格设计 参考了 基本照抄了:https://logi.ml/
添加了头像的展示,效果如下:
没有头像的小伙伴们还不快给我留言添加头像~~~
昨天改完CheckDomain的bug后,打包jar准备部署到服务器上,本地测试都正常,但是扔到服务器上却发不了邮件了...
经过多次测试发现,freemarker在jar包中无法使用类加载器获取resourse目录下的templates文件
出现的问题代码如下:(本地测试正常,打包jar后无法获取模板)
/**
* 邮件模板静态化
*
* @param mailTemplateModel 模板数据模型
* @return 加上数据后的静态化模板
*/
@Override
public String getMailHtml(MailTemplateModel mailTemplateModel) {
try {
//创建配置类
Configuration configuration = new Configuration(Configuration.getVersion());
//设置模板路径
String classpath = this.getClass().getResource("/").getPath();
configuration.setDirectoryForTemplateLoading(new File(classpath + "/templates"));
//设置字符集
configuration.setDefaultEncoding("utf-8");
//加载模板
Template template = configuration.getTemplate("mailTemplate.ftl");
//模板静态化并返回
return FreeMarkerTemplateUtils.processTemplateIntoString(template, mailTemplateModel);
} catch (Exception e) {
e.printStackTrace();
log.error("模板静态化异常", e);
return null;
}
}
修改后的代码:(打包jar后正常获取模板)
前两天我看中了一个域名处于即将删除的状态 ,想着如果能监控域名能注册了给我发邮件就好了,于是就花了一晚上撸出了 CheckDomain 来帮我监控这个域名 。
CheckDomain 是一个用来检查域名是否能注册的 Api,基于 Spring Boot 构建,使用了阿里云域名查询 Api;
可实现对域名状态查询,可注册监控等,并在可以注册的时候发送邮件通知。
也算是自己动手做的第一个完整的项目吧
既然有了兴趣点,所以就准备把所学的知识给串一下,能用上的都用上,也算是学以致用吧~
Github:https://github.com/noisky/CheckDomain
Demo:https://whois.ffis.me
1、查看域名状态:
请求方式:GET请求
/domain/{name}
参数说明:
{name}
: 查询的域名2、查看域名状态并在可注册时发送邮件通知:
1)请求方式:GET请求
/domain/{name}/{email}/{querykey}
参数说明:
{name}
: 查询的域名{email}
: 接受通知的邮箱地址querykey
: 查询密码,在 yml 配置文件中设置2)请求方式:POST请求
/domain/{name}
参数说明:
{name}
: 查询的域名POST 提交的表单:
email
: 接受通知的邮箱地址querykey
: 查询密码,在 yml 配置文件中设置可以使用第三方监控(如阿里云监控)来请求 Api 来达到监控域名注册状态
最近看上了个本命域名,因为过期即将被注册局删除,于是就自己写了个api接口用来监控这个域名,等可以注册了就直接发邮件通知我
其中用到了阿里云域名的一个api,准备直接使用RestTemplate去请求这个接口,并将结果自动封装为Map集合方便进行进一步处理。
等到框架搭好,代码写完,以为万事大吉的时候,程序却给我来了个惊喜: org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [interface java.util.Map] and content type [text/plain;charset=GBK]
很明显,上面提示接口返回的是text/plain
文本类型数据,RestTemplate解析数据的时候没有找到合适的解析器,就抛了异常。
WTF? 我看阿里云的接口明明返回的是xml的数据啊......仔细再定睛一看,类型还真的是文本类型...
Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻
量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互
之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker应用场景
Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计
中,唯一不同的是:集装箱运输货物,而Docker运输软件。
Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。
他们对新的系统制订了若干目标:
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而开发人员工作的时候,用的都是自己的电脑,所以首先要从中央服务器下载最新的版本,然后开发,开发完后,需要把自己开发的代码提交到中央服务器。
集中式版本控制工具缺点:
用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户
一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户
对应的sql语句:SELECT *,o.id oid FROM orders o, USER u WHERE o.uid = u.id;
查询的结果如下:
public interface UserDao {
List<User> findAll() throws IOException;
}
public class UserDaoImpl implements UserDao {
public List<User> findAll() throws IOException {
InputStream resourceAsStream =
Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new
SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> userList = sqlSession.selectList("userMapper.findAll");
sqlSession.close();
return userList;
}
}
@Test
public void testTraditionDao() throws IOException {
UserDao userDao = new UserDaoImpl();
List<User> all = userDao.findAll();
System.out.println(all);
}