JDBC硬编码连接
1. import java.sql.Connection;
2. import java.sql.DriverManager;
3. import java.sql.SQLException;
4.
5. public class JDBCConn {
6. public static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
7. public static final String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=books";
8. public static final String USER = "sa";
9. public static final String PWD = "ok";
10. private Connection conn = null;
11.
12. public Connection getConn() {
13. try {
14. Class.forName(DRIVER);
15. conn = DriverManager.getConnection(URL,USER,PWD);
16. catch (ClassNotFoundException e) {
17. // TODO Auto-generated catch block
18. e.printStackTrace();
19. catch (SQLException e) {
20. // TODO Auto-generated catch block
21. e.printStackTrace();
22. }
23. return conn;
24. }
25. }
读取propperties配置文件连接
1.创建读取配置文件的类
1. import java.io.IOException;
2. import java.io.InputStream;
3. import java.util.Properties;
4. /**
5. * 单列类:获取属性文件
6. * @author macau
7. */
8. public class Env extends Properties {
9. /**
10. * 构造方法
11. */
12. private Env() {
13. this.getClass().getResourceAsStream(
14. "/db.properties");//创建输出流
15. try {
16. //读取流
17. is.close();
18. catch (IOException e) {
19. e.printStackTrace();
20. }
21. }
22.
23. private static Env instance;//当前类实例
24.
25. /**
26. * 获得当前实例
27. * @return
28. */
29. public static Env getInstance() {
30. if (instance == null) {
31. makeInstance();
32. }
33. return instance;
34. }
35.
36. /**
37. * 创建当前类实例
38. */
39. private static synchronized void makeInstance() {
40. if (instance == null) {
41. new Env();
42. }
43. }
44. }
2.通过读取配置文件的类获取数据库连接参数
1. import java.sql.Connection;
2. import java.sql.DriverManager;
3. import java.sql.SQLException;
4.
5. public class PropConn {
6. private String driver = Env.getInstance().getProperty("driver");
7. private String url = Env.getInstance().getProperty("url");
8. private String user = Env.getInstance().getProperty("user");
9. private String pwd = Env.getInstance().getProperty("pwd");
10.
11. private Connection conn = null;
12.
13. public Connection getConn(){
14. try {
15. Class.forName(driver);
16. conn = DriverManager.getConnection(url,user,pwd);
17. catch (ClassNotFoundException e) {
18. // TODO Auto-generated catch block
19. e.printStackTrace();
20. catch (SQLException e) {
21. // TODO Auto-generated catch block
22. e.printStackTrace();
23. }
24. return conn;
25. }
26. }
配置JNDI获取
J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。
在应用服务器连接池里进行数据库连接以及对应的jndi配置,配置好的JNDI的名称为 jdbc/myds
接下来在spring利用JNDI配置数据源
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>jdbc/myapp</value></property>
1.在Tomcat安装目录的conf目录下的context.xml文件的<Context/>标记中添加配置
1. <Resource name="jdbc/books" auth="Container" type="javax.sql.DataSource"
2. maxActive="1000" maxIdel="30" maxWait="10000"
3. username="sa" password="ok"
4. driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
5. url="jdbc:sqlserver://localhost:1433;DatabaseName=books" />
2.编码获取数据库连接
1. import java.sql.Connection;
2. import java.sql.SQLException;
3.
4. import javax.naming.Context;
5. import javax.naming.InitialContext;
6. import javax.naming.NamingException;
7. import javax.sql.DataSource;
8.
9. public class JNDIConn {
10. private Connection conn = null;
11.
12. public Connection getConn() {
13. try {
14. new InitialContext();
15. DataSource source = (DataSource) context
16. "java:comp/env/jdbc/books");
17. conn = source.getConnection();
18. catch (NamingException e) {
19. e.printStackTrace();
20. catch (SQLException e) {
21. e.printStackTrace();
22. }
23. return conn;
24. }
25. }
连接池
1. 目前开源的连接池有
Proxool DBCP DBPool 等
dbcp
dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧。
这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。这个连接池的配置参见附件压缩包中的:dbcp.xml
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性
有所下降,此外不提供连接池监控
2)proxool
proxool这个连接池可能用到的人比较少,但也有一定知名度,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
这个连接池的配置参见附件压缩包中的:proxool.xml。
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性有一定问题,有一个需要长时间跑批的任务场景任务,同样的代码
在另外2个开源连接池中成功结束,但在proxool中出现异常退出。
但是proxool有一个优势--连接池监控,这是个很诱人的东西,大概的配置方式就是在web.xml中添加如下定义:
<servlet>
<servlet-name>admin</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>admin</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>
并在应用启动后访问:http://localhost:8080/myapp/admin这个url即可监控
不过proxool本身的包在监测使用中会有编码问题,附件中有一个
解决此问题的包,参见附件压缩包中的:proxool-0.9.0RC3.jar。另外需要jdk1.5以上的环境。
2. 商业连接池
weblogic的连接池
websphere的连接池