网络推荐

推荐给好友 上一篇 | 下一篇

单实例模式数据库连接池+log4j


声明
  • 声明: 1、任何网站转载本站点内容时需注明来自JAVA-CN.COM,否则我们有权将根据《互联网著作权行政保护办法》追究其相应法律责任; 2、JAVA中文站社区刊登此文只为传递信息,并不表示赞同或者反对.

el4k8j*s@(a7W*Fpackage cn.ifnic.db;JAVA中文站社区门户U'r(b/w,kF
import java.io.*;JAVA中文站社区门户}4vq&RE2L'v
import java.sql.*;
nUE5rZSimport java.util.*;
%XYk$k |_import java.util.Date;
&~"F$@-UZimport org.apache.log4j.Logger;JAVA中文站社区门户:IEZ E/g/x ~'V
import org.apache.log4j.PropertyConfigurator;
Q@1@.Pv9~import cn.ifnic.util.Common;JAVA中文站社区门户5h*mdyV
import cn.ifnic.util.GetProperties;JAVA中文站社区门户QjT%LN.{$Q[
/**
Kd9^1@P'K *
*zi l2n^i.C * <p>Title: IFNIC</p>JAVA中文站社区门户?y6y\Q-`
 *JAVA中文站社区门户r4p;m"Q6b M
 * <p>Description: 类DBConnectionManager,连接池的管理类</p>
S k E,PE6[ *JAVA中文站社区门户R3R9Y"O*|CK
 * <p>Copyright: Copyright (c) 2005 www.ifnic.cn</p>JAVA中文站社区门户5T1w,My#we%LN
 *
4i zJJnS.M| * <p>Company: IFNIC.CN</p>
Yg| W_0dt%H *JAVA中文站社区门户&^6VUTSB4m-[4i
 * @author IFNIC
M,XT8?X#G+u * @version 1.1.0JAVA中文站社区门户 z2[6t JPm%Iu
 */
3cb%o#jG r;D}`5|/v!po/**JAVA中文站社区门户6]8\"B,sXr{:[
 * 管理类DBConnectionManager支持对一个或多个由属性文件定义的数据库连接JAVA中文站社区门户WQ6m,?Y5w
 * 池的访问.客户程序可以调用getInstance()方法访问本类的唯一实例.
Do{-tk.E e */
2S.e!Yj S'qp!QO;{8ipublic class DBConnectionManager {JAVA中文站社区门户2DPDZ1e"j _1@
    static private DBConnectionManager instance; // 唯一实例JAVA中文站社区门户$}+q7qESFB0SwH
    static private int clients;
'zJX7[PE;{    private Vector drivers = new Vector();
$k&[!{i:?;klX    private Logger logger;
lx:@ yU$yo3I+`-t    //private PrintWriter log;JAVA中文站社区门户|#]v!z(cHa"z
    private Hashtable pools = new Hashtable();
2|5LFR'T },K0Rk    /**JAVA中文站社区门户UB X,}5j
     * 返回唯一实例.如果是第一次调用此方法,则创建实例JAVA中文站社区门户5E&uAiNm
     *
%Ka I$qHUx     * @return DBConnectionManager 唯一实例
4w7Nyu'T5c     */
%{W%Ow3L~    static synchronized public DBConnectionManager getInstance() {JAVA中文站社区门户eM$c-O_-W
        if (instance == null) {JAVA中文站社区门户*{D Mc6aw9MX5Se
            instance = new DBConnectionManager();JAVA中文站社区门户.jUOG)TG
        }
7sN5G%uY"oP/l        clients++;JAVA中文站社区门户7W U"?5s7cK
        return instance;
-Wzx6P/Y    }
%W&J;I4f2~N m    /**JAVA中文站社区门户DKhA4|KR3q7x$U
     * 建构函数私有以防止其它对象创建本类实例JAVA中文站社区门户`6X0?"o*G@5l
     */
sW h2\4}T    private DBConnectionManager() {JAVA中文站社区门户(gLVt8L~"a(J2u
        init();JAVA中文站社区门户JIzs o A4ls X+z
    }
yldG!c;E    /**JAVA中文站社区门户5B lq}'^&|~Jxf(_b
     * 将连接对象返回给由名字指定的连接池JAVA中文站社区门户m:k)Jrd0YN~k
     *JAVA中文站社区门户Vm'aIZYg["NA
     * @param name 在属性文件中定义的连接池名字JAVA中文站社区门户u&d o+]t*II7w d*w
     * @param con 连接对象
;k _"XMt7H     */JAVA中文站社区门户(As4g!FM0@V1\
    public void freeConnection(String name, Connection con) {JAVA中文站社区门户 H[/QN \@
        DBConnectionPool pool = (DBConnectionPool) pools.get(name);JAVA中文站社区门户.c;EmDl8H:B
        if (pool != null) {JAVA中文站社区门户,m~,o\ H
            pool.freeConnection(con);
YR`1B5ucTvT,D+h        }JAVA中文站社区门户GNh-U!dG.t
    }JAVA中文站社区门户x+Q(LXo)]t
    /**
}_7I/J,My&r%XRf     * 获得一个可用的(空闲的)连接.如果没有可用连接,且已有连接数小于最大连接数JAVA中文站社区门户0h3~ qTq[
     * 限制,则创建并返回新连接
V7oI}4}p j     *JAVA中文站社区门户w9K&N6@p n
     * @param name 在属性文件中定义的连接池名字
2gb'}F[+aOh"x     * @return Connection 可用连接或nullJAVA中文站社区门户3T4Q2o!E0Z3Zh
     */
+n;`V TX;X    public Connection getConnection(String name) {JAVA中文站社区门户:@(mpJ#|$GK1w+?n:?/W;U
        DBConnectionPool pool = (DBConnectionPool) pools.get(name);JAVA中文站社区门户6GS { ?#I U
        if (pool != null) {
.ur6_^/OH,P9k            return pool.getConnection();JAVA中文站社区门户Ut O.x3A2n
        }
)[%Y5a9@Nx[JM(G        return null;
y-o9A2o.r;Ab;v xN    }JAVA中文站社区门户I(iN"e%Idp
    /**JAVA中文站社区门户h4sO'I|o4Y(h `
     * 获得一个可用连接.若没有可用连接,且已有连接数小于最大连接数限制,
8I5y4D!L/_FU     * 则创建并返回新连接.否则,在指定的时间内等待其它线程释放连接.JAVA中文站社区门户l(E'] mE%M3R7XS%O;f
     *JAVA中文站社区门户/Hg/o"t v8Jp
     * @param name 连接池名字
Ypjh(Z     * @param time 以毫秒计的等待时间
{[S8T$PS     * @return Connection 可用连接或nullJAVA中文站社区门户.k2S2\ N S8id{'o
     */JAVA中文站社区门户t u4N%M(T#w
    public Connection getConnection(String name, long time) {JAVA中文站社区门户 g7F%RC,WKo
        DBConnectionPool pool = (DBConnectionPool) pools.get(name);JAVA中文站社区门户$J+{"bw ]7c;yF
        if (pool != null) {
J/XFb {Z)nQ            return pool.getConnection(time);
/jB N"\(?4w*]        }
}6}d#g&Hi5z        return null;JAVA中文站社区门户ff:M WCkR
    }JAVA中文站社区门户/`:Uj8N$^+y Z
    /**JAVA中文站社区门户X,uB\ ^A-uvx:h/W
     * 关闭所有连接,撤销驱动程序的注册
`3`!?qQw     */
|,Ak3g-r    public synchronized void release() {JAVA中文站社区门户`q+Ae J G C s7j
        // 等待直到最后一个客户程序调用
%K+Yvj kgZ$w!_        if (--clients != 0) {JAVA中文站社区门户+}#ZBlTb D;Os:@7R
            return;JAVA中文站社区门户)W"MSbxw@"H*j2d
        }JAVA中文站社区门户&g RB,VA^})E
        Enumeration allPools = pools.elements();JAVA中文站社区门户}| SO C_/SP
        while (allPools.hasMoreElements()) {JAVA中文站社区门户u8U d.v6~
            DBConnectionPool pool = (DBConnectionPool) allPools.nextElement();JAVA中文站社区门户f D:_uwvG
            pool.release();JAVA中文站社区门户OcH{s
        }JAVA中文站社区门户Zb\0W~7D/W1~
        Enumeration allDrivers = drivers.elements();
8kw3k9D+[F'^@T.B        while (allDrivers.hasMoreElements()) {JAVA中文站社区门户/em&zz n*Xp
            Driver driver = (Driver) allDrivers.nextElement();JAVA中文站社区门户0b m gi$U,TC9MGz
            try {JAVA中文站社区门户)rW!`*w Gvj|
                DriverManager.deregisterDriver(driver);JAVA中文站社区门户4r,Ri(|mbe cW
                logger.info("撤销JDBC驱动程序 " + driver.getClass().getName() + "的注册");
$thT]ms            } catch (SQLException e) {
bCA:p m(otF^                logger.error("无法撤销下列JDBC驱动程序的注册: " + driver.getClass().getName(),JAVA中文站社区门户/`a.XGtz5cg^w/?R
                             e.getNextException());
2i&wizl            }
0^^6eH)[        }JAVA中文站社区门户7]8Hef4wU8^
    }
Hv&GP }5xP#N    /**JAVA中文站社区门户*kt4}/`af+yg
     * 根据指定属性创建连接池实例.JAVA中文站社区门户M l Lh9ln Dn
     *JAVA中文站社区门户9h-n| m]Lkb
     * @param props 连接池属性
&FCTp k.|Xd     */
l`cn9y(]o    private void createPools(Properties props) {JAVA中文站社区门户Q+Pw#aicY
        Enumeration propNames = props.propertyNames();JAVA中文站社区门户+m AZV:Fr"p#Z
        while (propNames.hasMoreElements()) {
{E(c1r,x/_9k%X E3gK5KD            String name = (String) propNames.nextElement();JAVA中文站社区门户 U4i v_b9l\-NX
            if (name.endsWith(".url")) {
LnI*A w7zQ                String poolName = name.substring(0, name.lastIndexOf("."));
(n7ES/R9f&U|_3yN                String url = props.getProperty(poolName + ".url");JAVA中文站社区门户$F$A;t;H'q
                if (url == null) {
P;[ ^}p"k2Y*a                    logger.error("没有为连接池" + poolName + "指定URL");JAVA中文站社区门户-i"d8x5d~;F
                    continue;JAVA中文站社区门户Lih/PU}
                }JAVA中文站社区门户W/] W~x
                String user = props.getProperty(poolName + ".user");JAVA中文站社区门户 {P%PWm
                String password = props.getProperty(poolName + ".password");
2VJ8j^ U Tr%h                String maxconn = props.getProperty(poolName + ".maxconn", "0");JAVA中文站社区门户u dW:] \x
                int max;
F M;Ti Z.e.}                try {
]sI8Pg&X1@E \                    max = Integer.valueOf(maxconn).intValue();
VuT:}:~sNO                } catch (NumberFormatException e) {JAVA中文站社区门户Gi;}gN
                    logger.error("错误的最大连接数限制: " + maxconn + " .连接池: " +
X;N:pHQ[                                 poolName);
H)P%F)fm2In,dmR$w                    max = 0;
n$Y Z_Q o!m                }JAVA中文站社区门户4oc#e(~DK.u\
                DBConnectionPool pool =JAVA中文站社区门户!YHk9C"d%Z
                        new DBConnectionPool(poolName, url, user, password, max);JAVA中文站社区门户 Bs3M'UD
                pools.put(poolName, pool);JAVA中文站社区门户^`9i+t2u'G x pK
                logger.info("成功创建连接池" + poolName);JAVA中文站社区门户'h%A e5t(Y(O
            }JAVA中文站社区门户*@ fxK${b
        }
J(wz+qi*H{    }JAVA中文站社区门户3|3sM{8M\
    /**
B!rX?,Zx!_     * 读取属性完成初始化
4Zz$u i#| e*l2Ya7mF'j     */JAVA中文站社区门户"?ChKw:qYk'v&o
    private void init() {
)w3F;q"M%y+tm        GetProperties getProperties = new GetProperties();
^2qj@5[f*O e        if (getProperties.getProperties("DBConnectionManager") != null) {JAVA中文站社区门户L u9_!Z+C9c3A
            PropertyConfigurator.configure(getProperties.getProperties(
9}"v"xQ8Z2SF                    "DBConnectionManager"));
$h~ lF i+zkN n+K        }JAVA中文站社区门户,|"A U#^_/tT$M0P*E
        logger = Logger.getLogger(Common.class.getName());JAVA中文站社区门户,fP)Yq@sto@
        if (getProperties.getProperties("db") != null) {
` F v-n Y)?n            Properties pp=getProperties.getProperties("db");
`$ECe+C+|:n6[?            loadDrivers(pp);
3O;hI\mdt{            createPools(pp);
]0~`6q1pP&v        } else {JAVA中文站社区门户,|G+lzs7c
            return;JAVA中文站社区门户*{$W7Ze%}n8}uj
        }JAVA中文站社区门户j(R0W`A\?8H [
    }JAVA中文站社区门户Zw7GQ/p&b
    /**
8s.j!w!ZEH,h     * 装载和注册所有JDBC驱动程序
GDM||     *JAVA中文站社区门户VJj_a'S'm\
     * @param props 属性JAVA中文站社区门户Lq%o+m3MgR f [5u
     */
*~g._,SvC Z    private void loadDrivers(Properties props) {
zu1qK Lc        String driverClasses = props.getProperty("drivers");
wdAn5_#MD        StringTokenizer st = new StringTokenizer(driverClasses);JAVA中文站社区门户L9CS2gfpU(^b
        while (st.hasMoreElements()) {JAVA中文站社区门户5{g3z#dacc|u
            String driverClassName = st.nextToken().trim();
2I1h _/FAi            try {
yE]0Cvn                Driver driver = (Driver)
q9hO*b'j0\:cWJ                                Class.forName(driverClassName).newInstance();
Ws1ZBN?,ft%D.l                DriverManager.registerDriver(driver);JAVA中文站社区门户 x-x H&UpZ
                drivers.addElement(driver);JAVA中文站社区门户?,_Gn P^;} C
                logger.info("成功注册JDBC驱动程序" + driverClassName);JAVA中文站社区门户;ASksdg
            } catch (Exception e) {
m*L m?g+g                logger.error("无法注册JDBC驱动程序: " +
V-`)OAB                             driverClassName + ", 错误: " + e);
V6k5P2N E            }JAVA中文站社区门户6KN:C&M];@2r
        }
SK jx-@2WoG    }JAVA中文站社区门户)x)]9PM%cw
 
d/b\&}3z*~$Jo    /**JAVA中文站社区门户 @Zt~7pf
     * 此内部类定义了一个连接池.它能够根据要求创建新连接,直到预定的最JAVA中文站社区门户9[!^s8c;S"M
     * 大连接数为止.在返回连接给客户程序之前,它能够验证连接的有效性.JAVA中文站社区门户Qrc5Dj'q
     */JAVA中文站社区门户!t RRl)jW
    class DBConnectionPool {
B V;s_ r5v8M        private int checkedOut;JAVA中文站社区门户b-ITz3bj
        private Vector freeConnections = new Vector();
8|oD&GNvT        private int maxConn;
9TTl jT2\.M        private String name;
2b @+L{'J,u9P#f so1[.v        private String password;
"f xqx;h(S        private String URL;
QjsU h4OLGE        private String user;JAVA中文站社区门户*p,Z9o!i9d u dunZ:^3F
        private Logger logger;
.E"fwE vc R        /**
M1l Xo,`*B-O         * 创建新的连接池
n&v\3^-ice         *
;c rhY/Ci3sJ(HP)X         * @param name 连接池名字JAVA中文站社区门户jcb1iG)a!F?1N
         * @param URL 数据库的JDBC URL
M;p$Lk!K2m         * @param user 数据库帐号,或 null
y"JS^i7w'~B         * @param password 密码,或 null
_e;v {2? d         * @param maxConn 此连接池允许建立的最大连接数
e6O6Io&o-b         */JAVA中文站社区门户4gE}}Md.B8zcj
        public DBConnectionPool(String name, String URL, String user,JAVA中文站社区门户`PO)S6qv
                                String password,
L/a8{$T_k S8ge0M                                int maxConn) {
x%C%P qi            this.name = name;
U2x+E~g*q4@            this.URL = URL;JAVA中文站社区门户k]c n~x1ih
            this.user = user;
.R0lKc+OL)vGv            this.password = password;JAVA中文站社区门户CdiX ~#Od8v
            this.maxConn = maxConn;JAVA中文站社区门户9e/TU!?.q ed,YT
            GetProperties getProperties = new GetProperties();
']Cgm3H            if (getProperties.getProperties("DBConnectionManager") != null) {
8Ui:I&Yy!? C Eh'A\                PropertyConfigurator.configure(getProperties.getProperties(JAVA中文站社区门户 DU&Q$ntwsa#H
                        "DBConnectionManager"));JAVA中文站社区门户^DPSq"U
                logger = Logger.getLogger(Common.class.getName());
%x m1VX)v\[+I            } else {
)n(w vDp/|1i#X                return;JAVA中文站社区门户 rg_(R.\R7@
            }
/O*i`,C A1mt        }JAVA中文站社区门户a5q G-e4Z.e
        /**JAVA中文站社区门户3i5w#Ax(E
         * 将不再使用的连接返回给连接池
TJi'N-fg.nG         *
IQ T@B2owAj         * @param con 客户程序释放的连接JAVA中文站社区门户4VX"]zA$vU$f tg
         */
"a"bZL*G"erG        public synchronized void freeConnection(Connection con) {
7S Z!tQ^            // 将指定连接加入到向量末尾JAVA中文站社区门户_ x8z`2j+u)J
            freeConnections.addElement(con);JAVA中文站社区门户nqEvf2CE Nnz ]
            checkedOut--;JAVA中文站社区门户Que,d_1b k"a
            notifyAll();JAVA中文站社区门户aC)FZ{0]G9t)p
        }
3W]0V%U%x PmA        /**JAVA中文站社区门户1K,sdhC8N+r
         * 从连接池获得一个可用连接.如没有空闲的连接且当前连接数小于最大连接JAVA中文站社区门户%]$U3ya+y2Pq/r
         * 数限制,则创建新连接.如原来登记为可用的连接不再有效,则从向量删除之,
(y1X sbq(`         * 然后递归调用自己以尝试新的可用连接.
`XF }xb         */
#R:nl&S7R"v        public synchronized Connection getConnection() {
.B,_+OST0M q            Connection con = null;
AF+]HZ)S0\!{ l            if (freeConnections.size() > 0) {
Q!ke3J-Aw,]9O,L                // 获取向量中第一个可用连接JAVA中文站社区门户 Y+J2wk8A`e,w
                con = (Connection) freeConnections.firstElement();JAVA中文站社区门户l@8F EMH3r
                freeConnections.removeElementAt(0);
%h6fQ#~+?(BV$r*|                try {JAVA中文站社区门户4V.d+L'k!ng A ^"J~
                    if (con.isClosed()) {JAVA中文站社区门户1M c(GJ#qfU$x
                        logger.info("从连接池" + name + "删除一个无效连接");
4Y~byE~.}                        // 递归调用自己,尝试再次获取可用连接JAVA中文站社区门户*?qNKeA-`(Crh
                        con = getConnection();JAVA中文站社区门户 jD(p.}I+x/G/{B
                    }
4z$w nSN;P7AS                } catch (SQLException e) {JAVA中文站社区门户^6r+p#K]Mz2`6p
                    logger.warn("从连接池" + name + "删除一个无效连接");
;\ qlotb&H                    // 递归调用自己,尝试再次获取可用连接JAVA中文站社区门户 }_!sg.q
                    con = getConnection();JAVA中文站社区门户9if'I&VrD
                }
brJ Y ]$lcua            } else if (maxConn == 0 || checkedOut < maxConn) {JAVA中文站社区门户p'T S J9qP1cR~:V(W1t8`B6_
                con = newConnection();
!pP}Y8F3Q            }JAVA中文站社区门户9u~-c0cb+@8u
            if (con != null) {
{jG$^T%_%T                checkedOut++;
/A2d2D#[,O}p)Q            }
(P"o/u*c%W`            return con;JAVA中文站社区门户 a(xp'}vL,^
        }JAVA中文站社区门户0V)c5fNh
        /**JAVA中文站社区门户k,m+bJc3O_|
         * 从连接池获取可用连接.可以指定客户程序能够等待的最长时间
A3H~oz\\_xT         * 参见前一个getConnection()方法.
N k/M;V QSG         *JAVA中文站社区门户2[ g/GT3P9X]ya
         * @param timeout 以毫秒计的等待时间限制JAVA中文站社区门户"Kk#D-o2W(^4s3On
         */
`)O)w:]2SC`Co        public synchronized Connection getConnection(long timeout) {JAVA中文站社区门户 h7Wl,o N$dW
            long startTime = new Date().getTime();JAVA中文站社区门户Tz3W/vY!Q L7N`
            Connection con;JAVA中文站社区门户s2j+c/B7n`{7v
            while ((con = getConnection()) == null) {
^%j4bH;j{                try {JAVA中文站社区门户7aM4v9Cu;k8]9H7m
                    wait(timeout);JAVA中文站社区门户x$P,z7E\&Z`q+J
                } catch (InterruptedException e) {}JAVA中文站社区门户$q/S8x_H
                if ((new Date().getTime() - startTime) >= timeout) {JAVA中文站社区门户vp8T0ETu
                    // wait()返回的原因是超时
F H9}0@0Nz}k                    return null;JAVA中文站社区门户/v4jZ9Fz
                }
-z]"ucb            }JAVA中文站社区门户.B$n/j9R iO h Gjo!}3]
            return con;
3O F*dZ N2lc        }JAVA中文站社区门户xL(h-A/`
        /**
3QD N)nvf0J         * 关闭所有连接JAVA中文站社区门户tm~7X-N Q-Uw` _1U
         */JAVA中文站社区门户0Sd!E1BzQZ7Z:e xJ
        public synchronized void release() {
$sf(SR nU.E5j yI            Enumeration allConnections = freeConnections.elements();
2} f$^Cj7u N3@8u            while (allConnections.hasMoreElements()) {
Ew W]+[4?F_                Connection con = (Connection) allConnections.nextElement();JAVA中文站社区门户6d8Y:Yf+n/sbp/o
                try {JAVA中文站社区门户 }/A2n.p!Q)^H*WIg
                    con.close();
D^5pl8N(u;h)t.x-Z                    logger.info("关闭连接池" + name + "中的一个连接");JAVA中文站社区门户 L7eZ"@.qRk
                } catch (SQLException e) {
Z"a"[F!KW E"Q                    logger.error("无法关闭连接池" + name + "中的连接", e.getNextException());
#w`H.ez um5p                }JAVA中文站社区门户/R_2{&k/`$XY1K E6Q
            }
9bS5|cw0h            freeConnections.removeAllElements();JAVA中文站社区门户*u7I.Z(}$lh`8bj
        }JAVA中文站社区门户1F A2{EY1U|.q
        /**
c/V2txM2eI         * 创建新的连接JAVA中文站社区门户,q5G*Y\q ?!]-Bz)Uc
         */
j T*{'[g+u ?        private Connection newConnection() {
Q+E UXjh _/RK            Connection con = null;JAVA中文站社区门户;Z&a(LU"@
            try {JAVA中文站社区门户*_V(K$r3v\ jMr(k
                if (user == null) {JAVA中文站社区门户$ou*va_A
                    con = DriverManager.getConnection(URL);
*@UKRw                } else {JAVA中文站社区门户K"BQ^V`
                    con = DriverManager.getConnection(URL, user, password);JAVA中文站社区门户8c0j6L6Z;UA)AUB
                }
s+W&`e6N.g'zm                logger.info("连接池" + name + "创建一个新的连接");JAVA中文站社区门户"G0^"jv.I6J%U;]:~
            } catch (SQLException e) {JAVA中文站社区门户6] c@+{_$_)x$f%n7a
                logger.error("无法创建下列URL的连接: " + URL, e.getNextException());JAVA中文站社区门户A2F+K:S,l
                return null;
GOL#C|            }
7aK/M}:ESvcf            return con;JAVA中文站社区门户8}&a m:jq
        }
5[ ?d3_VR    }
9J7sq Yx-Pd6y}JAVA中文站社区门户1g(M;e-q K}`
 

9pUw;d]

EOO)p+h nr~l"E
/e \M/e&o//PropertiesLoader.java 配置文件读取类
1S]i.Ja @P#E#P/A JAVA中文站社区门户Z F:Fg#Gj
package cn.ifnic.util;JAVA中文站社区门户1B H?9j#N `'u
import java.util.Properties;JAVA中文站社区门户#n q*~#N/~ JQ#@6t
import java.io.InputStream;JAVA中文站社区门户E O#S@Ej3\
import java.io.*;JAVA中文站社区门户'q[&h*YMB"}
/**JAVA中文站社区门户w3jVr7X
 *JAVA中文站社区门户v%aU0IbV]u}M
 * <p>Title: IFNIC</p>
/^z,X*M*s:Q8U?7X!mVj *
v2Qu_Q5a`x * <p>Description: 类GetProperties,用来获取*.properties配置文件的</p>
*~E k[cNb Q8i *
m `4hmwu * <p>Copyright: Copyright (c) 2005 www.ifnic.cn</p>
AHI'S(qjX6b9bH *JAVA中文站社区门户c_c&bBK
 * <p>Company: IFNIC.CN</p>JAVA中文站社区门户c F~#mEE
 *JAVA中文站社区门户w/yQ$^7\}
 * @author IFNIC
'e&@6M~5C-^ * @version 1.1.0JAVA中文站社区门户zvg7|/bXL
 */JAVA中文站社区门户.x,|P:he6dXf
public class PropertiesLoader {
"Iz3o9[|4N#@K6j    /**JAVA中文站社区门户zBgSR)O0G:E9`
     * 用法:getProperties(*.properties配置文件名),返回一个Properties对象JAVA中文站社区门户 E,MO,aOG qsl7v
     * @param propertiesName String
;N H};n*X4S!T     * @return PropertiesJAVA中文站社区门户ff8_M8SC
     */JAVA中文站社区门户soE3k0h/]I9w9Kf
    public Properties getProperties(String propertiesName) {JAVA中文站社区门户/zi)H/oL u"T ji
        InputStream is = getClass().getResourceAsStream("/" + propertiesName +
3`.Ye(OnMb                ".properties");JAVA中文站社区门户J:W/f O:whn-x
        Properties dbProps = new Properties();
EU*vcT;Tt        try {JAVA中文站社区门户{*eVC#Vjl5frbM
            dbProps.load(is);JAVA中文站社区门户"VAvfp,\&NYg2HdZP
            return dbProps;JAVA中文站社区门户2Fl H w ~,gz+a$u
        } catch (IOException ex) {JAVA中文站社区门户}*F;bQ-Y'\
            System.out.println("不能读取属性文件. " +
1f[J`T                               "请确保" + propertiesName +
wC^ D[V7EF                               ".properties 在CLASSPATH指定的路径中");JAVA中文站社区门户({*ec|!ACx
            return null;
L;zn9| c*N*ka        }JAVA中文站社区门户]yg'h2x6XC b:h
    }JAVA中文站社区门户_b'@#~9Z L
}
JAVA中文站社区门户8?A Jt m? a2bY.~9w

JAVA中文站社区门户l,gn3ya[%Iv!J


2F~Z#O+r` 

7e`v.`MSTWG

/_r\kV1dY//db.properties 连接池配置文件

'M{(HyVKm

J7v@"^r JAVA中文站社区门户%lR^K:o!jj8zV

JAVA中文站社区门户.n B&kaJ+AA

drivers=net.sourceforge.jtds.jdbc.Driver #为连接池指定一个数据库连接驱动程序

\0?z h(^O]0J,~L`

'D8be8F'G8` sC!Wjtds_root.url=jdbc:jtds:sqlserver://localhost/root #数据库连接URL
\Vy5Qc `4kjtds_root.maxconn=0 #连接最大数 为0表示没有限制JAVA中文站社区门户H&rtZ_ Ols
jtds_root.user=sa #数据库用户名JAVA中文站社区门户ETm(^(U'pD/\
jtds_root.password=sa #数据库密码JAVA中文站社区门户a5Q)o%j A t&vE_

OuB#doc@:V2|//DBConnectionManager.properties Log4j配置文件

!_pb}t PS

$}F9q7W%IT${log4j.rootLogger=INFO, Common #定义被日志捕获的信息级别
z|F\(z(Df8N#ERROR、WARN、INFO、DEBUG
j R:jZ&f9Ko8Glog4j.appender.Common=org.apache.log4j.RollingFileAppender #定义日志的存储方式
;IM/wPI!{Ulog4j.appender.Common.File = logs/DBConnectionManagerLog.html #定义日志文件路径
ia"j:U\r!\(~ ilog4j.appender.Common.Append=true #定义是否追加 否为覆盖
!@.N Fb'j:n9@wlog4j.appender.Common.MaxFileSize = 1024kb #定义文件大小JAVA中文站社区门户o1a;?1o;w
log4j.appender.Common.MaxBackupIndex=10 #定义最大备份文件数log4j.appender.Common.layout=org.apache.log4j.HTMLLayout #定义输出格式为HTML格式

:RL&Y@a M


TAG: log4j LOG4J Log4j 数据库连接池 单实例
 

评分:0

我来说两句

seccode