今天写了一个使用java程序检测神通数据库集群的状态的小程序。这里记录一下。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
public class checkDatabase {
public static void main(String[] args) throws Exception {
Logger log = Logger.getLogger("logger");
log.setLevel(Level.INFO);
log.info("123");
log.warning("adsfaf");
while(true){
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
checkDatabaseStatus();
TimeUnit.SECONDS.sleep(10);
}
}
public static void checkDatabaseStatus() throws Exception{
Connection conn = connect();
if (conn == null){
sendMail(false, "数据库无法连接!!!!!!");
} else{
// 可以连接到神通数据库,并且数据库状态正常
String sql = "select * from testtable;";
PreparedStatement statement = conn.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
String[] databaseStatus = new String[3];
int count = 0;
while(resultSet.next()){
String status = resultSet.getString("status");
databaseStatus[count] = status;
count++;
if (count == 3){
break;
}
}
int masterCount = 0;
int slaveCount = 0;
int offlineCount = 0;
for(int i = 0; i < 3; i++){
if (databaseStatus[i].equals("master")) {
masterCount++;
} else if (databaseStatus[i].equals("slave")){
slaveCount++;
} else if (databaseStatus[i].equals("offline")){
offlineCount++;
}
}
// 否则,数据库状态异常,发送邮件进行提示
if (masterCount!=1 || slaveCount!=2){
String finalResult = "数据库集群存在异常,不是一个master,两个slave!!!,\n" +
"master:" + masterCount + ";slave:" + slaveCount + ";offline:" + offlineCount;
sendMail(false, finalResult);
}
}
}
// 检查是否可以连接到数据库
public static Connection connect() throws Exception {
String Driver = "com.oscar.Driver";
String Url = "jdbc:oscar://localhost:2003/OSRDB";
Class.forName(Driver);
Connection conn = null;
try{
conn = DriverManager.getConnection(Url, "sysdba", "szoscar55");
System.out.println("we can connected to shentong database");
return conn;
}
catch (Exception e) {
System.out.println("we can't connected to shentong database");
return null;
}
}
// 发送邮件
public static void sendMail(boolean result, String context){
if (!result) {
// 发送提醒的邮件,数据库存在问题
System.out.println(context);
}
}
}