anyline 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<property key="APP_ID">wx67b***b345f</property>
<property key="PAY_API_SECRET">jE74f***wvZj2</property>
<property key="PAY_MCH_ID">138***02</property>
<property key="SIGN_TYPE">MD5</property>
<property key="PAY_NOTIFY_URL">http://***</property>
</config>
</configs>
参考每个模块下相应的配置文件示例
配置文件一般以configs作根节点
其下有多个config
在代码中可以根据config.key来确定调用哪个配置
<configs>
<config key="default">
<property key="KEY">VALUE</property>
</config>
</configs>
anyline-nacos集成了nacos配置中心用来配置文件集中管理与实时同步,
需要在classpath下添加配置文件anyline-nacos.xml
在nacos上创建配置文件时,需要与配置类的CONFIG_NAME值保持一致,如PageNavi.CONFIG_NAME = "anyline-navi.xml"
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<!-- 服务器地址 -->
<property key="ADDRESS">192.168.9.10</property>
<!-- 端口 默认8848 -->
<property key="PORT">8848</property>
<!-- namespace 默认public -->
<property key="NAMESPACE">public</property>
<!-- group 默认 DEFAULT_GROUP -->
<property key="GROUP">DEFAULT_GROUP</property>
<!-- 是否自动扫描配置类 默认true -->
<property key="AUTO_SCAN">true</property>
</config>
</configs>
对于多个环境配置不同的情况 如生产环境与测试环境与开发环境
开发环境多变,生产与测试相对固定
为避免开发环境提交的配置误覆盖生产环境.需要在生产环境中创建一份以anyline-config-*.xml配置文件
配置文件在开发环境一般只有一个完整配置
在测试和生产环境会有其他的配置文件anyline-config-*.xml
系统加载配置文件时首先加载anyline-config.xml 后加载anyline-config-*.xml
如果有重复key,anyline-config.xml中的重复数据将会被覆盖.
是为了避免项目发布时,因修改生产环境配置文件失误造成的问题.
常见如多个境调用接口的IP不同,多个数据库中的主键值不一致
其中在核心配置文件anyline-config.xml中的RELOAD用来设置系统多长时间重新加载一次配置文件(包括所有配置文件)
几个常用的配置参数
//DataRow的key大小写(默认大写)
DataRow.DEFAULT_KEY_KASE = KeyAdapter.KEY_CASE.LOWER;
//http分页参数-当前当前第几页(默认page)
PageNaviConfig.DEFAULT_KEY_PAGE_NO = "pageNum";
//http分页参数-每页多少条(默认vol)
PageNaviConfig.DEFAULT_KEY_PAGE_ROWS = "pageSize";
//是否允许前端设置每页多少条(默认false)
PageNaviConfig.DEFAULT_VAR_CLIENT_SET_VOL_ENABLE = true;
不同环境下的配置文件
以anyline-aliyun-sms为例,每个工具类都会对应一个配置类与默认实例化类
如SMSUtil对应SMSConfig与SMSBeanSMSConfig用来配置帐号密码等
SMSBean用来在系统启动中往Spring上下文中注入一个默认的SMSUtil实例
SMSUtil就是开发中常用的工具了,如发送短信、查询短信接收状态、创建短信模板等
其中SMSConfig中的变量可以通过多种方式设置
1.配置文件anyline-aliyun-sms.xml(根据SMSConfig中的静态变量CONFIG_NAME = "anyline-aliyun-sms.xml";)
这个配置文件中可以配置多组帐号密码,开发过程中根据需要生成针对不同帐号的util
一般这样配置
<configs><config key="default">帐号、密码等</config><config key="instance-oa">帐号、密码等</config><config key="instance-crm">帐号、密码等</config></configs>SMSUtil.getInstance("instance-crm")的方式获取不同的util
2.如果帐号无限多、如开发一个SAAS平台,这时的帐号密码会由不同的租户或用户自己设置,数据通常要保存在数据中。在运行过程中根据用户环境来调用不同的util
在实例化util前可以通过
SMSConfig.register("用户编号", DataRow)的方式先注册,其中DataRow中的KEY与配置文件中的KEY相对应
SMSConfig中一般会提供多个register的重载
再通过SMSUtil.getInstance("用户编号")的方式获取util
3.对于一些简单的项目,不想使用配置文件的可以通过2的方式直接register方式注册一个
也可以设置SMSConfig中的静态变更 DEFAULT_配置文件中的KEY
如DEFAULT_ACCOUNT(对应配置文件中的ACCOUNT)、DEFAULT_PASSWORD(对应配置文件中的PASSWORD)
这样在系统启动后会在Spring上下文中默认注入一个SMSUtil实例
4.现有的项目配置文件中设置,参考SMSBean中的属性
@Value("${anyline.aliyun.sms.key:}") private String ACCESS_KEY;
这样在系统启动后会在Spring上下文中默认注入一个SMSUtil实例
5.nacos配置中心
需要添加依赖anyline-nacos
anyline-nacos本身也有配置文件用来指定NACOS配置中心地址以及namespace/group
可以通过anyline-nacos.xml配置文件设置
如果是spring boot项目则按spring boot方式来配置如 nacos.config.server-addr
如果是spring cloud项目则按spring cloud方式来配置如 spring.cloud.nacos.config.server-addr
配置好nacos后在nacos中根据 根据SMSConfig中的静态变量CONFIG_NAME = "anyline-aliyun-sms.xml" 命名nacos中的dataId
Nacos配置文件
所有org.anyline包下的配置文件都统一实现了nacos的读取,实际是由父类AnylineConfig实现
如org.anyline.aliyun.oss.util.OSSConfig
public class OSSConfig extends AnylineConfig
每个类中有一个CONFIG_NAME 属性用来指定配置文件名称
public static String CONFIG_NAME = "anyline-aliyun-oss.xml";
接入过程:
1.依赖anyline-nacos
<dependency>
<groupId>org.anyline</groupId>
<artifactId>anyline-nacos</artifactId>
</dependency>
2.在项目中创建anyline-nacos.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<!-- 服务器地址,一般使用内网IP,如果对外开放注意访问控制,如利用nginx设置IP白名单 -->
<property key="ADDRESS">IP或域名</property>
<!-- 端口 默认8848 -->
<property key="PORT">80</property>
<!-- 没有特别需要,以下5个不需要配置 -->
<!-- namespace 默认为空,会读取public空间下的配置文件,默认namespace是空不需要配置这项,而不是配置成public -->
<property key="NAMESPACE">2c9cbc2f-9ad0-4050-848f-70765b3ddd12</property>
<!-- group 默认 DEFAULT_GROUP -->
<property key="GROUP">DEFAULT_GROUP</property>
<!-- 是否自动扫描配置类 默认true -->
<property key="AUTO_SCAN">true</property>
<!-- 需要扫描的包,多个包以逗号分隔,默认只扫描org.anyline和org.anyboot两个包 -->
<property key="SCAN_PACKAGE">org.anyline</property>
<!-- 需要扫描的类,多个类以逗号分隔 -->
<property key="SCAN_CLASS">org.anyline.entity.PageNaviConfig</property>
</config>
</configs>
注意以上的NAMESPACE不是命名空间的名称而是一个8-4-4-4-12格式的ID号
关于微信配置文件白名单设置
由于微信API中有一部分接口仅对白名单IP开放,在测试机上经常会遇到调用接口失败的情况。
所以增加了配置项SERVER_WHITELIST,设置成与微信公众平台白名称一致,多个IP以","分开,一般在生产环境不需要设置,主要是针对测试环境,系统运行时如果检测到配置文件中设置了白名单并且本机IP不在白名单内,则遇到仅对白名单开发的API时直接跳过,不再尝试调用,如获取access token
微信公众平台白名单IP设置:
进入微信公众平台,点击开发——>基本配置 ,开启微信公众平台的开发者密码(AppSecret),记住密码,并保存;(如果没有开启,先开启)开启之后,在开发者密码(AppSecret)的下方会出现IP白名单;
添加ip白名单,添加调用微信接口的服务器的ip地址
微信H5环境配置文件:anyline-wechat-wap.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<property key="APP_ID">wx16***21a57</property>
<property key="SIGN_TYPE">RSA</property>
<property key="SERVER_TOKEN">***</property>
<!-- 暂时与公众号回调一致 -->
<property key="WEB_SERVER">http://***</property>
<property key="OAUTH_REDIRECT_URL">http://***</property>
<property key="PAY_API_SECRET">oaonhd**********ohvottvq</property>
<property key="PAY_MCH_ID">143*****402</property>
<property key="PAY_NOTIFY_URL">http://****/js/hm/pay/ntf/wx_mp</property>
<property key="PAY_CALLBACK_URL"></property>
<property key="PAY_KEY_STORE_FILE">D:\\apiclient_cert.p12</property>
<property key="PAY_KEY_STORE_PASSWORD">111111</property>
</config>
</configs>
微信开放台配置文件:anyline-wechat-open.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<property key="APP_ID">wx67***45f</property>
<property key="APP_SECRET">f013***5473a877</property>
<property key="SIGN_TYPE">MD5</property>
<property key="SERVER_TOKEN">any***rg</property>
<property key="PAY_API_SECRET">oaonhd**********ohvpvbozqqayottvq</property>
<property key="PAY_MCH_ID">143*****402</property>
<property key="PAY_NOTIFY_URL">http://****/js/hm/pay/ntf/wx_mp</property>
<property key="PAY_CALLBACK_URL"></property>
<property key="PAY_KEY_STORE_FILE">D:\\apiclient_cert.p12</property>
<property key="PAY_KEY_STORE_PASSWORD">111111</property>
</config>
</configs>
微信公众平台配置文件:anyline-wechat-mp.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<property key="APP_ID">wxc403*******b5f06</property>
<property key="APP_SECRET">2ede1c*********c915f440745df8</property>
<property key="SIGN_TYPE">RSA</property>
<property key="SERVER_TOKEN">haofresh</property>
<property key="WEB_SERVER">http://******</property>
<property key="OAUTH_REDIRECT_URL">http://*******/wap/hm/lg/cb_wx_mp</property>
<property key="PAY_API_SECRET">oaonhd**********ohvpvbozqqayottvq</property>
<property key="PAY_MCH_ID">143*****402</property>
<property key="PAY_NOTIFY_URL">http://****/js/hm/pay/ntf/wx_mp</property>
<property key="PAY_CALLBACK_URL"></property>
<property key="PAY_KEY_STORE_FILE">D:\\apiclient_cert.p12</property>
<property key="PAY_KEY_STORE_PASSWORD">111111</property>
<!-- 支付到银行卡公钥文件 -->
<property key="PAY_BANK_RSA_PUBLIC_KEY_FILE"></property>
<property key="SERVER_WHITELIST"></property>
</config>
</configs>
核心配置文件:anyline-config.xml
<!-- 多长时间加载一次配置文件 (秒),包括核心配置文件与其他配置文件-->
<property key="RELOAD">120</property>
<!-- 存放在servlet context中的key(配置文件热重载时不覆盖当前key)(如el表达式中引用${al.RELOAD})-->
<property key="SERVLET_ATTRIBUTE_KEY">al</property>
<property key="DEBUG">true</property>
<!-- sql 存放根目录 -->
<property key="SQL_STORE_DIR">/WEB-INF/classes/sql</property>
<!-- 密钥 文件路径 -->
<property key="DES_KEY_FILE">/WEB-INF/classes/key.xml</property>
<!-- 国际化文本存放目录 -->
<property key="I18N_MESSAGE_DIR">/WEB-INF/classes/message</property>
<!-- 国际化消息SESSION存放KEY -->
<property key="I18N_MESSAGE_SESSION_KEY">I18N_MESSAGE_SESSION_KEY</property>
<!-- 国际化消息默认语言 -->
<property key="I18N_MESSAGE_DEFAULT_LANG">cn</property>
<!-- 默认主键 -->
<property key="DEFAULT_PRIMARY_KEY">ID</property>
<!-- 自动添加主键 -->
<property key="AUTO_CREATE_PRIMARY_KEY">true</property>
<!-- 是否显示执行的SQL -->
<property key="SHOW_SQL">true</property>
<property key="SHOW_SQL_PARAM">true</property>
<property key="SHOW_SQL_WHEN_ERROR">false</property>
<property key="SHOW_SQL_PARAM_WHEN_ERROR">false</property>
<!-- 是否更新NULL列 -->
<property key="IS_UPDATE_NULL_COLUMN">false</property>
<!-- 是否更新空列 -->
<property key="IS_UPDATE_EMPTY_COLUMN">false</property>
<!-- 生成主键的存储过程 按3个输入参数的格式:表,列,其他-->
<property key="AUTO_CREATE_PRIMARY_KEY">true</property>
<property key="CREATE_PRIMARY_KEY_PROCEDURE">PROC_CREATE_PRIMARY</property>
<!-- 模板文件目录 -->
<property key="TEMPLET_FILE_PATH_WEB">/WEB-INF/web/home/template/default.jsp</property>
<property key="TEMPLET_FILE_PATH_WAP">/WEB-INF/def/wap/common/templet.jsp</property>
<!-- fail文件路径 -->
<property key="FAIL_FILE_PATH">/WEB-INF/def/web/common/error/fail.jsp</property>
<!-- error文件路径 -->
<property key="ERROR_FILE_PATH">/WEB-INF/def/web/common/error/error.jsp</property>
<!-- 是否启用(一级)缓存 -->
<property key="IS_USE_CACHE">true</property>
密钥配置文件:key.xml
key.xml设置加密解密密钥,第1个为项目正在使用的默认密钥,
其他的为历史密钥,主要解密搜索引擎快照中或收藏中的的密文.
(通过第1组密钥解密失败后,会依次尝试其他密钥)
key.xml中 密钥文件一般不修改,应该新添加一组配置,把原来默认的密钥放在后面的位置.
version长度不可多于3位
如果删除或修改密钥,有可能造成通过搜索引擎快照连接过来的访问解密失败.
在新添加了默认密钥一段时间后,如果确定引擎中已更新至最新版本可以删除历史密钥,以提高解密速度.
<!--?xml version="1.0" encoding="UTF-8"?-->
<keys>
<!-- 第一个为默认密钥,之后为历史密钥(主要解密搜索引擎快照) -->
<!-- 密钥版本号长度<=3 -->
<key version="v01">
<!-- 默认密钥 -->
<des-key>5****6d9</des-key>
<!-- URL参数密钥 -->
<des-key-param>@#CF***(*7#</des-key-param>
<!-- URL参数名密钥 -->
<des-key-param-name>@***$%#</des-key-param-name>
<!-- URL参数值密钥 -->
<des-key-param-value>@#)_UI%097#</des-key-param-value>
<!-- 默认前缀 -->
<des-prefix></des-prefix>
<!-- URL参数前缀 -->
<des-prefix-param>p</des-prefix-param>
<!-- URL参数名前缀 -->
<des-prefix-param-name>k</des-prefix-param-name>
<!-- URL参数值前缀 -->
<des-prefix-param-value>v</des-prefix-param-value>
</key>
</keys>
邮件发送配置文件:anyline-mail.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<property key="ACCOUNT">server@anyline.org</property>
<property key="USERNAME">anyline</property>
<property key="PASSWORD">tySb6ZK******5SXXPNZhg</property>
<property key="PROTOCOL">smtp</property>
<property key="HOST">smtp.anyline.org</property>
<property key="PORT">25</property>
</config>
</configs>
QQ公众平台配置文件:anyline-qq-mp.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<property key="APP_ID">101***22</property>
<property key="API_KEY">bd7f56f0***822566</property>
<!-- 登录成功回调url 保持与QQ互联(https://connect.qq.com/manage.html)对应的APP网站回调域一致 -->
<property key="OAUTH_REDIRECT_URL">http://***</property>
</config>
</configs>
QQ开放平台配置文件:anyline-qq-open.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<property key="APP_ID">wx67b***b345f</property>
<property key="PAY_API_SECRET">jE74f***wvZj2</property>
<property key="PAY_MCH_ID">138***02</property>
<property key="SIGN_TYPE">MD5</property>
<property key="PAY_NOTIFY_URL">http://***</property>
</config>
</configs>
极光推送配置文件:anyline-jpush.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<property key="APP_KEY"></property>
<property key="MASTER_SECRET"></property>
</config>
</configs>
环信配置文件:anyline-easemob.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config>
<property key="HOST">https://a1.easemob.com</property>
<property key="APP_KEY">1118***uo</property>
<property key="ORG_NAME">111***5170</property>
<property key="APP_NAME">***</property>
<property key="CLIENT_ID">YXA***5LujQ</property>
<property key="CLIENT_SECRET">YXA6*****CilUFKxP2jl-wE</property>
</config>
</configs>
高德配置文件:anyline-amap.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<property key="KEY">3b9371b483******c219522fdc</property>
<property key="TABLE_ID">5937******ab517b6a</property>
<property key="PRIVATE_KEY">72c5c*****4144682</property>
</config>
</configs>
阿里云短信配置文件:anyline-aliyun-sms.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<!-- 申请地址:https://ak-console.aliyun.com -->
<property key="ACCESS_KEY"></property>
<property key="ACCESS_SECRET"></property>
<property key="SMS_SIGN"></property>
</config>
</configs>
阿里云对象存储配置文件:anyline-aliyun-oss.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<property key="ACCESS_ID"></property>
<property key="ACCESS_SECRET"></property>
<property key="ENDPOINT">oss-cn-shanghai.aliyuncs.com</property>
<property key="BUCKET">alcdn</property>
<!-- 生成的密钥多长时间有效 -->
<property key="EXPIRE_SECOND">300</property>
<!-- 默认文件目录 -->
<property key="DIR"></property>
</config>
</configs>
支付宝配置文件:anyline-alipay.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<property key="APP_ID">wx16***21a57</property>
<property key="SIGN_TYPE">RSA</property>
<property key="SERVER_TOKEN">***</property>
<!-- 暂时与公众号回调一致 -->
<property key="WEB_SERVER">http://***</property>
<property key="OAUTH_REDIRECT_URL">http://***</property>
<property key="PAY_API_SECRET">oaonhd**********ohvottvq</property>
<property key="PAY_MCH_ID">143*****402</property>
<property key="PAY_NOTIFY_URL">http://****/js/hm/pay/ntf/wx_mp</property>
<property key="PAY_CALLBACK_URL"></property>
<property key="PAY_KEY_STORE_FILE">D:\\apiclient_cert.p12</property>
<property key="PAY_KEY_STORE_PASSWORD">111111</property>
</config>
</configs>
分页配置文件:anyline-navi.xml
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config key="default">
<!-- 第一页 -->
<property key="STYLE_BUTTON_FIRST">第一页</property>
<!-- 上一页 -->
<property key="STYLE_BUTTON_PREV">上一页</property>
<!-- 下一页 -->
<property key="STYLE_BUTTON_NEXT">下一页</property>
<!-- 最后页 -->
<property key="STYLE_BUTTON_LAST">最后页</property>
<!-- 数据统计格式 -->
<property key="STYLE_STAT_FORMAT"></property>
<!-- 查询无内容提示 -->
<property key="STYLE_DATA_EMPTY"></property>
<!-- 最后一页提示 -->
<property key="STYLE_PAGE_OVER"></property>
<!-- 下标数量 -->
<property key="VAR_PAGE_RANGE">5</property>
<!-- 显示上一页下一页 -->
<property key="VAR_SHOW_BUTTON">true</property>
<!-- 显示下标 -->
<property key="VAR_SHOW_INDEX">true</property>
<!-- 显示下标省略符 1...5,6,7,8,9...20 -->
<property key="VAR_SHOW_INDEX_ELLIPSIS">true</property>
<property key="STYLE_INDEX_ELLIPSIS">...</property>
<!-- 显示数据统计 -->
<property key="VAR_SHOW_STAT">true</property>
<!-- 跳转到 -->
<property key="VAR_SHOW_JUMP">false</property>
<!-- 加载更多格式 -->
<property key="STYLE_LOAD_MORE_FORMAT">加载更多</property>
<property key="STYLE_FILE_PATH">//www.anyline.org/plugin/navi/navi.css</property>
<property key="SCRIPT_FILE_PATH">//www.anyline.org/plugin/navi/navi.js</property>
<!-- 每页多少条 -->
<property key="VAR_PAGE_DEFAULT_VOL">10</property>
<!-- 每页最多可设置显示多少条 -->
<property key="VAR_PAGE_MAX_VOL">100</property>
<!-- 是否允许前端设置每页多少条 -->
<property key="VAR_CLIENT_SET_VOL_ENABLE">true</property>
<!-- 用户选择每页多少条 -->
<!-- STYLE_PAGE_VOL与STYLE_PAGE_VOL_NUMBERS 会相互覆盖 (以配置文件后设置的为准) -->
<property key="STYLE_PAGE_VOL"><select onchange=''_navi_change_vol({navi-conf})'' id=''navi_vol_set_{navi-conf-key}'' class=''navi-vol-set''><option value=''10''>10 条/页</option><option value=''20''>20 条/页</option><option value=''30''>30 条/页</option><option value=''50''>50 条/页</option><option value=''100''>100 条/页</option></select></property>
<!-- 生成的select.class -->
<property key="VAR_PAGE_VOL_CLASS">navi-vol-set</property>
<!-- 显示位置 last:最后,page:页标之后-->
<property key="VAR_PAGE_VOL_INDEX">last</property>
<!-- 生成select的option -->
<property key="VAR_PAGE_VOL_NUMBERS">10,20,30,50,100</property>
<!-- 统计样式 -->
<property key="STYLE_STAT_FORMAT"><div class=''navi-summary''>共<span class=''navi-total-row''>{totalRow}</span>条 第<span class=''navi-cur-page''>{curPage}</span>/<span class=''navi-total-page''>{totalPage}</span>页</div></property>
</config>
</configs>
更多建议: