#dataservice 基于springbnh开发的spring boot微服务程序,主要使用spring data进行结构化和非结构化数据处理,通过hessian进行服务暴露,构建数据管理微服务。 #元数据管理服务——IEntityInfoService
IEntityInfoService entityInfoService = (IEntityInfoService)factory.create(IEntityInfoService.class,baseUrl + "/metadata/entityapi");
通过元数据entityInfoService可以进行元数据定义,并发布新的数据管理服务。 调用方式:
metaManageService.saveOrUpdate(metaJson);//不强制重写service类文件
metaManageService.saveOrUpdate(metaJson,Boolean.TRUE);//强制重写service类文件
元数据定义通过json字符串进行描述,字符串格式如下:
{
"class": {
"entity-name": "SysModfOne",
"table": "T_SYS_MODF_ONE",
"id": {
"name": "id",
"type": "long",
"column": "ID",
"generator": {
"class": "com.zcy.util.IdentifierGenerator"
}
},
"property": [{
"name": "name",
"column": "NAME",
"type": "string"
},
{
"name": "address",
"column": "ADDRESS",
"type": "string"
},
{
"name": "test",
"column": "TEST",
"type": "string"
},
{
"name": "ke",
"column": "KE",
"type": "string"
},
{
"name": "ke1",
"column": "KE1",
"type": "string"
},
{
"name": "status",
"column": "status",
"type": "int"
},
{
"name": "createDateTime",
"column": "CREATETIME",
"type": "timestamp"
},
{
"name": "lastModifyDateTime",
"column": "LASTMODIFY",
"type": "timestamp"
}]
}
}
json格式按照hibernate 动态模型配置的xml进行转换,xml节点名为json普通key,xml属性名为json中以“-”开头的key。
#动态服务访问 通过元数据管理接口定义了数据结构,将自动发布对应的数据管理服务。可通过如下代码访问:
IDyService teesEntityService = (IDyService)factory.create(IDyService.class,baseUrl + "/dy/teesentityAPI");
Map<String,Object> testEntity = new HashMap<String,Object>();
testEntity.put("name","asdasda");
testEntity.put("address","dasdasd");
testEntity.put("test","dasdasd");
testEntity.put("ke","asdasd");
testEntity.put("ke1","asdsadasd");
teesEntityService.save(SysModfOne);
自动发布的服务为了使用方便全部实现IDyService接口,通过此接口进行方法调用(目前暂时不支持自定义操作服务,后续将完善这块)。 自动发布服务的命名规则为元数据描述文件中的entity-name属性值全小写+API为服务名,完整规则如下 http://{host}:{prot}/dy/{entity-name(全小写)}API。 #动态服务访问——HQL查询
IDyService sysModyService = null;
sysModyService = (IDyService)factory.create(IDyService.class,baseUrl + "/dy/sysmodfoneAPI");
List<Map<String,Object>> rs = sysModyService.findAllByHql("from SysModfOne");
rs.forEach(entity -> {
entity.forEach((key,val) ->{
System.out.println(key + "\t" +val);
});
System.out.println("=================华丽的分割线======================");
});
#动态服务访问——SQL查询
IDyService sysModyService = null;
String sql = "select * from t_sys_modf_one tsmo";
//sql = "select tsmo.name name1,tsmo.address addr, tsmo.id ID, tsmo.ke from t_sys_modf_one tsmo";
sysModyService = (IDyService)factory.create(IDyService.class,baseUrl + "/dy/sysmodfoneAPI");
List<Map<String,Object>> rs = sysModyService.findAllBySql(sql);
rs.forEach(entity -> {
entity.forEach((key,val) ->{
System.out.println(key + "\t" +val);
});
System.out.println("=================华丽的分割线======================");
});
#数据库读写分离 基于spring统一事务管理和动态数据源路由,通过在声明事务的同时将事务设置成只读则该操作将使用读取数据的数据源,如不配置或者配置成非只读,则使用写数据源。读取数据源多个的情况下会采用处理总数一致性的方式进行负载。读写分离配置如下:
#默认数据源(即写操作的数据源,即主库)
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3307/ssp?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
spring.datasource.username=sspdbo
spring.datasource.password=123456
spring.datasource.max-active=50
spring.datasource.min-idle=5
spring.datasource.initial-size=5
spring.datasource.max-wait=60000
spring.datasource.time-between-eviction-runs-millis=60000
spring.datasource.pool-prepared-statements=false
spring.datasource.max-pool-prepared-statement-per-connection-size=20
#读取数据源名称集合
ds.config.datasource.names=read1,read2,read3,read4
#读取数据源1
ds.config.datasource.read1.driver-class-name =com.mysql.jdbc.Driver
ds.config.datasource.read1.url=jdbc:mysql://127.0.0.1:3308/ssp?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
ds.config.datasource.read1.username=sspdbo
ds.config.datasource.read1.password=123456
ds.config.datasource.read1.type=com.alibaba.druid.pool.DruidDataSource
ds.config.datasource.read1.max-active=100
ds.config.datasource.read1.min-idle=20
ds.config.datasource.read1.initial-size=30
ds.config.datasource.read1.max-wait=60000
ds.config.datasource.read1.time-between-eviction-runs-millis=60000
ds.config.datasource.read1.pool-prepared-statements=false
ds.config.datasource.read1.max-pool-prepared-statement-per-connection-size=20
#读取数据源2
ds.config.datasource.read2.driver-class-name =com.mysql.jdbc.Driver
ds.config.datasource.read2.url=jdbc:mysql://127.0.0.1:3308/ssp?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
ds.config.datasource.read2.username=sspdbo
ds.config.datasource.read2.password=123456
ds.config.datasource.read2.type=com.alibaba.druid.pool.DruidDataSource
#读取数据源3
ds.config.datasource.read3.driver-class-name =com.mysql.jdbc.Driver
ds.config.datasource.read3.url=jdbc:mysql://127.0.0.1:3308/ssp?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
ds.config.datasource.read3.username=sspdbo
ds.config.datasource.read3.password=123456
ds.config.datasource.read3.type=com.alibaba.druid.pool.DruidDataSource
ds.config.datasource.read3.max-active=25
ds.config.datasource.read3.min-idle=10
ds.config.datasource.read3.initial-size=3
ds.config.datasource.read3.max-wait=60000
ds.config.datasource.read3.time-between-eviction-runs-millis=60000
ds.config.datasource.read3.pool-prepared-statements=false
ds.config.datasource.read3.max-pool-prepared-statement-per-connection-size=20
#读取数据源4
ds.config.datasource.read4.driver-class-name =com.mysql.jdbc.Driver
ds.config.datasource.read4.url=jdbc:mysql://127.0.0.1:3308/ssp?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
ds.config.datasource.read4.username=sspdbo
ds.config.datasource.read4.password=123456
ds.config.datasource.read4.type=com.alibaba.druid.pool.DruidDataSource
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。