当前位置: 首页 > news >正文

18款禁用网站app直播建设部资质网站

18款禁用网站app直播,建设部资质网站,新建网站的缺点,网站建设对标行业分析1、Swagger2 测试工具 编写和维护接口文档是每个程序员的职责#xff0c;根据Swagger2可以快速帮助我们编写最新的API接口文档#xff0c;再也不用担心开会前仍忙于整理各种资料了#xff0c;间接提升了团队开发的沟通效率。 swagger通过注解表明该接口会生成文档#xf…1、Swagger2 测试工具 编写和维护接口文档是每个程序员的职责根据Swagger2可以快速帮助我们编写最新的API接口文档再也不用担心开会前仍忙于整理各种资料了间接提升了团队开发的沟通效率。 swagger通过注解表明该接口会生成文档包括接口名、请求方法、参数、返回信息的等等。 Api修饰整个类描述Controller的作用 ApiOperation描述一个类的一个方法或者说一个接口 ApiParam单个参数描述 ApiModel用对象来接收参数 ApiModelProperty用对象接收参数时描述对象的一个字段 ApiImplicitParam一个请求参数 ApiImplicitParams多个请求参数 a. 引入依赖 在common模块pom.xml引入Swagger2依赖 !--swagger-- dependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger2/artifactId /dependency dependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger-ui/artifactId /dependency b. 添加swagger2配置类 在service-util模块添加 com.atguigu.yygh.common.config.Swagger2Config 配置类 package com.atguigu.yygh.common.config;/*** Swagger2 配置信息*/ Configuration EnableSwagger2 public class Swagger2Config {Beanpublic Docket webApiConfig() {return new Docket(DocumentationType.SWAGGER_2).groupName(webApi).apiInfo(webApiInfo()).select()// 只显示api路径下的页面.paths(Predicates.and(PathSelectors.regex(/api/.*))).build();}Beanpublic Docket adminApiConfig() {return new Docket(DocumentationType.SWAGGER_2).groupName(adminApi).apiInfo(adminApiInfo()).select()// 只显示 admin 路径下的页面.paths(Predicates.and(PathSelectors.regex(/admin/.*))).build();}private ApiInfo webApiInfo() {return new ApiInfoBuilder().title(网站-API文档).description(本文档描述了网站微服务接口定义).version(1.0).contact(new Contact(atguigu,http://atguigu.com,codeLemon163.com)).build();}private ApiInfo adminApiInfo() {return new ApiInfoBuilder().title(后台管理系统——API文档).description(本文档描述了后台管理系统微服务接口定义).version(1.0).contact(new Contact(atguigu, http://atguigu.com, codelemon163.com)).build();} } c. 在启动类上添加包扫描 因为Swagger2Config 和启动类不在一个模块下引入进来之后需要添加组件扫描。否则不能访问SwaggerUI界面 SpringBootApplication ComponentScan(basePackages com.atguigu) public class ServiceHospApplication {public static void main(String[] args) {SpringApplication.run(ServiceHospApplication.class, args);} } 2、搭建医院模块(service_hosp) 医院设置主要是用来保存开通医院的一些基本信息每个医院一条信息保存了医院编号平台分配全局唯一和接口调用相关的签名key等信息是整个流程的第一步只有开通了医院设置信息才可以上传医院相关信息。 我们所开发的功能就是基于单表的一个CRUD、锁定/解锁和发送签名信息这些基本功能。 a. 创建数据库 表结构 hosname 医院名称 hoscode 医院编号平台分配全局唯一api接口必填信息 api_url 医院回调的基础url如预约下单我们要调用该地址去医院下单 sign_key 双方api接口调用的签名key有平台生成 contacts_name 医院联系人姓名 contacts_phone 医院联系人手机 status 状态锁定/解锁 # # Database yygh_hosp #CREATE DATABASE IF NOT EXISTS yygh_hosp CHARACTER SET utf8mb4; USE yygh_hosp;# # Structure for table hospital_set #CREATE TABLE hospital_set (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 编号,hosname varchar(100) DEFAULT NULL COMMENT 医院名称,hoscode varchar(30) DEFAULT NULL COMMENT 医院编号,api_url varchar(100) DEFAULT NULL COMMENT api基础路径,sign_key varchar(50) DEFAULT NULL COMMENT 签名秘钥,contacts_name varchar(20) DEFAULT NULL COMMENT 联系人,contacts_phone varchar(11) DEFAULT NULL COMMENT 联系人手机,status tinyint(3) NOT NULL DEFAULT 0 COMMENT 状态,create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间,is_deleted tinyint(3) NOT NULL DEFAULT 0 COMMENT 逻辑删除(1:已删除0:未删除),PRIMARY KEY (id),UNIQUE KEY uk_hoscode (hoscode) ) ENGINEInnoDB AUTO_INCREMENT2 DEFAULT CHARSETutf8 COMMENT医院设置表;b. service_hosp.pom 在service下创建service_hosp模块 parentgroupIdcom.atguigu.yygh/groupIdartifactIdservice/artifactIdversion0.0.1-SNAPSHOT/version /parentgroupIdcom.atguigu.yygh/groupId artifactIdservice_hosp/artifactId version0.0.1-SNAPSHOT/version packagingjar/packaging nameservice-hosp/name descriptionservice-hosp/descriptiondependencies /dependenciesbuildfinalNameservice-hosp/finalNamepluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins /build c. application.yaml # 服务端口 server:port: 8201spring:application:# 服务名name: service-hosp# 环境设置dev、test、prodprofiles:active: dev# 数据库连接datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/yygh_hosp?characterEncodingutf-8useSSLfalseusername: rootpassword: 0903he0419# 返回json的全局时间格式jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8mybatis-plus:#配置mapper xml文件的路径mapper-locations: com/atguigu/yygh/hosp/mapper/xml/*.xmld. 创建配置类 在com.atguigu.yygh.hosp.config 创建HospConfig 配置类 将mapper扫描放在配置类上 Configuration MapperScan(com.atguigu.yygh.hosp.mapper) public class HospConfig {// Mybatis-Plus 分页插件Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();} } e. 导入实体类 BaseEntity Data public class BaseEntity implements Serializable {ApiModelProperty(value id)TableId(type IdType.AUTO)private Long id;ApiModelProperty(value 创建时间)JsonFormat(pattern yyyy-MM-dd HH:mm:ss)TableField(create_time)private Date createTime;ApiModelProperty(value 更新时间)TableField(update_time)private Date updateTime;ApiModelProperty(value 逻辑删除(1:已删除0:未删除))TableLogicTableField(is_deleted)private Integer isDeleted;ApiModelProperty(value 其他参数)TableField(exist false)private MapString,Object param new HashMap(); } com.atguigu.yygh.model.hosp.HospitalSet Data ApiModel(description 医院设置) TableName(hospital_set) public class HospitalSet extends BaseEntity {private static final long serialVersionUID 1L;ApiModelProperty(value 医院名称)TableField(hosname)private String hosname;ApiModelProperty(value 医院编号)TableField(hoscode)private String hoscode;ApiModelProperty(value api基础路径)TableField(api_url)private String apiUrl;ApiModelProperty(value 签名秘钥)TableField(sign_key)private String signKey;ApiModelProperty(value 联系人姓名)TableField(contacts_name)private String contactsName;ApiModelProperty(value 联系人手机)TableField(contacts_phone)private String contactsPhone;ApiModelProperty(value 状态)TableField(status)private Integer status;} HospitalSetVo Data public class HospitalSetQueryVo {ApiModelProperty(value 医院名称)private String hosname;ApiModelProperty(value 医院编号)private String hoscode; } f. 创建统一返回结果类 Result /*** 全局统一返回结果类*/ Data ApiModel(value 全局统一返回结果) public class ResultT {ApiModelProperty(value 返回码)private Integer code;ApiModelProperty(value 返回消息)private String message;ApiModelProperty(value 返回数据)private T data;public Result(){}protected static T ResultT build(T data) {ResultT result new ResultT();if (data ! null)result.setData(data);return result;}public static T ResultT build(T body, ResultCodeEnum resultCodeEnum) {ResultT result build(body);result.setCode(resultCodeEnum.getCode());result.setMessage(resultCodeEnum.getMessage());return result;}public static T ResultT build(Integer code, String message) {ResultT result build(null);result.setCode(code);result.setMessage(message);return result;}public staticT ResultT ok(){return Result.ok(null);}/*** 操作成功* param data* param T* return*/public staticT ResultT ok(T data){ResultT result build(data);return build(data, ResultCodeEnum.SUCCESS);}public staticT ResultT fail(){return Result.fail(null);}/*** 操作失败* param data* param T* return*/public staticT ResultT fail(T data){ResultT result build(data);return build(data, ResultCodeEnum.FAIL);}public ResultT message(String msg){this.setMessage(msg);return this;}public ResultT code(Integer code){this.setCode(code);return this;}public boolean isOk() {if(this.getCode().intValue() ResultCodeEnum.SUCCESS.getCode().intValue()) {return true;}return false;} } ResultCodeEnum /*** 统一返回结果状态信息类*/ Getter public enum ResultCodeEnum {SUCCESS(200,成功),FAIL(201, 失败),PARAM_ERROR( 202, 参数不正确),SERVICE_ERROR(203, 服务异常),DATA_ERROR(204, 数据异常),DATA_UPDATE_ERROR(205, 数据版本异常),LOGIN_AUTH(208, 未登陆),PERMISSION(209, 没有权限),CODE_ERROR(210, 验证码错误), // LOGIN_MOBLE_ERROR(211, 账号不正确),LOGIN_DISABLED_ERROR(212, 改用户已被禁用),REGISTER_MOBLE_ERROR(213, 手机号已被使用),LOGIN_AURH(214, 需要登录),LOGIN_ACL(215, 没有权限),URL_ENCODE_ERROR( 216, URL编码失败),ILLEGAL_CALLBACK_REQUEST_ERROR( 217, 非法回调请求),FETCH_ACCESSTOKEN_FAILD( 218, 获取accessToken失败),FETCH_USERINFO_ERROR( 219, 获取用户信息失败),//LOGIN_ERROR( 23005, 登录失败),PAY_RUN(220, 支付中),CANCEL_ORDER_FAIL(225, 取消订单失败),CANCEL_ORDER_NO(225, 不能取消预约),HOSCODE_EXIST(230, 医院编号已经存在),NUMBER_NO(240, 可预约号不足),TIME_NO(250, 当前时间不可以预约),SIGN_ERROR(300, 签名错误),HOSPITAL_OPEN(310, 医院未开通暂时不能访问),HOSPITAL_LOCK(320, 医院被锁定暂时不能访问),;private Integer code;private String message;private ResultCodeEnum(Integer code, String message) {this.code code;this.message message;} } g. Mapper 层 com.atguigu.yygh.model.hosp.mapper Mapper public interface HospitalSetMapper extends BaseMapperHospitalSet { } com.atguigu.yygh.model.hosp.mapper.xml ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.atguigu.yygh.hosp.mapper.HospitalSetMapper/mapper h. Service 层 com.atguigu.yygh.model.hosp.service public interface HospitalSetService extends IServiceHospitalSet { } com.atguigu.yygh.model.hosp.service.impl Service public class HospitalSetServiceImpl extends ServiceImplHospitalSetMapper, HospitalSet implements HospitalSetService {Autowiredprivate HospitalSetMapper hospitalSetMapper; } i. Controller 层 com.atguigu.yygh.model.hosp.controller package com.atguigu.yygh.hosp.controller;Api(tags 医院设置管理) RestController RequestMapping(/admin/hosp/hospitalSet) public class HospitalSetController {Autowiredprivate HospitalSetService hospitalSetService;/** 1、查询医院设置表所有信息* */ApiOperation(value 获取所有医院设置)GetMapping(findAll)public Result findAllHospitalSet() {// 调用 service的方法ListHospitalSet list hospitalSetService.list();return Result.ok(list);}/** 2、逻辑删除医院设置* */ApiOperation(value 逻辑删除医院设置)DeleteMapping({id})public Result removeHospSet(PathVariable Long id) {boolean flag hospitalSetService.removeById(id);if (flag) {return Result.ok();} else {return Result.fail();}}/** 3、条件查询带分页* */ApiOperation(value 条件查询带分页)PostMapping(findPageHospSet/{current}/{limit})public Result findPageHospSet(PathVariable long current,PathVariable long limit,RequestBody(required false)HospitalSetQueryVo hospitalSetQueryVo) {// 创建 page 对象传递当前页每页记录数PageHospitalSet page new Page(current, limit);QueryWrapperHospitalSet wrapper new QueryWrapper();String hosname hospitalSetQueryVo.getHosname();//医院名称String hoscode hospitalSetQueryVo.getHoscode();//医院编号if (!StringUtils.isEmpty(hosname)) {wrapper.like(hosname, hospitalSetQueryVo.getHosname());}if (!StringUtils.isEmpty(hoscode)) {wrapper.eq(hosocde, hospitalSetQueryVo.getHoscode());}// 调用方法实现分页查询PageHospitalSet pageHospitalSet hospitalSetService.page(page, wrapper);// 返回结果return Result.ok(pageHospitalSet);}/** 4、添加医院设置* */ApiOperation(value 添加医院设置)PostMapping(saveHospitalSet)public Result saveHospitalSet(RequestBody HospitalSet hospitalSet) {// 设置状态1 使用0 不能使用hospitalSet.setStatus(1);// 签名秘钥Random random new Random();hospitalSet.setSignKey(MD5.encrypt(System.currentTimeMillis() random.nextInt(1000)));//调用serviceboolean save hospitalSetService.save(hospitalSet);if (save) {return Result.ok();} else {return Result.fail();}}/** 5、根据id获取医院设置* */ApiOperation(value 根据id获取医院设置)GetMapping(getHospSet/{id})public Result getHospSet(PathVariable Long id) {HospitalSet hospitalSet hospitalSetService.getById(id);return Result.ok(hospitalSet);}/** 6、修改医院设置* */ApiOperation(value 修改医院设置)PostMapping(updateHospitalSet)public Result updateHospitalSet(RequestBody HospitalSet hospitalSet) {boolean flag hospitalSetService.updateById(hospitalSet);if (flag) {return Result.ok();} else {return Result.fail();}}/** 7、批量删除医院设置* */ApiOperation(value 批量删除医院设置)DeleteMapping(batchRemove)public Result batchRemoveHospitalSet(RequestBody ListLong idList) {boolean flag hospitalSetService.removeByIds(idList);if (flag) {return Result.ok();} else {return Result.fail();}}/** 8、医院设置锁定与解锁* */ApiOperation(value 医院设置锁定与解锁)PutMapping(lockHospitalSet/{id}/{status})public Result lockHospitalSet(PathVariable Long id,PathVariable Integer status) {// 根据id查询医院设置信息HospitalSet hospitalSet hospitalSetService.getById(id);// 设置状态hospitalSet.setStatus(status);// 调用方法hospitalSetService.updateById(hospitalSet);return Result.ok();}/** 9、发送签名秘钥* */PutMapping(sendKey/{id})public Result lockHospitalSet(PathVariable Long id) {HospitalSet hospitalSet hospitalSetService.getById(id);String signKey hospitalSet.getSignKey();String hoscode hospitalSet.getHoscode();// TODO 发送短信return Result.ok();} } j. 统一异常处理 在common-util模块添加自定义异常处理类——YyghException Data ApiModel(value 自定义全局异常类) public class YyghException extends RuntimeException {ApiModelProperty(value 异常状态码)private Integer code;/*** 通过状态码和错误消息创建异常对象* param message* param code*/public YyghException(String message, Integer code) {super(message);this.code code;}/*** 接收枚举类型对象* param resultCodeEnum*/public YyghException(ResultCodeEnum resultCodeEnum) {super(resultCodeEnum.getMessage());this.code resultCodeEnum.getCode();}Overridepublic String toString() {return YyghException{ code code , message this.getMessage() };} } 在common-util模块添加全局异常处理类——GlobalExceptionHandler /* * 全局异常处理类 * */ RestControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class)public Result error(Exception e) {e.printStackTrace();return Result.fail();}/** 自定义异常处理* */ExceptionHandler(YyghException.class)public Result error(YyghException e) {e.printStackTrace();System.out.println(e.getCode() : e.getMessage());return Result.build(e.getCode(), e.getMessage());} } 在controller中测试全局异常是否生效访问根据id获取医院设置此接口测试自定义异常 /* * 5、根据id获取医院设置 * */ ApiOperation(value 根据id获取医院设置) GetMapping(getHospSet/{id}) public Result getHospSet(PathVariable Long id) {try {// 模拟异常int a 1 / 0;} catch (Exception e) {throw new YyghException(失败了呀, 2002);}HospitalSet hospitalSet hospitalSetService.getById(id);return Result.ok(hospitalSet); } k. 统一日志处理 日志记录器Logger的行为是分等级的。如下表所示分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 默认情况下spring boot从控制台打印出来的日志级别只有INFO及以上级别可以配置日志级别 # 设置日志级别 logging:level:root: debug 这种方式只能将日志打印在控制台上 resources/logback-spring.xml ?xml version1.0 encodingUTF-8? configuration scantrue scanPeriod10 seconds!-- 日志级别从低到高分为TRACE DEBUG INFO WARN ERROR FATAL如果设置为WARN则低于WARN的信息都不会输出 --!-- scan:当此属性设置为true时配置文件如果发生改变将会被重新加载默认值为true --!-- scanPeriod:设置监测配置文件是否有修改的时间间隔如果没有给出时间单位默认单位是毫秒。当scan为true时此属性生效。默认的时间间隔为1分钟。 --!-- debug:当此属性设置为true时将打印出logback内部日志信息实时查看logback运行状态。默认值为false。 --contextNamelogback/contextName!-- name的值是变量的名称value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后可以使“${}”来使用变量。 --property namelog.path valueD:/yygh_log/edu /!-- 彩色日志 --!-- 配置格式变量CONSOLE_LOG_PATTERN 彩色日志格式 --!-- magenta:洋红 --!-- boldMagenta:粗红--!-- cyan:青色 --!-- white:白色 --!-- magenta:洋红 --property nameCONSOLE_LOG_PATTERNvalue%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)/!--输出到控制台--appender nameCONSOLE classch.qos.logback.core.ConsoleAppender!--此日志appender是为开发使用只配置最底级别控制台输出的日志级别是大于或等于此级别的日志信息--!-- 例如如果此处配置了INFO级别则后面其他位置即使配置了DEBUG级别的日志也不会被输出 --filter classch.qos.logback.classic.filter.ThresholdFilterlevelINFO/level/filterencoderPattern${CONSOLE_LOG_PATTERN}/Pattern!-- 设置字符集 --charsetUTF-8/charset/encoder/appender!--输出到文件--!-- 时间滚动输出 level为 INFO 日志 --appender nameINFO_FILE classch.qos.logback.core.rolling.RollingFileAppender!-- 正在记录的日志文件的路径及文件名 --file${log.path}/log_info.log/file!--日志文件输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset/encoder!-- 日志记录器的滚动策略按日期按大小记录 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 每天日志归档路径以及格式 --fileNamePattern${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文件保留天数--maxHistory15/maxHistory/rollingPolicy!-- 此日志文件只记录info级别的 --filter classch.qos.logback.classic.filter.LevelFilterlevelINFO/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 时间滚动输出 level为 WARN 日志 --appender nameWARN_FILE classch.qos.logback.core.rolling.RollingFileAppender!-- 正在记录的日志文件的路径及文件名 --file${log.path}/log_warn.log/file!--日志文件输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset !-- 此处设置字符集 --/encoder!-- 日志记录器的滚动策略按日期按大小记录 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePattern${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文件保留天数--maxHistory15/maxHistory/rollingPolicy!-- 此日志文件只记录warn级别的 --filter classch.qos.logback.classic.filter.LevelFilterlevelwarn/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 时间滚动输出 level为 ERROR 日志 --appender nameERROR_FILE classch.qos.logback.core.rolling.RollingFileAppender!-- 正在记录的日志文件的路径及文件名 --file${log.path}/log_error.log/file!--日志文件输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset !-- 此处设置字符集 --/encoder!-- 日志记录器的滚动策略按日期按大小记录 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePattern${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文件保留天数--maxHistory15/maxHistory/rollingPolicy!-- 此日志文件只记录ERROR级别的 --filter classch.qos.logback.classic.filter.LevelFilterlevelERROR/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!--logger用来设置某一个包或者具体的某一个类的日志打印级别、以及指定appender。logger仅有一个name属性一个可选的level和一个可选的addtivity属性。name:用来指定受此logger约束的某一个包或者具体的某一个类。level:用来设置打印级别大小写无关TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF如果未设置此属性那么当前logger将会继承上级的级别。--!--使用mybatis的时候sql语句是debug下才会打印而这里我们只配置了info所以想要查看sql语句的话有以下两种操作第一种把root levelINFO改成root levelDEBUG这样就会打印sql不过这样日志那边会出现很多其他消息第二种就是单独给mapper下目录配置DEBUG模式代码如下这样配置sql语句会打印其他还是正常DEBUG级别--!--开发环境:打印控制台--springProfile namedev!--可以输出项目中的debug日志包括mybatis的sql日志--logger namecom.guli levelINFO /!--root节点是必选节点用来指定最基础的日志输出级别只有一个level属性level:用来设置打印级别大小写无关TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF默认是DEBUG可以包含零个或多个appender元素。--root levelINFOappender-ref refCONSOLE /appender-ref refINFO_FILE /appender-ref refWARN_FILE /appender-ref refERROR_FILE //root/springProfile!--生产环境:输出到文件--springProfile nameproroot levelINFOappender-ref refCONSOLE /appender-ref refDEBUG_FILE /appender-ref refINFO_FILE /appender-ref refERROR_FILE /appender-ref refWARN_FILE //root/springProfile /configuration
http://www.zqtcl.cn/news/467142/

相关文章:

  • 新乡网站建设开发wordpress如何添加一个文章列表页
  • 中国3大做外贸的网站seo建站营销
  • 建站免费加盟高台县建设局网站
  • 网站联盟推广江门提供网站制作平台
  • 百度上面如何做网站asp源码下载
  • 婚庆网站的设计意义网站规格
  • 网站收录率嘉兴网站开发公司
  • 优秀的设计网站不备案 没版权 网站
  • 建设 互动 网站 模式网络营销模式不是孤立存在的
  • 怡梦姗网站做么上海21世纪人才网官网登录
  • 家政网站建设方案分析哈尔滨做网站找哪家好
  • 如何建设论坛网站营销宣传策划方案
  • 企业网站推广排名技术网
  • 网站建设网页设计培训学校延边网站建设
  • 自己做网站需要的技术个人简历表格下载
  • 做网站建设小程序ukidc做电影网站
  • 网站内容分析软文范例100字
  • 网站建站策划用vs做网站
  • 如何建自己的网站做农村电子商务的网站有哪些内容
  • 手机销售网站设计怎么推广软件让别人下载
  • 贵州三蒲建设工程有限公司网站莱阳网站制作
  • 外贸买家网站适合初学者模仿的网站
  • 安徽蚌埠怀远县建设局网站米卓网站建设
  • 网站框架怎么建设微信旧版本下载
  • 速贝网站友情链接怎么做企业网站开发的设计流程
  • 网站建设 安庆网站开发免责合同
  • 天津深圳网站开发定制网络工程考研方向
  • 做app网站的公司哪家好济南网站建设市场
  • 自己做网站页面网站国内空间和国外空间
  • 桂城网站制作公司asp.net jsp 网站