Netsharp配置文件
一、总体说明
netsharp下需要配置的项目一般是需要独立启动的项目,主要有四个
- netsharp-web
- netsharp-test
- netsharp-elephant
- netsharp-donkey
其实每个项目都可能独立启动,一般的项目都会有自己的测试项目,所以这个时候也需要配置文件
配置文件同源代码一起管理,开始的时候配置文件直接放在上面四个项目里,会有以下几个问题
- 多个项目配置文件经常不一致,混乱
- 每个开发人员本地的配置不一样提交代码的时候经常有人把自己的配置提交到服务器,引起代码冲突
- 每个人经常修改配置文件提交之后配置文件被改的乱七八糟
针对上面几个问题,netsharp的配置文件是放在netsharp的顶级文件夹下的conf目录,代码下载之后开发人员把配置文件复制到项目下使用,同时在git的项目设置配置文件目录为ignore即可
对于生产环境、测试环境、部署运维的时候专门把配置文件放在服务器上,部署复制一下即可,这样也保证了配置账号的安全性
二、netsharp的配置文件
netsharp目前一共用到5个配置文件,他们的目录结构如下,一下以netsharp-web项目为例
|--netsharp-web
|--src/main/java
|--src/main/resources
|--log4j.properties
|--conf
|--communication.properties
|--configuration.properties
|--database.properties
|--redis.properties
三、netsharp配置文件读取
配置文件读取比较简单,首先有一个配置文件读取的基类,主要的方法是deserialize,用于读取配置文件
package org.netsharp.application; import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List; import org.netsharp.core.NetsharpException;
import org.netsharp.core.convertor.ITypeConvertor;
import org.netsharp.core.convertor.TypeConvertorFactory;
import org.netsharp.util.PropertyConfigurer;
import org.netsharp.util.ReflectManager;
import org.netsharp.util.StringManager; public class ApplicationConfiguration { public void deserialize() { Class<?> type = this.getClass(); Configuration confile = type.getAnnotation(Configuration.class);
if (confile == null) {
throw new NetsharpException("类上必须标注@Configuration:" + type.getName());
} PropertyConfigurer conf = PropertyConfigurer.newInstance(confile.file()); Field[] fields = ReflectManager.getDeclaredFields(type);
for (Field field : fields) {
this.parseField(conf, field);
}
} private void parseField(PropertyConfigurer conf, Field field) { ConfigurationItem item = field.getAnnotation(ConfigurationItem.class);
if (item == null) {
return;
} String value = conf.get(item.key());
if (StringManager.isNullOrEmpty(value)) {
value = item.defaultValue();
} ITypeConvertor convertor = TypeConvertorFactory.create(field.getType());
if (convertor == null) {
throw new NetsharpException("can't read " + item.key());
}
Object propertyValue = convertor.fromString(value); try {
field.setAccessible(true);
field.set(this, propertyValue);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new NetsharpException("can't read " + item.key(), e);
} if (field.getType().isEnum() && propertyValue == null) {
throw new NetsharpException(item.key() + "配置不正确,配置的值为:" + value);
}
} @Override
public String toString() { Class<?> type = this.getClass();
List<String> ss = new ArrayList<String>(); Field[] fields = ReflectManager.getDeclaredFields(type);
for (Field field : fields) {
ConfigurationItem item = field.getAnnotation(ConfigurationItem.class);
if (item == null) {
continue;
} try {
ss.add(field.getName() + " : " + field.get(this).toString());
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
} return StringManager.join(StringManager.NewLine, ss);
}
}
以configuration.properties为例子,看缓存类型(org.netsharp.panda.session.cache)的读取方式,他在PandaConfiguration类中
package org.netsharp.panda.core; import org.netsharp.application.ApplicationConfiguration;
import org.netsharp.application.Configuration;
import org.netsharp.application.ConfigurationItem;
import org.netsharp.cache.base.dict.CacheType; @Configuration(file = "conf/configuration.properties")
public class PandaConfiguration extends ApplicationConfiguration { private static PandaConfiguration instance; /*panda是否启用权限控制*/
@ConfigurationItem(key="org.netsharp.panda.ispermission",defaultValue="true")
private Boolean isPermission; /*panda的session缓存类型*/
@ConfigurationItem(key="org.netsharp.panda.session.cache",defaultValue="none")
private CacheType sessionCacheType; //panda的session时间(分钟)
@ConfigurationItem(key="org.netsharp.panda.session.timeout",defaultValue="30")
private Integer sessionTimtout; public static PandaConfiguration getInstance() { if(instance==null) {
instance = new PandaConfiguration();
instance.deserialize();
} return instance; } public Boolean getIsPermission() {
return isPermission;
} public CacheType getSessionCacheType() {
return sessionCacheType;
} public Integer getSessionTimtout() {
return sessionTimtout;
}
}
一般配置文件读取使用一个Singleton,不同类型的配置对应不同的Singleton,上文中的PandaConfiguration主要是读取关于Panda相关的配置
另外,多个配置类可以读取一个配置文件的内容,这样为了减少配置文件的数量,同时有可以达到配置文件进行分类管理的目的
在netsharp的配置文件中都标注了具体的配置文件的读取类
四、日志配置
日志文件是log4j自己读取的,不是netsharp读取的内容
文件:log4j.properties
netsharp.log.dir=/home/netsharp/logs
#=======================================================================
log4j.rootLogger=DEBUG,stdout,D,E # appender stdout
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %-5p [%t] %l - %m%n
log4j.appender.stdout.Encoding=UTF-8 # appender D
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.File=${netsharp.log.dir}/log.txt
log4j.appender.D=org.apache.log4j.RollingFileAppender
log4j.appender.D.MaxFileSize=10MB
log4j.appender.D.ImmediateFlush=true
log4j.appender.D.Append=true
log4j.appender.D.MaxBackupIndex=10
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %-5p %l - %m%n
log4j.appender.D.Encoding=UTF-8 # appender E
log4j.appender.E.Threshold=ERROR
log4j.appender.E.File=${netsharp.log.dir}/error.txt
log4j.appender.E=org.apache.log4j.RollingFileAppender
log4j.appender.E.MaxFileSize=10MB
log4j.appender.E.ImmediateFlush=true
log4j.appender.E.Append=true
log4j.appender.E.MaxBackupIndex=10
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %-5p %l - %m%n
log4j.appender.E.Encoding=UTF-8
五、应用程序配置
文件:configuration.properties
#-----------------------------------------------------------------
#see : org.netsharp.application.Application
org.netsharp.name=Netsharp
org.netsharp.packages.scan= #-----------------------------------------------------------------
#see : org.netsharp.organization.entity.AuthorizationConfiguration
#员工重置密码
org.netsharp.authorization.defaultpassword=123456
#用户密码加密盐
org.netsharp.authorization.salt=xxxxxx #-----------------------------------------------------------------
#see : org.netsharp.panda.core.PandaConfiguration
#netsharp是否启用权限控制
org.netsharp.panda.ispermission=true
#panda的session缓存类型
org.netsharp.panda.session.cache=redis
#panda的session时间(分钟)
org.netsharp.panda.session.timeout=30 #-----------------------------------------------------------------
#see : org.netsharp.application.Application
#分布式id配置
org.netsharp.id.datacenterid=1
org.netsharp.id.workid=1
六、数据库配置
文件:database.properties
#see : org.netsharp.cache.service.redis.RedisConnection
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/netsharp?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&noAccessToProcedureBodies=true
jdbc.username=root
jdbc.database=netsharp
jdbc.password=123456
jdbc.idleConnectionTestPeriod=60
jdbc.connectionTestStatement=select 1
jdbc.idleMaxAge=240
jdbc.maxConnectionsPerPartition=30
jdbc.minConnectionsPerPartition=10
jdbc.partitionCount=2
jdbc.acquireIncrement=5
jdbc.statementsCacheSize=100
jdbc.releaseHelperThreads=3
jdbc.lazyInit =false
七、RPC配置
文件:communication.properties
#base
#see : org.netsharp.communication.core.ConfigurationBase
org.netsharp.communication.host=127.0.0.1
org.netsharp.communication.port=8888
#consumer
#see : org.netsharp.communication.core.CommunicationConfiguration
org.netsharp.communication.protocol=local
#server
#see : org.netsharp.communication.protocol.tcp.container.server.TcpServerConfiguration
org.netsharp.communication.pool.coreSize=200
org.netsharp.communication.pool.maxinumSize=1000
org.netsharp.communication.pool.keepAliveTime=100
八、redis配置
文件:redis.properties
#see : org.netsharp.cache.service.redis.RedisConnection
redis.pool.maxActive=200
redis.pool.maxIdle=100
redis.pool.maxWait=3000
redis.ip=127.0.0.1
redis.port=6379
redis.password=123456
redis.timeout=5000
redis.database=1
redis.disabled=false
redis.cache.first.key=netsharp
Netsharp配置文件的更多相关文章
- Netsharp总体设计
阅读本文请先阅读如下两篇文章 什么是企业软件 Netsharp什么 Netsharp总体设计 1.1 Netsharp终端形式 Netsharp基于.NET平台,支持的产品形态有三种: 北极熊 ...
- NETSHARP的JAVA开发环境配置
一:JAVA配置 1. netsharp使用java1.8/1.7版本,本文使用1.8版本 2.jdk下载地址:http://www.oracle.com/technetwork/java/javas ...
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入
上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-补充WebApi与Unity注入-配置文件
系列目录 上一篇演示了WebApi利用Unity注入 很多人问我如何用配置文件来配置注入,本节演示如何利用配置文件来注入,道理是一样的,跳转到上一节下载源码一起来动手! 1.打开源码定位到文件Depe ...
- Spring配置文件标签报错:The prefix "XXX" for element "XXX:XXX" is not bound. .
例如:The prefix "context" for element "context:annotation-config" is not bound. 这种 ...
- nginx服务器安装及配置文件详解
nginx在工作中已经有好几个环境在使用了,每次都是重新去网上扒博客,各种编译配置,今天自己也整理一份安装文档和nginx.conf配置选项的说明,留作以后参考.像负载均衡配置(包括健康检查).缓存( ...
- C#开发中使用配置文件对象简化配置的本地保存
C#开发中使用配置文件对象简化配置的本地保存 0x00 起因 程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序 ...
- 使用T4模板生成不同部署环境下的配置文件
在开发企业级应用的时候,通常会有不同的开发环境,比如有开发环境,测试环境,正式环境,生产环境等.在一份代码部署到不同环境的时候,不同环境的配置文件可能需要根据目标环境不同而不同.比如在开发环境中,数据 ...
- 配置文件Java读写
今天把配置文件的Bug修复了,总结一下Java配置文件如何读写 配置文件的格式 以.properties后缀结尾,内容不出现空格和双引号 //config.properties Driver=com. ...
随机推荐
- jvm--深入理解java虚拟机 精华总结(面试)(转)
深入理解java虚拟机 精华总结(面试)(转) 原文地址:http://www.cnblogs.com/prayers/p/5515245.html 一.运行时数据区域 3 1.1 程序计数器 3 1 ...
- git一个分布式版本工具的使用
1.git和cvs的区别 分支更快,更容易 支持离线工作,本地提交可以稍后提交到服务器上 git提交是原子的,且是整个项目范围的,而不像cvs是对每个文件 git中的每个工作树都包含一个具有完整项目历 ...
- CRM 模拟用户
web api 模拟用户 转:https://blog.csdn.net/vic0228/article/details/80649615 var req = new XMLHttpRequest() ...
- 性能测试Jmeter扩展学习-添加自定义函数
我们在使用jmeter的时候有时候会碰到jmeter现有插件或功能也无法支持的场景,比如前端加密,此时我们就需要自己手动编写函数并导入了,下面就是手动修改并导入的过程. 首先我们需要下载jmeter源 ...
- You Only Look Once: Unified, Real-Time Object Detection
论文下载:http://arxiv.org/abs/1506.02640 代码下载:https://github.com/pjreddie/darknet Abstract 作者提出一种新的目标检测 ...
- expect login ssh
#!/usr/bin/expect -f set pwffd [lindex $argv 0] spawn ssh cmesvr2i expect "*password:" sen ...
- 【Linux命令】Linux下的tar压缩解压缩命令详解(转)
tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个 ...
- uva-10670-贪心
题意:从N开始,目标是把数字变成M,每个代理有俩个操作,让数字减一或者变成一半,求最小的花费 能减半就减半. #include <string> #include<iostream& ...
- 1816647 - Error "Data file of SAP Note is incomplete" uploading a note in SNOTE
ymptom When uploading an SAP Note in transaction SNOTE you receive the error "Data file of SAP ...
- TTS
CLASS_SpVoice: TGUID = '{96749377-3391-11D2-9EE3-00C04F797396}'; http://blog.sina.com.cn/s/blog_4fce ...