0%

Thymeleaf简介

前面的例子我们使用的视图技术主要是JSP。JSP的优点是它是Java EE容器的一部分,几乎所有Java EE服务器都支持JSP。缺点就是它在视图表现方面的功能很少,假如我们想迭代一个数组之类的,只能使用<% %>来包括Java语句进行。虽然有标准标签库(JSTL)的补足,但是使用仍然不太方便。另外JSP只能在Java EE容器中使用,如果我们希望渲染电子邮件之类的,JSP就无能为力了。

Java生态圈广泛,自然有很多视图框架,除了JSP之外,还有Freemarker、Velocity、Thymeleaf等很多框架。Thymeleaf的优点是它是基于HTML的,即使视图没有渲染成功,也是一个标准的HTML页面。因此它的可读性很不错,也可以作为设计原型来使用。而且它是完全独立于Java ee容器的,意味着我们可以在任何需要渲染HTML的地方使用Thymeleaf。

Thymeleaf也提供了spring的支持,我们可以非常方便的在Spring配置文件中声明Thymeleaf Beans,然后用它们渲染视图。

改造 - 由jsp到Thymeleaf

  1. 引入依赖
1
2
3
4
5
6
<!--thymeleaf模版 spring4.x-->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
  1. 配置ViewResolver(在spring的xml文件里)
Read more »

概述

工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率。谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来。所以就诞生了Guava。

高效设计良好的API,被Google的开发者设计,实现和使用

遵循高效的Java语法实践

使代码更刻度,简洁,简单

节约时间,资源,提高生产力 Guava工程

包含了若干被Google的 Java项目广泛依赖 的核心库,例如:

  1. 集合 [collections]
  2. 缓存 [caching]
  3. 原生类型支持 [primitives support]
  4. 并发库 [concurrency libraries]
  5. 通用注解 [common annotations]
  6. 字符串处理 [string processing]
  7. I/O 等等。

部分用法如下:

Read more »

刚在一个群里,有人有这么一个需求。

表A:id,name

表B:id,其他,name(新增字段)

A,B表通过id关联,要把A的name给对应的B的name

以前也没有写过这种update语句

1
2
3
4
5
6
update 表名 set 字段名=字段值 where 条件
如 update A set name='xiaoming' where id='';
如果是多表查询
update 表1 a inner join 表2 b on ab表的关联 set a.字段=b.字段
如 update A a inner join B b on a.id=b.id set a.name=b.name
就是在table1表和table2表id相同时 把table2的name值赋给table1的name

在安装了git客户端之后,发现Git Bash挺好用

之前在linux shell用过tree命令感觉不错

发现Git Bash也可以实现,于是就记录一下

下载地址:点击前往

下载文件: Binaries Zip

解压文件:bin目录下找到tree.exe

把这个放到git安装目录下后的路径:C:\Program Files\Git\usr\bin\tree.exe

测试:虽然有点丑。。。

Read more »

SpringBootCLI是一个命令行工具,可用于快速搭建基于spring的原型。

它支持运行Groovy脚本,这也就意味着你可以使用类似Java的语法,但不用写很多的模板代码。

Spring Boot不一定非要配合CLI使用,但它绝对是Spring应用取得进展的最快方式.

下载分发包

  1. 地址:getting-started-installing-the-cli
  2. 下载:spring-boot-cli-x.x.x.RELEASE-bin.zip (例如:spring-boot-cli-1.5.4.RELEASE-bin.zip)
  3. 解压
  4. 设置环境变量:C:\hisenwork\soft\spring-1.5.4.RELEASE\bin (在path中添加)
  5. cmd测试:spring –version
1
2
spring --version
Spring CLI v1.5.4.RELEASE

运行一个简单程序

Read more »

在命令行输入:mongo报错

1
2
3
4
5
hisen@ubuntu:~$ mongo
MongoDB shell version: 3.2.13
connecting to: test
2017-07-11T23:11:23.827+0800 I STORAGE [main] In File::open(), ::open for '/home/hisen/.mongorc.js' failed with errno:13 Permission denied
The ".mongorc.js" file located in your home folder could not be executed

看倒数第二行,应该是权限的问题,于是

1
2
3
4
5
6
7
8
9
10
11
12
hisen@ubuntu:~$ sudo chown -R hisen /home/hisen/.mongorc.js
hisen@ubuntu:~$ mongo
MongoDB shell version: 3.2.13
connecting to: test
Server has startup warnings:
2017-07-11T23:11:15.845+0800 I CONTROL [initandlisten]
2017-07-11T23:11:15.845+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-07-11T23:11:15.845+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-07-11T23:11:15.845+0800 I CONTROL [initandlisten]
2017-07-11T23:11:15.845+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-07-11T23:11:15.845+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-07-11T23:11:15.845+0800 I CONTROL [initandlisten]

完美解决,用户权限的问题。

之前我记得写过简单的测试类,但是忘了,现在重新写一个

顺便用博客记录下,mongodb系列应该会有几篇记录

本篇具体代码:SampleMongoTestNo1.Java

1、环境介绍

mongodb安装教程:点击查看

1
2
3
4
5
6
7
8
DataBase:MongoDB V 3.2
Driver :3.4.1
maven:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-Java-driver</artifactId>
<version>3.4.1</version>
</dependency>

2、初始化连接

1
2
3
4
5
6
7
8
9
10
11
12
13
private Mongo mg = null;
private DB db;
private DBCollection dbCollection;

@Before
public void initDB(){
//建立连接
mg = new MongoClient("127.0.0.1",27017);
//获取要操作的数据库实例,没有会创建
db = mg.getDB("hisen");
//获取要操作的集合实例,没有会创建
dbCollection = db.getCollection("emp");
}

3、关闭连接

1
2
3
4
5
6
7
8
9
@After
public void destoryDB(){
if (mg == null) {
mg.close();
mg=null;
db=null;
dbCollection=null;
}
}

4、CRUD操作

Read more »

近期使用chrome出现打开一些网站老是弹出莫名其妙的网址

最终指向的都是Reimage Repair,网址zh.reimageplus.com
Reimage Repair
网上一查,貌似因为插件被污染的原因

我关闭chrome所有的插件,一个一个排查,最后找到了一个插件出问题

本来还想去举报,发现这个插件被下架了

问题排查

1
2
3
右上角菜单按钮 ---更多工具 --- 扩展程序 --- 关闭所有插件
然后一个个打开,测试某些网页是否还会继续跳出那恶心的东西
然后就找到问题了。

在安装完ubuntu的时候

只有自己设置的非root的帐号和密码

但是又要用root密码怎么办呢?

1
2
3
4
hisen@ubuntu-1:~$ sudo passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

上面输入的密码就是你的root密码

检测一下

1
2
3
hisen@ubuntu-1:~$ su
Password:
root@ubuntu-1:/home/hisen#

通过,至此结束

安装需求:

  1. 64位的系统 Linux/Unix/Mac
  2. 64bit JDK 1.8+;
  3. Maven 3.2.x;
  4. Git (一般自带)

如果还未安装jdk、maven建议查看教程:点击查看

Clone & Build

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
git clone -b develop https://github.com/apache/incubator-rocketmq.git
cd incubator-rocketmq
mvn -Prelease-all -DskipTests clean install -U
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Apache RocketMQ 4.2.0-incubating-SNAPSHOT .......... SUCCESS [01:07 min]
[INFO] rocketmq-remoting 4.2.0-incubating-SNAPSHOT ........ SUCCESS [ 15.749 s]
[INFO] rocketmq-common 4.2.0-incubating-SNAPSHOT .......... SUCCESS [ 10.243 s]
[INFO] rocketmq-client 4.2.0-incubating-SNAPSHOT .......... SUCCESS [ 11.638 s]
[INFO] rocketmq-store 4.2.0-incubating-SNAPSHOT ........... SUCCESS [ 13.108 s]
[INFO] rocketmq-srvutil 4.2.0-incubating-SNAPSHOT ......... SUCCESS [ 2.051 s]
[INFO] rocketmq-filter 4.2.0-incubating-SNAPSHOT .......... SUCCESS [ 3.917 s]
[INFO] rocketmq-broker 4.2.0-incubating-SNAPSHOT .......... SUCCESS [ 8.726 s]
[INFO] rocketmq-tools 4.2.0-incubating-SNAPSHOT ........... SUCCESS [ 6.002 s]
[INFO] rocketmq-namesrv 4.2.0-incubating-SNAPSHOT ......... SUCCESS [ 2.726 s]
[INFO] rocketmq-logappender 4.2.0-incubating-SNAPSHOT ..... SUCCESS [ 3.514 s]
[INFO] rocketmq-openmessaging 4.2.0-incubating-SNAPSHOT ... SUCCESS [ 2.668 s]
[INFO] rocketmq-example 4.2.0-incubating-SNAPSHOT ......... SUCCESS [ 2.390 s]
[INFO] rocketmq-filtersrv 4.2.0-incubating-SNAPSHOT ....... SUCCESS [ 2.145 s]
[INFO] rocketmq-test 4.2.0-incubating-SNAPSHOT ............ SUCCESS [ 5.428 s]
[INFO] rocketmq-distribution 4.2.0-incubating-SNAPSHOT .... SUCCESS [ 27.002 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:07 min
[INFO] Finished at: 2017-07-02T01:35:40+08:00
[INFO] Final Memory: 60M/247M
[INFO] ------------------------------------------------------------------------
cd distribution/target/apache-rocketmq

Start Name Server

1
2
3
nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...

Start Broker

1
2
3
nohup sh bin/mqbroker -n localhost:9876 &
tail -f ~/logs/rocketmqlogs/broker.log
The broker[%s, 172.30.30.233:10911] boot success...

Send & Receive Messages

1
2
3
4
5
6
7
Before sending/receiving messages, we need to tell clients the location of name servers. RocketMQ provides multiple ways to achieve this. For simplicity, we use environment variable NAMESRV_ADDR
export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt...

Shutdown Servers

1
2
3
4
5
6
7
sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK

sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK