一、总体说明

netsharp下需要配置的项目一般是需要独立启动的项目,主要有四个

  1. netsharp-web
  2. netsharp-test
  3. netsharp-elephant
  4. netsharp-donkey

其实每个项目都可能独立启动,一般的项目都会有自己的测试项目,所以这个时候也需要配置文件

配置文件同源代码一起管理,开始的时候配置文件直接放在上面四个项目里,会有以下几个问题

  1. 多个项目配置文件经常不一致,混乱
  2. 每个开发人员本地的配置不一样提交代码的时候经常有人把自己的配置提交到服务器,引起代码冲突
  3. 每个人经常修改配置文件提交之后配置文件被改的乱七八糟

针对上面几个问题,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配置文件的更多相关文章

  1. Netsharp总体设计

    阅读本文请先阅读如下两篇文章 什么是企业软件 Netsharp什么 Netsharp总体设计 1.1     Netsharp终端形式 Netsharp基于.NET平台,支持的产品形态有三种: 北极熊 ...

  2. NETSHARP的JAVA开发环境配置

    一:JAVA配置 1. netsharp使用java1.8/1.7版本,本文使用1.8版本 2.jdk下载地址:http://www.oracle.com/technetwork/java/javas ...

  3. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入

    上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-补充WebApi与Unity注入-配置文件

    系列目录 上一篇演示了WebApi利用Unity注入 很多人问我如何用配置文件来配置注入,本节演示如何利用配置文件来注入,道理是一样的,跳转到上一节下载源码一起来动手! 1.打开源码定位到文件Depe ...

  5. Spring配置文件标签报错:The prefix "XXX" for element "XXX:XXX" is not bound. .

    例如:The prefix "context" for element "context:annotation-config" is not bound. 这种 ...

  6. nginx服务器安装及配置文件详解

    nginx在工作中已经有好几个环境在使用了,每次都是重新去网上扒博客,各种编译配置,今天自己也整理一份安装文档和nginx.conf配置选项的说明,留作以后参考.像负载均衡配置(包括健康检查).缓存( ...

  7. C#开发中使用配置文件对象简化配置的本地保存

    C#开发中使用配置文件对象简化配置的本地保存 0x00 起因 程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序 ...

  8. 使用T4模板生成不同部署环境下的配置文件

    在开发企业级应用的时候,通常会有不同的开发环境,比如有开发环境,测试环境,正式环境,生产环境等.在一份代码部署到不同环境的时候,不同环境的配置文件可能需要根据目标环境不同而不同.比如在开发环境中,数据 ...

  9. 配置文件Java读写

    今天把配置文件的Bug修复了,总结一下Java配置文件如何读写 配置文件的格式 以.properties后缀结尾,内容不出现空格和双引号 //config.properties Driver=com. ...

随机推荐

  1. 报错:Exception in thread "main" com.typesafe.config.ConfigException$UnresolvedSubstitution

    报错现象: 报错原因: pom文件中的jar包太高,可以降低jar包的版本号. 报错解决: 我将2.11换成了2.10,即可解决. <dependency> <groupId> ...

  2. 学习笔记之Fluent Python

    Fluent Python by Luciano Ramalho https://learning.oreilly.com/library/view/fluent-python/97814919462 ...

  3. [转][C#]程序的动态编译

    转自:https://blog.csdn.net/clb929/article/details/51385399 附 文件下载

  4. CodeSmith和Powerdesigner的搭建和实例化操作 转载自黄聪同学

    好了,废话少说,开始我们的CodeSmith旅程吧,我先讲讲这个系列教程要完成的目标吧,众所周知,CodeSmith其中一个强大的功能就是依照模板生成批量代码,这也是吸引着众多编程人士使用它的原因,它 ...

  5. (转)EF5+SQLserver2012迁移到EF6+mysql5.5.47

    原文地址:https://www.cnblogs.com/tinyjian/p/6235014.html:https://www.cnblogs.com/tinyjian/p/6235397.html ...

  6. js中记住密码功能

    js中记住密码功能(在前端实现) 直接上例子(如果你也要实现的话注意改一些变量名称,jsp代码不包含样式) Jsp代码: <form class="am-form tpl-form-l ...

  7. python中建模分析零息票收益率曲线--复利和连续复利

    收益率曲线(Yield Curve)是显示一组货币和信贷风险均相同,但期限不同的债券或其他金融工具收益率的图表.纵轴代表收益率,横轴则是距离到期的时间.在此用python建模分析零息票收益率曲线,输出 ...

  8. gentoo 图像方面的软件

    图像方面的软件一般包括:查看图像,屏幕截图,图像修改. 查看图像简单的可以安装 feh,但是 feh 一般作为墙纸来用.稍微好一些的是 gqview. 屏幕截图可以用 screengrab,使用的时候 ...

  9. python 爬虫启航

    1. 使用excel(简单使用) 数据- 自网站-导入 2.you-get python爬虫入门 1.环境配置 python,request,lxml 2.原理 爬虫的框架如下: 1.挑选种子URL: ...

  10. SpringBoot +Jpa+ Hibernate+Mysql工程

    1 使用工具workspace-sts 3.9.5.RELEASE (1)新建一个SpringBoot 项目,选择加载项目需要的的组件.DevTools,JPA,Web,Mysql. Finish.  ...