- intellij IDEA 13.1.5
- spring mvc 3.2.0.RELEASE
- maven 3.2.3
- jdk 1.7.0_67
- apache-tomcat 7.0.56
- mysql中建立数据库 ->
CREATE DATABASE
darfooDEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
- 利用
/src/main/resources/dardoo.sql
建立数据表 - 运行
/src/main/java/com/springapp/mvc/App.java
来检查hibernate支持是否成功
in src/main/resources/
- cp datasource.properties.example datasource.properties
- cp redis.properties.example redis.properties
- cp mongodb.conf.example mongodb.conf
- cp uploaddir.conf.example uploaddir.conf
in root directory
cp admin.properties.example -> admin.properties
由于服务器带宽原因,上传大文件非常慢,如果让人肉上传人员一次提交信息一次上传一个视频单次上传会让人疯掉,所以就创建一个视频,教程,伴奏的时候,图片直接上传七牛,音频,视频都先保存在服务器上,然后每一天上传完之后由后台人员来用七牛的命令行上传工具批量上传一天上传的音频视频文件
cd $darfoo_home
qrsync conf.json
- conf3.json
- upload.sh
- resourcevolumn.sh
/usr/local/darfoo/apache-tomcat-7.0.47/bin
不知道为什么有时候upload功能脚本在web端执行会有问题
多个配置文件各自包含placeholder,后加载的配置文件无法加载placeholder中对应的prop文件 解决方法:
- 单独写一个配置文件,专门用来加载props
- 网上找到的方法,设置ignoreUnresolvablePlaceholders属性为true solution
- webbench(debian/ubuntu/centos)
# install
sudo apt-get intall ctags
wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make
sudo make install
# how to use
webbench -c 100 -t 30 http://112.124.68.27/rest/resources/video/index #在30秒内用100个并发连接去请求视频首页
然后直接在命令行中看压力测试结果就好,这个工具较老但是使用比较简单
./product.sh
ps aux | grep tomcat
看三个tomcat进程是否已经全部停止
分别进入darfoo
,darfoo1
,darfoo2
三个session运行三个tomcat的catalina.sh run
这样既有实时log又能看现在流量压到哪一个tomcat上
- Gemfile
source 'https://ruby.taobao.org/'
gem 'redis-stat', '0.4.8'
and
bundle install
then
redis-stat -a password --server
and visit the serverhost:63790
to get redis server info on the web or just watch it on the command line
- 使用newrelic for java
references
unzip newrelic-java-3.12.1.zip -d $tomcat-root-path
cd $tomcat-root-path/newrelic
java -jar newrelic.jar install
# modify newrelic.yml -> change app name
# restart tomcat process
- tools
- use wrk examples
./wrk -c 10 -t 4 -d 10 http://localhost:8080/darfoobackend/rest/loadtest/normal/nocache/1
./wrk -c 10 -t 4 -d 10 http://localhost:8080/darfoobackend/rest/loadtest/normal/cache/1
./wrk -c 10 -t 4 -d 10 http://localhost:8080/darfoobackend/rest/loadtest/async/nocache/1
./wrk -c 10 -t 4 -d 10 http://localhost:8080/darfoobackend/rest/loadtest/async/cache/1
./wrk -c 10 -t 4 -d 10 http://localhost:8080/darfoobackend/rest/loadtest/deferred/nocache
./wrk -c 10 -t 4 -d 10 http://localhost:8080/darfoobackend/rest/loadtest/deferred/cache
./wrk -c 10 -t 4 -d 10 http://localhost/darfoobackend/rest/loadtest/normal/cache/1
./wrk -c 10 -t 4 -d 10 http://localhost/darfoobackend/rest/loadtest/async/cache/1
- 有时候(具体啥情况会出现还不知)如果自己的
pull request
还没有被merge那么使用
git pull --rebase origin master
还是会出现冲突
所以一种比较好的方式是工作之前先看看自己的pr有没有被合并,如果被合并了就使用
git pull --rebase origin master
如果没有被合并就使用
git pull origin master
- 如何安全的工作
每次编码之前先检查自己的pr是否被merge
然后在本地开一个测试分支,然后再pull或者pull --rebase
git checkout -b localtest
git pull / pull --rebase origin master
解决了冲突以后切换回自己的开发分支,然后合并测试分支,然后push远端开发分支
git checkout xx_dev
git merge localtest
git branch -D localtest
git push origin xxx_dev
- 解决冲突
这些冲突都需要在localtest中解决
有时候(具体出现原因还在调查)如果自己的pr还没有被merge就使用pull --rebase会产生冲突,这个时候需要去掉这些新的冲突回到rebase之前然后使用git pull
git rebase --abort # 去掉因为错误rebase而导致的冲突
使用git pull会产生冲突,解决方法
git pull origin master
modify conflict files
git commit
如果自己的pr被merge了,使用pull --rebase还是会有冲突,解决方法
git pull --rebase origin master
modify conflict files
git add .
git rebase --continue # 如果所有冲突都解决了,continue之后会从一个怪异的分支回到之前的分支
时刻用git status
查看当前状态和提示信息
开始写代码之前pull一次,写完代码准备push之前pull一次
- nginx + multi tomcat
- jetty netty
- redis缓存 (关于redis的使用,初步思路就是请求过的链接就把结果放redis里面,后面再请求相同的就直接从redis里拿,定时flush) 一些搜索结果更应该放入缓存,耗时的级联查询等等
- 数据库读写分离,多个主从mysql服务
- 建立mysql连接池也能抗一抗
- other techstack(已经测试了其他两种方案,效果不错)
- 升级带宽
- 添置服务器一台肯定不够
- jvm参数调整
- nginx参数配置
- 后面很有可能改成play或者go来些service(看下nginx能不能分发确定的请求)
- safe dog on linux
- https for auth
做数据分析 记录所有行为 点击 播放 异常
- angular no jsp jstl anymore 任务完全移交前端组
- 数据库和缓存层配置文件
cp datasource.properties.example datasource.properties
cp redis.properties.example redis.properties
- 开启redis
redis-server
- 开始部署
./product.sh
- 使用fabric自动部署
使用deploy项目中的脚本来自动化部署
-
incResourceField中使用openSession正常使用getCurrentSession无法进行更新操作
-
isResourceExistsByFields, isResourceExistsByFields, getResourceByTitleOrName, getResourceByFields四个函数中可能存在uniqueResult无法找到唯一的结果而出错的情况 需要保证传入的条件字段对应的所有值都是唯一的, 因为video, tutorial, music这些资源的title是可以duplicate的但是和舞队id或者舞队name的字段的组合是unique的, 使用这些函数时特别注意!