JAVA-and-J2EE

升级spring4.1.6和支持java8

星期五, 四月 24th, 2015 | JAVA-and-J2EE, linux | 没有评论

系统使用的是spring-core-3.2.1.RELEASE 的版本,在使用jdk8的时候启动tomcat报错,发现无法启动 servlet 启动报错;

但是使用jdk7的版本是好的,网上google了下发现是jdk8引起的,spring3.x的系列不支持,于是有了下列升级问题,记录

1.替换spring3.x的版本到spring4.x的版本,使用到的spring包都替换(废话了)
下载地址:http://repo.spring.io/libs-release-local/org/springframework/spring/

2.系统有用到 quartz的定时任务,也需要替换 老版本是用的是quartz-all-1.6.0 需要升级到 2.x的版本下载了最新的 quartz-2.2.1.jar,quartz-jobs-2.2.1.jar
下载地址:http://quartz-scheduler.org/

3.调整 applicationContext-quartz.xml 使用的触发类
org.springframework.scheduling.quartz.CronTriggerBean 替换成 org.springframework.scheduling.quartz.CronTriggerFactoryBean

到此,升级成功,还要检测系统稳定性部分,测试下应该没有大问题后,即可更新到正式服了

Tags: , , ,

拆解游戏开发中策划配置动态公式问题

星期一, 四月 13th, 2015 | JAVA-and-J2EE, 游戏开发 | 没有评论

游戏开发中,策划总希望自己能配置奖励等公式,从程序这边对于这种太动态的东西是有点不太想去实现添加它;

既然有需求也要实现,从spring里剥离的SpelExpressionParser 可以很好的解决这个问题, 支持常见的 +—X/(加减乘除) 和指数计算^等

依赖 spring-expression-3.2.8.RELEASE.jar, 运行还需要 核心库 spring-core-3.2.8.RELEASE.jar
上代码:

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
31
package com.i5a6.semp.test;
 
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
 
public class TestExpress {
 
	public static void main(String[] args) {
		int num = dynamicCalOutput(2, 2, "#playerLevel^(1/2.7)*100*#num");
 
		System.out.println((Math.pow(2, (1 / 2.7)) * 100));
		System.out.println(num);
 
	}
 
	public static int dynamicCalOutput(int lev, int num, String arithmetic) {
		if (arithmetic == null || arithmetic.length() <= 0) {
			return 0;
		}
		ExpressionParser parser = new SpelExpressionParser();
		Expression expression = parser.parseExpression(arithmetic);
 
		EvaluationContext context = new StandardEvaluationContext();
		context.setVariable("playerLevel", lev);
		context.setVariable("num", num);
		return expression.getValue(context, Integer.class);
	}
}

Tags: , ,

一个类说明Java 信号量 Semaphore 的用法

星期五, 四月 10th, 2015 | JAVA-and-J2EE | 没有评论

在用Semaphore 信号量的时候,感觉对公平调度比较有用,可以控制多线程争夺资源时候,最大可以几个在执行,随手写了代码测试下,如下:
说明: 1. acquire() 获取一个许可,如果没有就等待
2. release() 释放一个许可
3. Semaphore可以控制某个资源可被同时访问的个数,自行初始化的数量,为1当然就顺序执行了

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.i5a6.semp.test;
 
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
 
public class SemaphoreTest {
 
	private Semaphore semp;
 
	private ExecutorService executorPool;
 
	public SemaphoreTest(int threadNum) {
		semp = new Semaphore(threadNum);
		executorPool = Executors.newFixedThreadPool(threadNum);
	}
 
	public void doEnd() {
		this.executorPool.shutdown();
	}
 
	public void doMsg(int num) {
		try {
			semp.acquire();
			executorPool.execute(new HelloUExecutor(num));
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
 
	class HelloUExecutor implements Runnable {
		private int num;
 
		public HelloUExecutor(int num) {
			this.num = num;
		}
 
		Random r = new Random();
 
		@Override
		public void run() {
			try {
				System.out.println(num);
				Thread.sleep(r.nextInt(1000));
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				semp.release();
			}
		}
	}
 
	public static void main(String[] args) {
		// 初始化为1 顺序执行
		SemaphoreTest st = new SemaphoreTest(5);
		for (int i = 0; i < 20; i++) {
			st.doMsg(i);
		}
		st.doEnd();
	}
 
}

Tags: ,

解决:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart

星期二, 四月 7th, 2015 | JAVA-and-J2EE | 没有评论

装了apache-maven-3.2.3-bin 并做好配置,在eclipse中新建maven工程时报错:

Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart:RELEASE from any of the configured repositories.
Could not resolve artifact
Missing org.apache.maven.archetypes:maven-archetype-quickstart:pom:RELEASE

解决办法:在本地库中装载maven-archetype-quickstart

1.从http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/
或者国内的镜像
http://maven.oschina.net/content/groups/public/org/apache/maven/archetypes/maven-archetype-quickstart/
下载最新版maven-archetype-quickstart-1.1.jar

2.cmd窗口执行mvn install:install-file -DgroupId=org.apache.maven.archetypes -DartifactId=maven-archetype-quickstart -Dversion=1.1 -Dpackaging=jar -Dfile=maven-archetype-quickstart-1.1.jar

即可

Tags: ,

Mac下启动和停止Mysql及查看端口

星期三, 三月 18th, 2015 | JAVA-and-J2EE, mac | 没有评论

启动Mysql服务

sudo /Library/StartupItems/MySQLCOM/MySQLCOM start

停止Mysql服务

sudo /Library/StartupItems/MySQLCOM/MySQLCOM stop

重启Mysql服务

sudo /Library/StartupItems/MySQLCOM/MySQLCOM restart

查看是否启动成功可以输入:netstat -an -p tcp 看到3306端口启动成功
//—————————————————————
打开终端,输入:
vim ~/.bash_profile
输入 i
然后粘贴以下内容

# mysql
alias mysql=’/usr/local/mysql/bin/mysql’
alias mysqladmin=’/usr/local/mysql/bin/mysqladmin’
# ls
alias ls=’ls -G’

按ESC键
输入 :x
重新启动终端程序

在终端中 直接输入 mysql 就可以进入mysql

Tags: ,

http协议的手游通信安全构想

星期一, 二月 16th, 2015 | JAVA-and-J2EE, linux, 游戏开发 | 没有评论

手游中使用http协议,很容易被劫包,获取对应的api接口地址和参数信息,用于篡改数据等制作脱机外挂等.

提升安全必须要做的事情,记忆下一个初步的构想方案.

1. api+key+时间戳+随机key(按照一定算法得出),MD5后生成摘要
2. 如果抓包拿到封装后的地址,照样可以封包访问,所以需要在服务端做限制,对于同一个请求只有第一次访问是有效的
3. 为了前端的反编译安全性,封装成.so包进行调用(提升破解门槛)

对只提供手机api的手机后台服务应用也适用

Tags: ,

CentOS Linux解决Device eth0 does not seem to be present

星期四, 八月 21st, 2014 | JAVA-and-J2EE, linux | 没有评论

直接复制了Oracle VM VirtualBox的镜像文件vdi 可以直接创建新的系统镜像真是方便,不过遇到了
Device eth0 does not seem to be present 的问题,在网上找到遇到同样问题的解决方法,
很顺利的解决,记录之:

ifconfig…没有看到eth0.。然后重启网卡又报下面错误。

故障现象:

service network restart
Shutting down loopback insterface: [ OK ]
Bringing up loopback insterface: [ OK ]
Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization. [FAILED]

CentOS Linux解决Device eth0 does not seem to be present

解决办法:
› Continue reading

Tags: ,

mac下常用的快捷键和花键对应

星期二, 八月 19th, 2014 | JAVA-and-J2EE, mac | 没有评论

图片对照的几个键,一时还准换不过来时常回头看看

顺带说下 eclipse的luna版本中智能提示快捷键变成 了 control + space(空格)

各种app或文件下(加粗是我常用的,也是推荐的)
Command + M 当前窗口最小化(中间窗口模式化下,最大化以后无法最小化)
Command + control + F 当前窗口最大化|还原状态
control + 方向键 左右 切换屏幕(等价于三指左右扫)
Command + shift + F 全屏 or 退出全屏(和上面的有区别。自己试验去)
Command + Q 退出当前窗口程序(最好以屏幕左上角提示为准!)
Command + W 退出当前所在网页(finder、chrome、safari、终端。。)
Command + T 新开窗口(finder、chrome、safari、终端。。都好使!)
Command + shift + G Finder时,可打开资源位置(很方便)
Command ~ 在同一程序的不同窗口下切换(比如邮件,终端。。。没找到前,最憋屈的事情。)
ITunes
option + 方向键 左右 换歌

› Continue reading

Tags: ,

MySQL表类型和存储引擎的修改遭遇版本不一致

星期五, 七月 25th, 2014 | Database, JAVA-and-J2EE | 没有评论

使用的是老版本的mysql客户端Navicate 8 ,mysql 服务端用的是mysql5.6的版本,在修改版本引擎的时候出现版本不对;

mysql error ‘TYPE=MyISAM’

解决办法:
Replace

TYPE=MyISAM

with

ENGINE=MyISAM

The problem was “TYPE=MyISAM” which should be “ENGINE=MyISAM” as per MySQL version updates – a simple search / replace has fix it.

附 修改表引擎sql:alter table db.user engine =MyISAM;

Tags: ,

中文URL资源定位遭遇空格

星期五, 七月 18th, 2014 | JAVA-and-J2EE | 没有评论

今天在抓取音乐文件中,遇到中文的资源文件名,对URL地址进行String src = URLEncoder.encode(src, “utf-8”); 可以获取一部分资源;

有一部分总是报错,一时看不出什么问题,本来以为是资源不存在产生,尝试在浏览器直接访问,竟然是可以;对比url一下子发现是文件名中空格搞的鬼,再替换即可;

 String src = URLEncoder.encode(src, "utf-8");   //已经转空格为+了
 src = src.replace("+", "%20");

Tags:

Search

文章分类

Links

Meta