美文网首页
实战篇-接口实现,配置和部署

实战篇-接口实现,配置和部署

作者: jimmyz81 | 来源:发表于2022-04-20 10:57 被阅读0次

    # 接口配置

    - api配置

    通过@ControllerAdvice,截获已知异常,并返回相应的错误信息,具体见
    flower-webapi/src/main/java/plus/cove/flower/webapi/config/WebResponseException.java · Jimmy.Zhang/flower - 码云 - 开源中国 (gitee.com)

    @ControllerAdvice@ResponseBodypublic class WebResponseException {
        private final Logger log = LoggerFactory.getLogger(WebResponseException.class);
       
        @ExceptionHandler(ConstraintViolationException.class)
        public ActionResult handleConstraintViolationException(ConstraintViolationException ex) { ... }

        @ExceptionHandler(BusinessException.class)
        public ActionResult handleBusinessException(BusinessException ex) { ... }
     
        @ExceptionHandler(Exception.class)
        public ActionResult handleServerException(Exception ex) { ... }
    }

    通过@RestControllerAdvice配置统一返回ActionResult,同时支持接口直接返回ActionResult,具体见
    flower-webapi/src/main/java/plus/cove/flower/webapi/config/WebResponseAdvice.java · Jimmy.Zhang/flower - 码云 - 开源中国 (gitee.com)

    @RestControllerAdvice(basePackages = "plus.cove.flower.webapi.controller")
    public class WebResponseAdvice implements ResponseBodyAdvice<Object> {
       ...
    }

    通过ErrorController,截获一些404及未知错误来统一返回,具体见
    flower-webapi/src/main/java/plus/cove/flower/webapi/component/ErrorController.java · Jimmy.Zhang/flower - 码云 - 开源中国 (gitee.com)

    - mvc配置

    配置验证器,拦截器,格式化,转换器,具体见flower-webapi/src/main/java/plus/cove/flower/webapi/config/WebMvcConfig.java · Jimmy.Zhang/flower - 码云 - 开源中国 (gitee.com)

    @Configuration(proxyBeanMethods =false)
    @EnableWebMvc
    // 导入应用层及仓储实现层,为了保持应用层和仓储实现层不依赖其他框架,在此引入
    @ImportResource({"classpath:beans/application.xml", "classpath:beans/repository.xml"})
    // 扫描需要注入的包
    @ComponentScan({"plus.cove.flower.*", "plus.cove.infrastructure.*"})
    // 扫描过滤器等
    @ServletComponentScan({"plus.cove.flower.*"})
    public class WebMvcConfigimplements WebMvcConfigurer {
    // 配置集合验证器,可以对集合内对象进行验证
    @Override
    public Validator getValidator() { return new SpringValidatorAdapter(new CollectionValidator());}

    // 配置格式化器,对http request query数据进行转换
    @Override
    public void addFormatters(FormatterRegistry registry) { }

    // 配置转换器,对http body数据进行格式化
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}
    }

    - redis配置

    通过RedisTemplate设置redis的key及value的序列化器,通过CacheManager设置支持过期时间及其他特性,具体见flower-webapi/src/main/java/plus/cove/flower/webapi/config/RedisConfig.java · Jimmy.Zhang/flower - 码云 - 开源中国 (gitee.com)

    - filter

    通过WebWrapperFilter对请求进行包装,然后日志拦截器LogTracingInterceptor即可以打印body,具体见flower-webapi/src/main/java/plus/cove/flower/webapi/config/WebWrapperFilter.java · Jimmy.Zhang/flower - 码云 - 开源中国 (gitee.com)

    - metrics

    自定义监控指标Counter类型,需要增加某个指标,通过调用MetricsConfig.getCounter("indicator_name").increment(); 具体使用详见监控篇。

    - mybatis

    通过MyBatisConfig配置MyBatis相关参数

    @Configuration
    @EnableTransactionManagement
    // 配置扫面包
    @MapperScan(basePackages ="plus.cove.flower.repository.mybatis")
    public class MyBatisConfig {

    @Bean
    public SqlStatementInterceptor likeInterceptor() {
        // 配置自定义MyBatis拦截器
        SqlStatementInterceptor statement = new SqlStatementInterceptor();
        return statement;
    }}

    *SqlStatementInterceptor 主要实现过滤like的特殊符号_%[
    副作用就是会修改传入参数,慎用,希望大神有更好的解决方法!!

    - security

    设置安全相关,可以配合WebSecurityFilter获取当前Token

    # 接口部署

    - profile

    一般项目都会有开发环境,测试环境,生产环境,每个环境的参数是不一样的,SpringBoot的application.yml支持profile,每个profile可以设置不同的参数,通过application-{profile}.yml可以切换不同的环境。但这个需要在application.yml中指定spring.profiles.active=profile_name,手动切换还是比较繁琐且有出错的风险,所以我们需要自动化。
    第一步:在application.yml中设置spring.profiles.active="@profile.active@",为什么必须用引号,没搞明白
    第二步:在pom.xml中设置<profiles>,可以通过设置activation设置默认值
    第三步:在pom.xml中build-resources中设置资源,filtering=true,includes中设置包含的资源,如果出现打包后资源不存在,则可能是此处设置错误
    第四步:运行

    运行方式1:通过在Maven中指定Profiles,直接在IDEA中运行即可
    运行方式2:在命令中指定profile,-Pdevelop 比如:mvn spring-boot:run -Pdevelop 或者 mvn clean package -P develop

    我们平时运行可以通过上述方式执行,但是发布呢,请看下一节

    - deploy

    为了减少发布出错的机率,我们可以通过shell脚本进行发布,包括tomcat部署和docker部署

    - tomcat部署:需要在目标机器安装tomcat,具体代码见project/build/deploy.sh · Jimmy.Zhang/flower - 码云 - 开源中国 (gitee.com)
    主要流程:编译-复制-部署
    使用方式:./deploy.sh develop flower-api flower-api
    * 具体可以根据项目需要进行修改

    - docker部署:需要在本机及目标机器安装docker,具体代码见project/build/docker.sh · Jimmy.Zhang/flower - 码云 - 开源中国 (gitee.com)
    主要流程:编译-镜像-保存-获取
    * 具体可以根据项目需要进行修改

    - nginx

    Nginx官方推荐的nginx.conf标准配置 (jdon.com)



    SpringBoot入门系列

    实战篇-项目架构,原则和分层
    实战篇-基础设施,基类与配置
    实战篇-接口实现,配置和部署
    实战篇-仓储技术选型

    相关文章

      网友评论

          本文标题:实战篇-接口实现,配置和部署

          本文链接:https://www.haomeiwen.com/subject/onoxertx.html