Java开发小技巧(一)

前言
相信许多程序员在看别人写的代码的时候,会有怀疑人生的感想,面对一堆天书一样的代码,很难摸清作者的思路,最后选择了重构,如果你认同上面这个作法,说明了两个问题:要么原来的开发者技术菜、要么你技术菜。
企业级项目的开发不是一个开发人员就能完成的,开发过程中往往会有一些需求变更、人员调动,所以代码的编写规范非常非常重要,你要确保项目交接后,后续开发人员可以看懂你的东西,知道如何进行后期的维护和功能迭代。
最近在看公司项目源码(Java)的时候,发现项目的结构非常清晰,后期维护非常便捷,原因就是运用了很多巧妙的开发技巧,在这里也和大家分享一下,希望对你们有帮助。
1.IP地址变量化
相信大家在连接数据库的时候是这样写的:
jdbc:mysql://127.0.0.1:3306/test
这是连接本地MySql数据库的字符串,这句话看起来没有问题,但是大多数企业项目会把数据库独立出来,使用数据库一体机或远程数据库,这时候就需要修改上面的IP了,如果项目少这样写没什么问题,但是如果项目多了,岂不是每个项目都要去修改,这样显得非常不智能,所以解决方案来了:
使用hosts文件使IP地址变量化
首先介绍一下hosts文件,它的作用就是将一些网址域名与其对应的IP地址建立一个关联,相当于本地的DNS域名解析器,当用户访问一个网址时,系统会首先从hosts文件中寻找对应的IP地址,一旦找到,系统会立即访问对应的IP,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析。
Windows中hosts文件位于
C:\Windows\System32\drivers\etc\hosts,Linux中位于/etc/hosts
现在我们把数据库连接字符串改成这样子:
jdbc:mysql://mydb:3306/test
与之前的不同之处在于,将127.0.0.1的IP地址改成了变量名mydb
接着我们来修改hosts文件,打开hosts文件其实你可以看到,平时我们使用的localhost其实是默认解析到IP127.0.0.1上的,我们可以在文件最下面添加这样一行配置:
127.0.0.1 mydb
大功告成,运行项目你会发现一切正常,这就是将IP地址变量化的方法,如果之后公司要求将数据库迁移到其它地方,只需修改一下服务器的hosts文件即可,服务器上面所有的项目就能正常连接数据库了,是不是很方便呢
2.配置文件式开发
在我们的开发中经常会有一些需要预先定义好的变量或者常量,比如数据库连接配置、Sql语句等等,如果把它们写死在代码里面,会显得很不灵活,因为Java是一种编译型开发语言,修改代码需要重新编译和部署,于是我们可以使用这种方法——将变量存放到配置文件中。
这样如果我们修改了变量内容,也不需要重新编译,像Spring、Mybatis等大多是Java框架都是利用这种方式来工作的。
下面举一个简单的例子:
首先我们新建一个config.properties的配置文件:
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://mydb:3306/test?characterEncoding=utf8&useSSL=true&serverTimezone=UTC
db.username=root
db.password=toor
这是一个简单的数据库连接配置文件,然后我们在代码中加载这个文件:
File file = new File("config.properties");
if(!file.exists() && file.isDirectory()){
throw new FileNotFoundException("缺少配置文件config.properties");
}
Properties prop = new Properties();
FileInputStream in = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(in, "UTF-8"); //解决文件编码问题
prop.load(reader); //加载配置内容到prop对象中
这样我们就可以通过Properties提供的方法来获取相应的配置了,如:
String url = prop.getProperty("db.url");
加载配置文件还有一种方式:
InputStream in = getClass().getResourceAsStream("config.properties");
prop.load(in);
这是通过classpath来获取配置文件,但是要求配置文件必须放在classpath中,而且需要注意的是,如果你将项目打包成jar包,配置文件也会被一起打包,没办法对文件进行修改了。
使用Properties prop = System.getProperties();还可以获取JVM的一些配置,比如系统换行符等信息,在读取解析本地文件内容时是很有用:System.getProperty("line.separator")
以上只是使用配置文件的一个简单说明,这种方式在开发一些工具程序的时候非常有用。
写在最后
今天先写到这吧,下一篇文章将给大家分享一个很实用的方法:利用Maven打造一个通用的工程,可以把一些通用的配置信息、类、方法进行统一管理,并且为其它工程提供服务,敬请期待哟
本文为作者kMacro原创,转载请注明来源:http://www.jianshu.com/p/830cad891984。
Java开发小技巧(一)的更多相关文章
- Java开发小技巧(三):Maven多工程依赖项目
前言 本篇文章基于Java开发小技巧(二):自定义Maven依赖中创建的父工程project-monitor实现,运用我们自定义的依赖包进行多工程依赖项目的开发. 下面以多可执行Jar包项目的开发为例 ...
- Java开发小技巧(二):自定义Maven依赖
前言 我们在项目开发中经常会将一些通用的类.方法等内容进行打包,打造成我们自己的开发工具包,作为各个项目的依赖来使用. 一般的做法是将项目导出成Jar包,然后在其它项目中将其导入,看起来很轻松,但是存 ...
- Java开发小技巧(六):使用Apache POI读取Excel
前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...
- Java开发小技巧(五):HttpClient工具类
前言 大多数Java应用程序都会通过HTTP协议来调用接口访问各种网络资源,JDK也提供了相应的HTTP工具包,但是使用起来不够方便灵活,所以我们可以利用Apache的HttpClient来封装一个具 ...
- Java开发小技巧(四):配置文件敏感信息处理
前言 不知道在上一篇文章中你有没有发现,jdbc.properties中的数据库密码配置是这样写的: jdbc.password=5EF28C5A9A0CE86C2D231A526ED5B388 其实 ...
- java开发小技巧
链接地址:http://www.cnblogs.com/zkh101/p/8083368.html 人脸识别地址:http://blog.csdn.net/gitchat/article/detail ...
- Windows统一平台: 开发小技巧
Windows统一平台: 开发小技巧 技巧一: 在手机端拓展你应用的显示区域.(WP8.1中也适用) 对于Windows Phone系统的手机, 手机屏幕最上方为系统状态栏(System Tray), ...
- flex开发小技巧集锦
关于flex开发网上有非常多的相关信息介绍,因此我们要想学习关于flex开发的知识信息技能是一件非常简单和方便的事情.而针对于flex开发小编要告诉大家的是一些flex开发小技巧.利用这些小技巧能够有 ...
- TP开发小技巧
TP开发小技巧原文地址http://wp.chenyuanzhao.com/wp/2016/07/23/tp%E5%BC%80%E5%8F%91%E5%B0%8F%E6%8A%80%E5%B7%A7/ ...
随机推荐
- HDU1754 I hate it(线段树 单点修改)
好久没打线段树,来一道练练手,但说句实话,I really hate it!!!! 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管 ...
- Here We Go(relians) Again
Here We Go(relians) Again Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- ASP.NET Core的身份认证框架IdentityServer4(3)-术语的解释
IdentityServer4 术语 IdentityServer4的规范.文档和对象模型使用了一些你应该了解的术语. 身份认证服务器(IdentityServer) IdentityServer是一 ...
- [译]ASP.NET Core 2.0 部分视图
问题 如何在ASP.NET Core 2.0中使用部分视图来重用页面的公共部分? 答案 新建一个空项目,在Startup中添加MVC服务和中间件: public void ConfigureServi ...
- Android 开发笔记___图像按钮__imageButton
IMAGEBUTTON 其实派生自image view,而不是派生自button.,image view拥有的属性和方法,image button 统统拥有,只是imagebutton有个默认的按钮外 ...
- CentOS7修改网卡名称,禁用ipv6
有时候新装的CentOS7系统网卡默认名称是eno16777736,为方便改成传统eth0 修改网络配置文件 # cd /etc/sysconfig/network-script/ # vim ifc ...
- JavaScript系列----AJAX机制详解以及跨域通信
1.Ajax 1.1.Ajax简介 Ajax简介这一部分我们主要是谈一下ajax的起源,ajax是什么?因为这些是跟技术无关的.所以,大多细节都是一笔带过. Ajax的起源? Ajax一词源于2005 ...
- kafka学习笔记1:测试环境搭建
最近因为架构中引入了kafka,一些之前在代码中通过RPC调用强耦合但是适合异步处理的内容可以用kafka重构一下. 考虑从头学一下kafka了解其特性和使用场景. 环境选择 首先是测试环境的搭建,平 ...
- MUI开发记录——我的考勤
已经好久没有更新技术博客了,因为最近一直在做跨平台web app应用的开发,由于是刚做这个,也没太多经验同大家分享,可我是一个闲不住的人,我还是决定于百忙之中抽空整理一篇,记录下开发历程......— ...
- (11.13)Java小知识!
今天想要与大家分享一下有关于构造方法的知识! 构造方法的定义与作用 构造方法是一种特殊类型的方法.当一个对象被创建的时候,构造方法用来初始化对象,也就是说构造方法其实是一个名词而不是动词,像我刚刚开始 ...