mysql public owner_OWNER支持配置文件目录的继承

OWNER是一个解决Java配置文件解析的开源项目。本文介绍了如何通过OWNER实现配置文件路径的继承,避免在定义多个配置接口时重复指定相同源文件,从而简化代码并提高维护性。

什么是OWNER

OWNER 是一个开源项目,旨在解决Java配置文件的解析问题。

例如配置文件 /data/config.properties 包含下列内容:

server.port=80

server.hostname=foobar.com

server.max.threads=100

为了解析这个配置文件,我们首先定义一个Java接口:

import org.aeonbits.owner.Config;

@Sources({ //定义配置文件的路径

"file:/data/config.properties",

"classpath: config.properties"

})

public interface ServerConfig extends Config {

@Key("server.port")

int port();

@Key("server.hostname")

String hostname();

@Key("server.max.threads");

@DefaultValue("42")

int maxThreads();

}

加载配置文件:

ServerConfig cfg = ConfigFactory.create(ServerConfig.class);

System.out.println("Server " + cfg.hostname() + ":" + cfg.port() +

" will run " + cfg.maxThreads());

配置文件路径的继承

在实际应用中,配置文件内容上一般会包括多个分组,每一个分组定义成一个接口会更加清晰,同时所有的接口需要从相同的配置文件列表中加载。例如除了上面例子中展示的server配置以外,还要定义mysql的信息,就需要添加一个接口并重新定义Sources :

import org.aeonbits.owner.Config;

@Sources({ //定义配置文件的路径

"file:/data/config.properties",

"classpath: config.properties"

})

public interface MysqlConfig extends Config {

@Key("mysql.port")

int port();

@Key("mysql.hostname")

String hostname();

}

由于Sources这个annonation不支持继承,所以每次新添加一组配置项的时候就需要重写一遍Sources,这样一来容易出错并且以后修改配置文件路径的时候多有不便。我提交了一个patch解决了这个问题,已经merge到master,针对这种情况就可以这样写了:

import org.aeonbits.owner.Config;

@Sources({ //定义配置文件的路径

"file:/data/config.properties",

"classpath: config.properties"

})

public interface BaseConfig extends Config {

}

import org.aeonbits.owner.Config;

public interface ServerConfig extends BaseConfig {

@Key("server.port")

int port();

@Key("server.hostname")

String hostname();

@Key("server.max.threads");

@DefaultValue("42")

int maxThreads();

}

import org.aeonbits.owner.Config;

public interface MysqlConfig extends BaseConfig {

@Key("mysql.port")

int port();

@Key("mysql.hostname")

String hostname();

}

代码:lambdaQuery().eq(DcTask::getCaseId, caseId) .eq(DcTask::getIsLatestCaseTask, true) .oneOpt(); 调用报:"nested exception is org.apache.ibatis.exceptions.PersistenceException: \r\n### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: SELECT \n id,case_id,code,type,province,city,district,address,remark,owner_id,owner_name,bus_assist_mgr_id,bus_assist_mgr_name,task_owner_id,task_owner_name,assist_owner_id,assist_owner_name,task_group_id,task_group_name,visit_group_id,visit_group_name,visit_status,current_debt_collection_type,assist_group_id,assist_group_name,transfer_object_id,transfer_object_name,transfer_type,helper_id,helper_name,helper_type,business_status,task_status,lawsuit_status,current_litigation_stage,status,label,is_latest_case_task,node,node_flow_date,is_phone_transfer,executor_info,next,dept_id,update_dept,create_by,create_time,update_by,update_time,business_company_id,business_company_name,assist_company_id,assist_company_name,is_stock,receive_time,is_followed,latest_follow_time,is_follow_month,core_customer_type,has_executor \n FROM dc_task \n\n \n WHERE (case_id = ? AND is_latest_case_task = ?)\r\n### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: SELECT \n id,case_id,code,type,province,city,district,address,remark,owner_id,owner_name,bus_assist_mgr_id,bus_assist_mgr_name,task_owner_id,task_owner_name,assist_owner_id,assist_owner_name,task_group_id,task_group_name,visit_group_id,visit_group_name,visit_status,current_debt_collection_type,assist_group_id,assist_group_name,transfer_object_id,transfer_object_name,transfer_type,helper_id,helper_name,helper_type,business_status,task_status,lawsuit_status,current_litigation_stage,status,label,is_latest_case_task,node,node_flow_date,is_phone_transfer,executor_info,next,dept_id,update_dept,create_by,create_time,update_by,update_time,business_company_id,business_company_name,assist_company_id,assist_company_name,is_stock,receive_time,is_followed,latest_follow_time,is_follow_month,core_customer_type,has_executor \n FROM dc_task \n\n \n WHERE (case_id = ? AND is_latest_case_task = ?)",
最新发布
09-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值