如果你一直在做架构。你设计的框架一定是可配置的,包括那些数据库的配置,当然,还有其它。
一个灵活的程序肯定会有各种各样的配置,具体使用情况也各不相同。本文讲解的是纯java配置文件的加载,没有使用任何ssh之类的东东。毕竟框架这样的东东学不长的,基础打好,对人生日后的发展都有好处。
最常见的可能有SQL,XML,Property文件以及Java常量类。
对于一些常用的变量,使用Java常量类可能是最好的选择了。直接用,快速随手可取。用于多处常用的地方是个不错的选择。
SQL用于验证那些登录,MD5等需要验证以及和某些功能模块相连的数据,放在一起读取,是常用的手法之一。
最后XML,Property两种文件常用于配置一些数据库连接,缓存,国际化等,而Property就是我要讲的重点。
至于XML由于读取可能稍微复杂,具体可看我的另一篇文件。专门讲解如何使用Dom4j/JDom+Xpath读取XML的博文。XML还有另一个用途,和JSON一样。用来传递数据也是不错的选择。
现在我在这里讲解,如何使用Java静态常量类+property读取配置文件,并快速加载到程序中。对于我这种经常架构的人,这是最常用的手段。一般情况我想我都会配置这么一个文件。
好了。土豆不喜欢废话,介绍完了,直接上代码。
config.properties
#URL
url.sms=http\://localhost\:8080/sms/sendSms
url.masIP="211.99.213.001"
url.masApiPort=61616
#Pool
jdbc.sql.poolname="pool2"
#sql
jdbc.sql.driverClassName=net.sourceforge.jtds.jdbc.Driver
jdbcjdbc.sql.url=jdbc:jtds:sqlserver://localhost:1433/sms
jdbc.sql.username=sa
jdbc.sql.password=123
/**
* 装配配置文件 initProperties
*/
private static void loadProperties() {
rb = ResourceBundle.getBundle("config", Locale.getDefault());
driver = rb.getString("jdbc.sql.driverClassName");
url = rb.getString("jdbc.sql.url");
name = rb.getString("jdbc.sql.username");
password = rb.getString("jdbc.sql.password");
poolname = rb.getString("jdbc.sql.poolname");
}
上述方法即完成一次配置文件的简单读取。
下面我们写成静态公共的。在其它地方调用。
package com.sinoglobal.utils;
import java.util.Locale;
import java.util.ResourceBundle;
public class ResourceUtils {
private static ResourceBundle rb = null;
public static String smsUrl = null;
public static String masIP = null;
public static int masApiPort = 0;
static {
rb = ResourceBundle.getBundle("config", Locale.getDefault());
smsUrl = rb.getString("url.sms");
masIP = rb.getString("url.masIP");
masApiPort = Integer.parseInt(rb.getString("url.masApiPort"));
}
}
在这里直接可以调用。一些简单的配置用这种方法读取是最好不过的了。而使用XML的方式你还得去解析。
//启动SMSApiClient
public boolean start() {
try {
int masApiPort = ResourceUtils.masApiPort;
String masIP = ResourceUtils.masIP;
// SmsApiClientHandlerImpl是由自己实现的
SmsApiClientHandler smsHandler = new SmsApiClientHandlerImpl();
System.out.println("初始化中。。。");
smsApiClient = ApiClientFactory.createSmsApiClient(smsHandler,masIP, masApiPort, appID, appPwd);
// 设置是否自动重连到服务器(可以不需要设置)
smsApiClient.setAutoConnect(true);
// 设置自动重连服务器相隔时间(单位:秒), 默认为30秒(可以不需要设置)
smsApiClient.setReConnectInterval(60);
// 设置与服务连接超时时长,单位:millisecond(可以不需要设置)
smsApiClient.setConnectTimeout(100000);
// 设置发送超时时长,单位:millisecond(可以不需要设置)
smsApiClient.setSendTimeout(1000000);
// 以上方法在调用start方法前设置。否则无效!
smsApiClient.start();// 必须启动!!!!完成初始化.
System.out.println("服务启动。。。");
} catch (ApiException e) {
return false;
}
return true;
}
最后,还有一种配置方法,不过是写死的方法。并不是灵活的。主要用在一些需要经常读取的东东上面。
这样的东东一般直接写一个常量类。然后全部是静态调用。节约资源。
比如这样的一个:
package com.sinoglobal.cons;
import com.sinoglobal.utils.DateUtils;
/**
* 常量类
*
* @author lz
*/
public class Const {
public static String SysStartTime=DateUtils.getNowDate("yyyy-MM-dd HH:mm:ss.SSS"); //平台启动时间
public static long reqCount=0;//平台请求次数
public static int sendtimes=3; //发送短信失败重发请求最大次数
public static int receivetimes=3; //接收短信转发请求最大次数
/**============================|
*
* 发送短信验证
*
============================|*/
//远程连接验证
public static final String noFunctions="2;用户没有相应的权限";
public static final String noServer="2;没有找到相应的短信服务器";
public static final String sendfailed="2;短信发送失败";
public static final String onMaxNo="2;超过最大群发数量";
public static final String noNet="2;网关未连接";
public static final String onMaxWord="2;短信字数超过70";
public static final String apiError="2;API短信客户端调用失败";
public static final String loginError="用户名或密码错误";
public static final String md5Error="md5校验未通过....";
public static final String connError="远程连接失败";
//信息验证
public static final String infoError="2;信息输入不完整";
public static final String onMobileMax="2;手机号码长度大于500";
public static final String mobileTypeError="2;手机号码格式不正解";
public static final String DateError="2;时间格式不正确";
public static final String onXcodeMax="2;短信子号+扩展码长度不能大于8位数";
public static final String xcodeIsNotNo="2;扩展码为非法数字";
public static final String xcodeIsUp0="2;扩展码必须大于0的整数";
public static final String xcodeError="2;扩展码[去除前两位短信子号]只能是0-999999之间的数字";
}
当然像log4j这样的配置就更为灵活了。可以在web.xml配置初始值,然后映射到log4j.properties中去。
像上面的这个常量类的好处是,不用每次声明变量来读取,在任何其它的地方都可以调用,关键是它是静态的,可以节约资源,也不用去数据库读取,无疑提高了效率,是java开发的便捷之道。而且我们可以配置多个模块,这样就层次分明了。对于一些要从数据库定时查询相关的东东我们可以放在这里,直接调用。毕竟轮循数据库是一件庞大而费力的工作。
当然,只有当你试过后你才会知道。
一个好的项目,一定有一个好的框架,一个灵活而简单的配置。
分享到:
相关推荐
对Eclipse + MyEclipse编辑器做的一点点配置说明!
本文讲述了配置EditPlus与NAnt构建轻型的.NET开发环境的步骤:首先是配置EditPlus;然后是配置一下C#的编译环境;...这样的开发环境适用于当你在需要修改一点点代码而又不想安装庞大的VS.NET的时候。
根据HP原厂工程师的指导,把每一步的详细配置过程按配置顺序都用QQ进行了截图,并在每张截图下面都有详细说明,没接触过3PAR的人用这个手册完全可以完成初始化的...因为是一点点做出来的,而且很详细,所以要了10分。
Struts2 配置详解 Struts2 配置稍微麻烦了一点点
一、下载地址 ...二、使用方式 依赖于 jQuery (1.8... NProgress.inc() — 增加一点点 NProgress.done() — 完成进度条 四、基本配置 通过 minimum 来修改最小百分比 NProgress.configure({ minimum: 0.1 }); 通过 eas
mycat 入门配置文件,数据,入门必备,只为挣一点点积分,谢谢大家
这个是为了方便大家配置android 的环境而写的文档,我今天刚刚配置成功。 希望能给大家一点点参考。
VC下配置OpenGl(所用到得lib及dll以及XP系统中可能会缺少的dll) 初学openGL 以及配置中遇到的一点点问题
WebLogic Server Clustering 一点点资料信息[了解WebLogic Cluster的配置与应用程序的发布]
每日构建,每日必做,顺畅办公,顺畅配置,测试发文,
很有用的一些资料,希望对看了的朋友能有一点点帮助;能有一点点的提高;
我从csdn上下载的那个5.2的版本(花了我不少银子,所以发的资源都是有一点点分的,请谅解),然后根据这个手册配置成功了,虽然版本不一样,但是里面的配置步骤是一样的。如果有什么问题可以进行交流(给我发消息,...
一、源码特点 1、界面:仿点点餐饮网上订餐网站,界面美观大方。 2、功能:网站前台和管理后台功能齐全,且包含完整源码。 二、功能菜单介绍 网站前台: 1、注册、登录 2、根据区域显示不同店铺的套餐列表,...
JSF的配置及简单的登陆验证,希望对新手们提供帮助!赚一点点汗钱,不会介意吧
这个资料是我自己从实践中写出来的,希望对大家能起到一点点用处
Tensorflow用了这么久,配置也是越来越简单了,通常tensorflow配置都可以通过pip install自动完成,但有些不可以连接互联网的情况下就得一点点从官网抠下来安装包,手动配置tf环境。本文就主要记录了一下win离线环境...