We used a special database,so i want to write a database connection Pool,there is something wrong with the code, when i debug into the static block,at first JVM worked in the Properties properties = new Properties(); but  next step is int i = 0; i dont know why it ingored the other code in the static block
public class GoldDataSource {
private static String goldip;
private static int goldport;
private static String username;
private static String password;
private static int maxPollSize;
private static LinkedList<Server> list = new LinkedList<Server>();
private static Logger logger = LoggerFactory.getLogger(GoldDataSource.class);
static {
    try {
        Properties properties = new Properties();
        InputStream is = GoldDataSource.class.getClassLoader().getResourceAsStream("/conf/db/gold.properties");
        properties.load(is);
        goldip = properties.getProperty("gold.ip");
        goldport = Integer.parseInt(properties.getProperty("gold.port"));
        username = properties.getProperty("gold.username");
        password = properties.getProperty("gold.password");
        maxPollSize = Integer.parseInt(properties.getProperty("gold.pool.maxPollSize"));
        for (int i = 0; i < maxPollSize; i++) {
            Server server = new ServerImpl(goldip, goldport, username, password);
            server.connect();
            server.login();
            list.add(server);
        }
    } catch (Exception e) {
        ....
    }
}
public synchronized static Server getServer() {
    try {
        int i = 0;
        while (true) {
            Server aServer = list.removeFirst();
            if (aServer != null) {
                return aServer;
            } else {
                if (i >= 3) {
                    return aServer;
                }
                Thread.sleep(500);
                i++;
            }
        }
    } catch (Exception e) {
        ...
        return null;
    }
}
public static void closeServer(Server aServer) {
    list.addLast(aServer);
}}
I used Server server = GoldDataSource.getServer(); to get connection,but when it executed Properties properties = new Properties();then jump into the code int i = 0; which in the getServer() method
I edited the code with singleton pattern,it worked ,but i still do not understand why the old code didn't worked , and i catched "java.lang.reflect.InvocationTargetException" in the first catch block old code.
public class GoldDataSource {
private static String goldip;
private static int goldport;
private static String username;
private static String password;
private static int maxPollSize;
private static LinkedList<Server> list = new LinkedList<Server>();
private static InputStream is;
private static GoldDataSource aDataSource = new GoldDataSource();
private static Logger logger = LoggerFactory.getLogger(GoldDataSource.class);
private goldDataSource() {
    try {
        Properties properties = new Properties();
        is = GoldDataSource.class.getClassLoader().getResourceAsStream("/conf/db/gold.properties");
        properties.load(is);
        goldip = properties.getProperty("gold.ip");
        goldport = Integer.parseInt(properties.getProperty("gold.port"));
        username = properties.getProperty("gold.username");
        password = properties.getProperty("gold.password");
        maxPollSize = Integer.parseInt(properties.getProperty("gold.pool.maxPollSize"));
        for (int i = 0; i < maxPollSize; i++) {
            Server server = new ServerImpl(goldip, goldport, username, password);
            server.connect();
            server.login();
            list.add(server);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
public static goldDataSource getDateSource() {
    return aDataSource;
}
public synchronized Server getServer() {
    try {
        int i = 0;
        while (true) {
            Server aServer = list.removeFirst();
            if (aServer != null) {
                return aServer;
            } else {
                if (i >= 3) {
                    return aServer;
                }
                Thread.sleep(500);
                i++;
            }
        }
    } catch (Exception e) {
        logger.error("get connection error:" + e.toString());
        return null;
    }
}
public void closeServer(Server aServer) {
    list.addLast(aServer);
}
}
