健康检查程序
来源:互联网 发布:直销奖金结算软件 编辑:程序博客网 时间:2024/04/29 03:50
/**例如 :健康检查数据访问job
* @Date: 14-10-24
* @Time: 下午11:10
* */
public class HealthCheckerForDAOJob {
private static final Logger logger = LoggerFactory.getLogger(HealthCheckerForDAOJob.class);
@Override
public void execute() throws Exception {
try {
logger.debug("健康检查 数据访问job 开始");
IBeanHealthChecker healthCache = new BeanHealthCheckerForDAO();
GroupHealthStatus status=healthCache.check();
boolean statu=status.isRight();
logger.info("健康检查 数据访问job 的状态="+statu);
if(statu){
logger.info("健康检查 数据访问job 很健康!");
}else{
logger.info("健康检查 数据访问job 不健康!");
}
logger.debug("健康检查 数据访问job 结束");
} catch (Exception e) {
logger.error("健康检查 数据访问job 出错",e);
throw new Exception("健康检查 数据访问 job出错",e);
}
}
}
/**某个的健康检查
*例如 DAO健康检查
*/
public class BeanHealthCheckerForDAO extends BaseBeanHealthChecker {
/**
* 获取分组与bean的配对列表
* @return
*new String[]里填的是spring bean
*/
public GroupBeansPair getGroupBeansPairs() {
return new GroupBeansPair("数据访问层" , new String[]{
"baseDAO",
"baseJdbcDAO",
"commonDAO",
"namedSqlDAO",
"qoDAO"
});
}
}
/**
* Bean健康检查接口
*/
public interface IBeanHealthChecker {
/**
* 检查checker内部定义bean
* @return
*/
public GroupHealthStatus check();
/**
* 依次检查多个bean
* @param groupBeansPairs
* @return
*/
public List<GroupHealthStatus> check(GroupBeansPair ... groupBeansPairs);
}
/**
* Bean健康状态抽象基类
*/
public abstract class BaseBeanHealthChecker implements IBeanHealthChecker {
private static final Logger logger = LoggerFactory.getLogger(BaseBeanHealthChecker.class);
@Override
public GroupHealthStatus check() {
return check(getGroupBeansPairs());
}
@Override
public List<GroupHealthStatus> check(GroupBeansPair ... groupBeansPairs) {
if (groupBeansPairs == null || groupBeansPairs.length == 0) {
if (logger.isErrorEnabled()) {
logger.error("分组bean参数为空,无法进行bean健康检查");
}
return null;
}
List<GroupHealthStatus> groupHealthStatuses = new ArrayList<GroupHealthStatus>();
for (GroupBeansPair groupBean : groupBeansPairs) {
GroupHealthStatus groupBeansPair = check(groupBean);
if (groupBeansPair != null) {
groupHealthStatuses.add(groupBeansPair);
}
}
return groupHealthStatuses;
}
private GroupHealthStatus check(GroupBeansPair groupBeansPair) {
if (groupBeansPair == null) {
if (logger.isErrorEnabled()) {
logger.error("分组bean参数为空,无法进行bean健康检查");
}
return null;
}
if (groupBeansPair.getBeanNames() == null || groupBeansPair.getBeanNames().length == 0) {
if (logger.isErrorEnabled()) {
logger.error("bean列表参数为空,无法进行bean健康检查");
}
return null;
}
if (logger.isDebugEnabled()) {
logger.debug("开始对分组:" + groupBeansPair.getGroup() + "进行健康检查");
}
GroupHealthStatus groupHealthStatus = new GroupHealthStatus();
groupHealthStatus.setGroup(groupBeansPair.getGroup());
groupHealthStatus.setRight(true);
List<BeanHealthStatus> statuses = new ArrayList<BeanHealthStatus>();
groupHealthStatus.setBeanHealthStatusList(statuses);
for (String beanName : groupBeansPair.getBeanNames()) {
BeanHealthStatus status = new BeanHealthStatus();
status.setGroup(groupBeansPair.getGroup());
status.setBean(beanName);
Object obj = checkBeanInContainer(beanName);
if (obj == null) {
status.setRight(false);
status.setStatus(BeanHealthStatus.HEALTH_STATUS_BEAN_NOT_FOUND);
status.setDesc(BeanHealthStatus.HEALTH_STATUS_BEAN_NOT_FOUND_DESC);
} else {
status.setRight(true);
status.setStatus(BeanHealthStatus.HEALTH_STATUS_NORMAL);
status.setDesc(BeanHealthStatus.HEALTH_STATUS_NORMAL_DESC);
}
if (logger.isDebugEnabled()) {
StringBuilder bf = new StringBuilder("通过容器对bean进行健康检查");
bf.append(status.isRight()?"成功":"失败");
bf.append(",服务名称:").append(beanName).append(",状态:" + status.getStatus() + ",状态描述:" + status.getDesc());
logger.debug(bf.toString());
}
if (status.isRight()) {
checkBeanByMethod(obj , status);
}
if (!status.isRight()) {
groupHealthStatus.setRight(false);
}
statuses.add(status);
}
if (logger.isDebugEnabled()) {
logger.debug("分组" + groupBeansPair.getGroup() + "检查状态结果:" + (groupHealthStatus.isRight()?"成功":"失败"));
}
return groupHealthStatus;
}
/**
* 检查Bean在容器中是否存在
* @return
*/
private Object checkBeanInContainer(String beanName) {
if (logger.isDebugEnabled()) {
logger.debug("通过容器对Bean进行健康检查,beanName:" + beanName);
}
return FactoryBeanUtil.getBean(beanName);
}
/**
* 通过方法校验Bean是否正常
*/
private void checkBeanByMethod(Object bean , BeanHealthStatus status ) {
//TODO 通过调用 bean的方法校验bean是否正常
return;
}
/**
* 获取分组与bean的配对列表
* @return
*/
public GroupBeansPair getGroupBeansPairs() {
return null;
}
}
/**
* 组与bean的匹配
*/
public class GroupBeansPair {
public GroupBeansPair(String group, String[] beanNames) {
this.group = group;
this.beanNames = beanNames;
}
private String group;
private String[] beanNames;
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
public String[] getBeanNames() {
return beanNames;
}
public void setBeanNames(String[] beanNames) {
this.beanNames = beanNames;
}
}
/**
* 属性类
*/
public class GroupHealthStatus {
private String group;
private boolean right;
private List<BeanHealthStatus> beanHealthStatusList;
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
public List<BeanHealthStatus> getBeanHealthStatusList() {
return beanHealthStatusList;
}
public void setBeanHealthStatusList(List<BeanHealthStatus> beanHealthStatusList) {
this.beanHealthStatusList = beanHealthStatusList;
}
public boolean isRight() {
return right;
}
public void setRight(boolean right) {
this.right = right;
}
}
/**
* Bean健康状态
*/
public class BeanHealthStatus {
/**
* 正常状态
*/
public static final String HEALTH_STATUS_NORMAL = "0";
/**
* 正常状态描述
*/
public static final String HEALTH_STATUS_NORMAL_DESC = "正常状态";
/**
* bean未获取到,容器中没有该bean,表明该bean初始化失败
*/
public static final String HEALTH_STATUS_BEAN_NOT_FOUND = "1";
/**
* bean未找到描述
*/
public static final String HEALTH_STATUS_BEAN_NOT_FOUND_DESC = "bean未获取到,容器中没有该bean,表明该bean初始化失败";
/**
* 调用相应bean的check逻辑失败
*/
public static final String HEALTH_STATUS_BEAN_CHECK_ERROR = "2";
/**
* 调用bean check逻辑失败描述
*/
public static final String HEALTH_STATUS_BEAN_CHECK_ERROR_DESC = "调用相应bean的check逻辑失败";
/**
* 分组
*/
private String group;
/**
* 当前是否正常
*/
private boolean right;
/**
* 当前bean名称
*/
private String bean;
/**
* 当前状态
*/
private String status;
/**
* 当前的状态描述
*/
private String desc;
public String getBean() {
return bean;
}
public void setBean(String bean) {
this.bean = bean;
}
public boolean isRight() {
return right;
}
public void setRight(boolean right) {
this.right = right;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
}
- 健康检查程序
- 健康检查
- Oracle数据库健康检查
- AIX健康检查errpt
- keepalived健康检查 HTTP_GET
- keepalived健康检查 HTTP_GET .
- HBase 健康检查工具
- SQL Server健康检查
- haproxy 检查http 健康
- SQL Server健康检查
- 应用健康检查
- SQL Server健康检查
- 集群健康检查api
- kubernetes--应用程序健康检查
- Kubernetes应用健康检查
- Oracle数据库健康检查笔记
- Exadata健康检查与评估
- keepalived HTTP_GET健康检查配置
- iOS8中使用CoreLocation定位
- 《正则表达式必知必会》笔记
- grep与正则表达式
- $_SERVER['SCRIPT_NAME']、$_SERVER['SCRIPT_FILENAME']及__FILE__不同
- 最大子序列求和
- 健康检查程序
- 关于日期处理的 sql语句
- 嵌入式 hi3518平台指定网卡测试是否通外网
- 【转】mysql导入导出.sql文件备份还原数据库
- 黑马程序员------Java内部类
- Daemon函数的用法
- 李平:大型网站的灵魂——性能
- Js:Js对象——其他对象
- Spring + hibernate + struts2 +jotm JTA事务