构建数据库连接的配置方法

以前我在写数据库连接的时候,都是在文件里写死的,或者一个简单地配置文件,只有一个数据库连接嘛,但是最近写一个测试工具的时候,需要很多数据库,而且有些还有分库规则,于是查找资料,完善了两个类,和xml的定义规则,分享出来。仅供参考,有任何指教请回复。不胜感谢 首先xml的配置格式定义如下 <?xml version="1.0" encoding="UTF-8"?> <config> <db-info> <id>oracle-test</id> <driver-name>oracle.jdbc.driver.OracleDriver</driver-name> <url>jdbc:oracle:thin:@127.0.0.1:1521:test</url> <user-name>admin</user-name> <password>admin</password> </db-info> <db-info> <id>mysql-test</id> <driver-name>com.mysql.jdbc.Driver</driver-name> <url>jdbc:mysql://127.0.0.1:3306</url> <user-name>root</user-name> <password>root</password> </db-info> </config> 然后我们有XmlConfigReader类,用来读取这个配置文件,并且返回对应的jdbcConfig对象。 这个对象就是一个model类,对应xml的属性 然后我们的DBUtil类会调用XmlConfigReader,通用的一般是传个 <id>mysql-test</id> 值,然后XmlConfigReader来读取返回,对象,然后在DBUtil里用这个对象得知来构造连接,我添加了一个简单的方法 public static Connection getConnection(String dbId,String dbName) throws ClassNotFoundException { Connection conn = null; try { //新建jdbc配置类。 XmlConfigReader xcr=new XmlConfigReader(); JdbcConfig jdbcconfig = xcr.getConnection(dbId,dbName); Class.forName(jdbcconfig.getDriverName()); //取得连接对象。 conn = DriverManager.getConnection(jdbcconfig.getUrl(), jdbcconfig.getUserName(), jdbcconfig.getPassword()); } catch (ClassNotFoundException e) { // 抛出 exception e.printStackTrace(); }catch(SQLException e) { e.printStackTrace(); } return conn; } 就是多传一个数据库名 然后XmlConfigReader哩对应有这个方法 //分库分表使用 public JdbcConfig getConnection(String dbId,String dbName) { SAXReader reader = new SAXReader(); // 拿到当前线程。 InputStream in = Thread.currentThread().getContextClassLoader() .getResourceAsStream("sys-config.xml"); try { Document doc = reader.read(in); Element rootElt = doc.getRootElement(); // 获取根节点 Iterator<?> iter = rootElt.elementIterator("db-info"); while (iter.hasNext()) { Element recordEle = (Element) iter.next(); String title: = recordEle.elementTextTrim("id"); if (title.equalsIgnoreCase(dbId)) { jdbcconfig.setDriverName(recordEle .elementTextTrim("driver-name")); jdbcconfig.setUrl(recordEle.elementTextTrim("url")+"/"+dbName); jdbcconfig.setUserName(recordEle .elementTextTrim("user-name")); jdbcconfig.setPassword(recordEle .elementTextTrim("password")); } } } catch (DocumentException e) { // 打印错误 e.printStackTrace(); } return jdbcconfig; } ...

2014-04-26 · 1 min · bystander

Spring3实例入门-Hello World

每次看到hello world,都有一种说不出的赶脚,想起了一个程序员,退休后写毛笔字,取笔研磨铺纸,大笔一挥,写下了“hello world”。 1.使用Maven生成项目结构 mvn archetype:generate -DgroupId=com.mkyong.core -DartifactId=Spring3Example -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 2.转换成Eclipse项目 mvn eclipse:eclipse 3.添加Spring3.0 依赖 在pom.xml文件里添加Spring 3.0 依赖,然后依赖会从Maven中央仓库自动下载 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mkyong.core</groupId> <artifactId>Spring3Example</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>Spring3Example</name> <url>http://maven.apache.org</url> <properties> <spring.version>3.0.5.RELEASE</spring.version> </properties> <dependencies> <!-- Spring 3 dependencies --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> </dependencies> </project> 4.Spring bean 写个简单的bean package com.mkyong.core; /** * Spring bean * */ public class HelloWorld { private String name; public void setName(String name) { this.name = name; } public void printHello() { System.out.println("Spring 3 : Hello ! " + name); } } 5.Spring bean配置文件 创建一个配置文件,在里面声明所有可用的Spring beans <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="helloBean" class="com.mkyong.core.HelloWorld"> <property name="name" value="Mkyong" /> </bean> </beans> 6.最终的目录结构 7.运行 package com.mkyong.core; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "SpringBeans.xml"); HelloWorld obj = (HelloWorld) context.getBean("helloBean"); obj.printHello(); } } 8.输出 Spring 3 : Hello ! Mkyong 9.Demo下载 Spring3-hello-world-example.zip 

2013-09-20 · 1 min · bystander

使用Maven创建Web项目

本文通过Maven完成一个简单的Web项目(注意,Spring配置不是重点,看看就行) 1.从Maven模板创建Web应用程序 命令格式如下: mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false 这就告诉Maven从**maven-archetype-webapp **这个模板来创建 友情提示:是不是太难记了..好吧,直接输入 mvn archetype:generate 根据向导来创建把。。 比如我这样写: > mvn archetype:generate -DgroupId=com.mkyong -DartifactId=CounterWebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] Generating project in Batch mode [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:1.0 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: com.mkyong [INFO] Parameter: packageName, Value: com.mkyong [INFO] Parameter: package, Value: com.mkyong [INFO] Parameter: artifactId, Value: CounterWebApp [INFO] Parameter: basedir, Value: /Users/mkyong/Documents/workspace [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: /Users/mkyong/Documents/workspace/CounterWebApp [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.147s [INFO] Finished at: Thu Dec 20 20:35:19 MYT 2012 [INFO] Final Memory: 12M/128M [INFO] ------------------------------------------------------------------------ 就创建了一个包名为com.mkyong,类名为CounterWebApp的项目了 2.Maven的Web程序目录结构 标准的web.xml部署描述文件生成了 CounterWebApp |-src |---main |-----resources |-----webapp |-------index.jsp |-------WEB-INF |---------web.xml |-pom.xml 对结构有疑问的去这里 ...

2013-09-20 · 3 min · bystander

Maven库依赖机制及添加自定义库

一.Maven库依赖机制 Maven的库依赖机制可以帮助我们自动下载依赖的库文件,并且还能更新版本。。 考虑一个情境来理解机制的工作原理,假设我们要使用Log4J库作为项目的日志记录。以下是我们要做的 1.传统的方式 1)访问Log4J网站http://logging.apache.org/log4j/2.x/ 2)下载Log4J的jar包 3)复制进项目的classpath里 4)手工包含到项目的依赖里 看到没,你要从头做到尾,如果Log4J更新了,你得再来一遍。。 2.Maven的方式 1)需要知道Log4J的Maven坐标(coordinates,这个暂时没想到好名字),就是这样的东西 <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> 然后Maven就会自动下载1.2.14版本的Log4J了。如果version这个元素没有,那么如果有了新版本,Maven会自动下载新版本的。 2)在pom.xml里声明这个Maven坐标 <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> </dependencies> 3)当Maven编译或者build的时候,Log4J会自动下载,放入本地仓库里 4)Maven全部接管 3.解释 搜索顺序前面说过了。本地-》中央-》远程仓库 Maven坐标咋来的,当然去中央仓库搜索之了,搜索结果清晰的令人发指 二.添加自定义库到本地仓库 有两个情况,需要我们包含自定义的库到本地仓库里 1是你想使用的jar文件不再中央仓库 2是你创建了一个自定义的jar包,需要另一个项目使用这个jar 比如,kaptche,一个第三方的java库,生成验证码,现在中央仓库没有了。 我们想要加到本地仓库里 1.mvn安装 下载kaptche,解压并且拷贝kaptcha-version.jar到其他任何你喜欢的地方,比如c盘,然后输入如下格式的命令 mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar 这里我这样输入 D:\>mvn install:install-file -Dfile=c:\kaptcha-2.3.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion=2.3 -Dpackaging=jar [INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'install'. [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Default Project [INFO] task-segment: [install:install-file] (aggregator-style) [INFO] ------------------------------------------------------------------------ [INFO] [install:install-file] [INFO] Installing c:\kaptcha-2.3.jar to D:\maven_repo\com\google\code\kaptcha\2.3\kaptcha-2.3.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: < 1 second [INFO] Finished at: Tue May 12 13:41:42 SGT 2009 [INFO] Final Memory: 3M/6M [INFO] ------------------------------------------------------------------------ 这样完成了。kaptcha已经存在本地库了 2.pom.xml配置一下 <dependency> <groupId>com.google.code</groupId> <artifactId>kaptcha</artifactId> <version>2.3</version> </dependency> 这个前面说过了,Maven坐标嘛

2013-09-19 · 1 min · bystander

Maven仓库详解

本文由我翻译合并了多篇文章,整理成一篇。 一.本地仓库(Local Repository) 本地仓库就是一个本机的目录,这个目录被用来存储我们项目的所有依赖(插件的jar包还有一些其他的文件),简单的说,当你build一个Maven项目的时候,所有的依赖文件都会放在本地仓库里,仓库供所有项目都可以使用 默认情况下,本地仓库在.m2目录,windows下的话就是你的用户名目录下的.m2目录 1.更新本地仓库目录 找到你的MAVEN_HOME目录下的conf/setting.xml文件,更新localRepository节点 <settings> <!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ~/.m2/repository <localRepository>/path/to/local/repo</localRepository> --> <localRepository>D:/maven/repo</localRepository> 2.保存一下 完成了。新的本地仓库被放在了D:/maven/repo 看一下这个目录 二.中央仓库(central repository) 当我们build一个Maven项目的时候,Maven会检查我们的pom.xml文件,来定义项目的依赖,然后Maven会在本地仓库里查找,如果没有找到,就去maven的中央库去下载,地址是 http://search.maven.org/#browse 看起来是这样的 注意啊,虽然这个是新的中央仓库,但有时候还是会从_“http://repo1.maven.org/maven/_这个旧仓库下载东西,不过不要紧,理解就行了 三.远程仓库(Remote Respository) 在Maven中,当你在pom.xml中生命的依赖既不在本地库,也不在中央库的时候,就会报错。 1.例子 org.jvnet.localizer这个包仅在java.net的仓库里有(以前是,现在中央仓库也有了。但理解就行) <dependency> <groupId>org.jvnet.localizer</groupId> <artifactId>localizer</artifactId> <version>1.8</version> </dependency> 当我们build的时候,会失败,并输出未找到错误信息 2.声明java.net仓库 为了告诉Maven从远程仓库里获取依赖,我们需要声明一个远程仓库,在pom.xml里这样写 <repositories> <repository> <id>java.net</id> <url>https://maven.java.net/content/repositories/public/</url> </repository> </repositories> 这样,Maven搜索依赖的顺序就是: 1)搜索本地仓库,没有找到,就去第2步,否则退出 2)搜索中央仓库,没有找到,就去第3步,否则退出 3)去java.net远程仓库获取,没有找到,就报错,否则退出 补充:JBoss也有个远程仓库,可以如下配置: <project ...> <repositories> <repository> <id>JBoss repository</id> <url>http://repository.jboss.org/nexus/content/groups/public/</url> </repository> </repositories> </project>

2013-09-19 · 1 min · bystander

Maven安装教程

Maven不需要作为服务组件安装到windows上,仅仅需要下载,解压,然后配置一下环境变量就行了 1.JDK和JAVA_HOME 确保JDK已经安装,同时JAVA_HOME变量已经添加到了windows环境变量里,指向jdk目录 2.下载Maven 去Maven主页,选个版本,点击下载 3.解压 解压下载的zip文件,重命名,比如我放到D盘的Maven目录 4.添加MAVEN_HOME环境变量 添加一个新的环境变量MAVEN_HOME到环境变量,指向Maven目录 5.添加path变量 更新Path变量,把Maven的bin目录添加进去,这样就可以在任何地方执行mvn命令了 6.验证 打开命令行,输入 mvn -version 如果看到类似下面的 C:\Documents and Settings\mkyong>mvn -version Apache Maven 2.2.1 (r801777; 2009-08-07 03:16:01+0800) Java version: 1.6.0_13 Java home: C:\Program Files\Java\jdk1.6.0_13\jre Default locale: en_US, platform encoding: Cp1252 OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows" Maven已经成功的安装配置了。 老外写的太详细了。。。

2013-09-19 · 1 min · bystander