2013年3月13日
#
今天在做手机终端开发时,发现连上域名服务器老是连不上,而直接用IP连接是OK的,初步怀凝是DNS问题引起来,经查相关的资料,现记录如下:
Android模拟器默认的地址是10.0.2.3,默认的DNS也是10.0.2.3,而一般电脑的IP都是192.168.1.100之类的,不在同一个网段。所以就会出现电脑可以上网但是模拟器不能上网的情况。其实设置方法很简单,只要把模拟器的默认DNS设置成电脑的DNS地址即可。
第一步:用系统的命令进入Android开发包的tools目录
cd X:\...\android-sdk-windows\tool
第二布:使用adb的shell,确认系统的各项属性
adb shell
getprop
getprop会列出系统当前的各项属性
第三步:得到模拟器的DNS地址
在结果里可以看到:
[net.dns1]: [10.0.2.3]
[net.dns2]: [10.0.2.4]
[net.dns3]: [10.0.2.5]
[net.dns4]: [10.0.2.6]
第四步:把dns改成我们自己的DNS
setprop net.dns1 192.168.1.1
连接的URL串
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=vip1)(PORT
=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=vip2)(PORT=1521))(LOAD_BALANCE=yes)(FAILOVER=
on))(CONNECT_DATA=(SERVICE_NAME=gs)))
啟動 lsnrctl start
狀態 lsnrctl status
關閉 lsnrctl stop
导出命令:exp 用户名/密码@数据库 owner=用户名 file=文件存储路径(如:F:\abcd.dmp)
测试截图:exp ZM/sql123@ORCL owner=ZM file=F\abcd.dmp
导入命令:imp 用户名/密码@数据库 fromuser=用户名 touser=用户名 file=d:\cu.dmp ignore=y
imp:命令类型
cu/mycu@db:导入的数据库登陆(用户名/密码@数据库)
fromuser:文件的指定用户
touser:指定导入到当前登录的数据库某个用户
file:需要导入的数据文件
ignore:是否忽略创建错误
测试截图:
imp ZM/sql123@ORCL fromuser=ZM touser=SZZM file=F:\test.dmp ignore=y
linux环境下的rmi常见问题
问题一:RMI服务提供程序运行在Windows操作系统下,RMI服务可以正常访问,但将RMI服务提供程序部署到Linux操作系统下后,RMI服务无法访问,提示
org.springframework.remoting.RemoteConnectFailureException:
Cannot connect to remote service [rmi://192.168.0.106:1199/ItemRetag]; nested exception is java.rmi.ConnectException: Connection refused to host: 127.0.0.1; ……
解决办法:在加载RMI服务之前将当前服务器的IP指定给hostName,如 System.setProperty("java.rmi.server.hostname", "192.168.100.7");或者修改/etc/hosts文件,在这个文件中加 192.168.100.54 testlinux1 localhost.localdomain localhost 就行,或者将/etc/hosts文件中默认的127.0.0.1改成当前机器的IP即可!
问题二:java.rmi.server.ExportException: internal error: ObjID already in use Caused by: java.rmi.server.ExportException: internal error: ObjID already in use……
出现这种问题及有可能是/etc/hosts文件中指定的IP并不是当前服务器的真实IP,RMI在初始化时注册服务失败。
通过System.out.println(InetAddress.getLocalHost().toString());查看当前主机的IP是否为真实IP,如显示为SIMBANK/220.250.64.24,而真实IP为192.168.1.2
解决办法:修改/etc/hosts文件中错误的IP即可,将:
220.250.64.24 SIMBANK
修改为
192.168.1.2 SIMBANK
JAVA中,通过分析Heapdump文件可以检查程序是否存在内存泄露,但是这个文件一般是在程序遇到致命问题时才会产生,而如何事前生成这个文件,从而在程序尚末崩溃前找出问题的所在。
以下记述了各个版本的JDK产生DUMP文件的方法:
UN JDK生成Heapdump文件只需要在tomcat启动脚本中增加 HeapDumpOnOutOfMemoryError 参数
此参数需要Java SE release 5.0 update 14 或以上支持
设置示例:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx800m -XX:PermSize=64M -XX:MaxPermSize=128m -Djava.awt.headless=true -XX:+HeapDumpOnOutOfMemoryError -XX:+HeapDumpOnCtrlBreak
IBM JDK生成Heapdump文件的开关:
— export IBM_HEAPDUMP=true
— export IBM_HEAP_DUMP=true
— export IBM_HEAPDUMP_OUTOFMEMORY=true
— export IBM_JAVADUMP_OUTOFMEMORY=true
— export IBM_JAVACORE_OUTOFMEMORY=true
— export IBM_HEAPDUMPDIR=<directory_path>
HP JDK生成Heapdump文件需要在在环境变量上,加上export _JAVA_HEAPDUMP=1
今天在做某项目的POC测试,甲方提供了一个三十万记录的TXT数据文件,需要把该文件的记录插入到数据库中,由于项目部的同事在搭建测试环境中用的是Mysql数据库,在把数据导入到数据库中用的是JDBC的批处理。代码如下
private void batchParseGroup(){
Connection con= null;
PreparedStatement ps =null;
try {
con= DbConnectionManager.getConnection();
con.setAutoCommit(false);
String sql = " insert into jivegroup(uri,groupname,pgroupid,description,creationdate,modificationdate,priority,selfpriority) values(?,?,?,?,?,?,?,?)";
ps= con.prepareStatement(sql);
for(int i=0;i<groupList.size();i++){
Group group = groupList.get(i);
ps.setString(1, group.getUri());
ps.setString(2, group.getName());
ps.setString(3, group.getPgroupId());
ps.setString(4, group.getName());
ps.setString(5, ""+System.currentTimeMillis());
ps.setString(6, ""+System.currentTimeMillis());
ps.setInt(7, group.getPriority());
ps.setInt(8, group.getPriority());
ps.addBatch();
if(i%100==0){
ps.executeBatch();
}
}
con.commit();
ps.executeBatch();
} catch (SQLException e) {
e.printStackTrace();
}finally{
DbConnectionManager.closeConnection(ps, con);
}
} 在测试时,发现三十万的数据居然需要十分钟左右的时间。首先想到的就是Mysql的相关配置是不是有问题,反复修改了Mysql的相应配置参数,收效甚微。
在Mysql的官网上查到如下:
http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-configuration-properties.html
关于rewriteBatchedStatements参数,Mysql官方的说明:
Should the driver use multiqueries (irregardless of the setting of "allowMultiQueries") as well as rewriting of prepared statements for INSERT into multi-value inserts when executeBatch() is called? Notice that this has the potential for SQL injection if using plain java.sql.Statements and your code doesn't sanitize input correctly. Notice that for prepared statements, server-side prepared statements can not currently take advantage of this rewrite option, and that if you don't specify stream lengths when using PreparedStatement.set*Stream(), the driver won't be able to determine the optimum number of parameters per batch and you might receive an error from the driver that the resultant packet is too large. Statement.getGeneratedKeys() for these rewritten statements only works when the entire batch includes INSERT statements.
解决办法:
下载最新的JDBC的驱动程序。
MYSQL URL的配置参数如下:
jdbc:mysql://54.200.190.80:3306/ccb_ucstar?rewriteBatchedStatements=true
经过测试。三十多万的数据。70秒内搞定!