JDBC硬编码连接
- importjava.sql.Connection;
- importjava.sql.DriverManager;
- importjava.sql.SQLException;
- publicclassJDBCConn{
- publicstaticfinalStringDRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
- publicstaticfinalStringURL="jdbc:sqlserver://localhost:1433;DatabaseName=books";
- publicstaticfinalStringUSER="sa";
- publicstaticfinalStringPWD="ok";
- privateConnectionconn=null;
- publicConnectiongetConn(){
- try{
- Class.forName(DRIVER);
- conn=DriverManager.getConnection(URL,USER,PWD);
- }catch(ClassNotFoundExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(SQLExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- returnconn;
- }
- }
读取propperties配置文件连接
1.创建读取配置文件的类
- importjava.io.IOException;
- importjava.io.InputStream;
- importjava.util.Properties;
- /**
- *单列类:获取属性文件
- *@authormacau
- */
- publicclassEnvextendsProperties{
- /**
- *构造方法
- */
- privateEnv(){
- InputStreamis=(InputStream)this.getClass().getResourceAsStream(
- "/db.properties");//创建输出流
- try{
- load(is);//读取流
- is.close();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- privatestaticEnvinstance;//当前类实例
- /**
- *获得当前实例
- *@return
- */
- publicstaticEnvgetInstance(){
- if(instance==null){
- makeInstance();
- }
- returninstance;
- }
- /**
- *创建当前类实例
- */
- privatestaticsynchronizedvoidmakeInstance(){
- if(instance==null){
- instance=newEnv();
- }
- }
- }
2.通过读取配置文件的类获取数据库连接参数
- importjava.sql.Connection;
- importjava.sql.DriverManager;
- importjava.sql.SQLException;
- publicclassPropConn{
- privateStringdriver=Env.getInstance().getProperty("driver");
- privateStringurl=Env.getInstance().getProperty("url");
- privateStringuser=Env.getInstance().getProperty("user");
- privateStringpwd=Env.getInstance().getProperty("pwd");
- privateConnectionconn=null;
- publicConnectiongetConn(){
- try{
- Class.forName(driver);
- conn=DriverManager.getConnection(url,user,pwd);
- }catch(ClassNotFoundExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(SQLExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- returnconn;
- }
- }
配置JNDI获取
使用JNDI,数据库连接,数据池和连接的管理都在J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。
在应用服务器连接池里进行数据库连接以及对应的jndi配置,配置好的JNDI的名称为jdbc/myds
接下来在spring利用JNDI配置数据源
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr><property name="jndiName"><value>jdbc/myapp</value></property>
<wbr><wbr><wbr></bean></wbr></wbr></wbr>
1.在Tomcat安装目录的conf目录下的context.xml文件的<Context/>标记中添加配置
- <Resourcename="jdbc/books"auth="Container"type="javax.sql.DataSource"
- maxActive="1000"maxIdel="30"maxWait="10000"
- username="sa"password="ok"
- driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
- url="jdbc:sqlserver://localhost:1433;DatabaseName=books"/>
2.编码获取数据库连接
- importjava.sql.Connection;
- importjava.sql.SQLException;
- importjavax.naming.Context;
- importjavax.naming.InitialContext;
- importjavax.naming.NamingException;
- importjavax.sql.DataSource;
- publicclassJNDIConn{
- privateConnectionconn=null;
- publicConnectiongetConn(){
- try{
- Contextcontext=newInitialContext();
- DataSourcesource=(DataSource)context
- .lookup("java:comp/env/jdbc/books");
- conn=source.getConnection();
- }catch(NamingExceptione){
- e.printStackTrace();
- }catch(SQLExceptione){
- e.printStackTrace();
- }
- returnconn;
- }
- }
连接池
1. 目前开源的连接池有
Proxool DBCP DBPool 等
1)dbcp
dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧。
这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。这个连接池的配置参见附件压缩包中的:dbcp.xml
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性
有所下降,此外不提供连接池监控
2)proxool
proxool这个连接池可能用到的人比较少,但也有一定知名度,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
这个连接池的配置参见附件压缩包中的:proxool.xml。
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性有一定问题,有一个需要长时间跑批的任务场景任务,同样的代码
在另外2个开源连接池中成功结束,但在proxool中出现异常退出。
但是proxool有一个优势--连接池监控,这是个很诱人的东西,大概的配置方式就是在web.xml中添加如下定义:
<wbr><wbr><wbr><servlet><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><servlet-name>admin</servlet-name><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr></servlet><br><wbr><wbr><servlet-mapping><br><wbr><wbr><wbr><wbr><wbr><servlet-name>admin</servlet-name><br><wbr><wbr><wbr><wbr><wbr><url-pattern>/admin</url-pattern><br><wbr><wbr></servlet-mapping><wbr><wbr><br> 并在应用启动后访问:http://localhost:8080/myapp/admin这个url即可监控<br> 不过proxool本身的包在监测使用中会有编码问题,附件中有一个<br> 解决此问题的包,参见附件压缩包中的:proxool-0.9.0RC3.jar。另外需要jdk1.5以上的环境。<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
2. 商业连接池
weblogic的连接池
websphere的连接池