美文网首页
SpringBoot项目的配置

SpringBoot项目的配置

作者: 吃不胖的茶叶蛋 | 来源:发表于2018-07-06 10:54 被阅读25次

    配置SQLServer

    //pom.xml
     <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>6.2.1.jre8</version>
        <scope>runtime</scope>
        <!-- scope 从maven仓库拷贝过来时默认是test -->
    </dependency>
    
    //application.yml
    spring:
      datasource:
        driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
        url: jdbc:sqlserver://172.26.1.4:1433;databaseName=MWBS_Demo4
        username: sa
        password: Pass2017
    

    主要是 driver-class 和 url 的格式

    热加载

    只需引入这个jar包,按Ctrl+F9重新编译。参考来源:http://tengj.top/2017/06/01/springboot10/#spring-boot-devtools-%E5%AE%9E%E7%8E%B0%E7%83%AD%E9%83%A8%E7%BD%B2

    <!-- 热加载  按Ctrl+F9 重新编译即可 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
    

    lombok

    1、 引入依赖

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    

    2、 安装IDEA插件

    lombok plugin

    3、 在实体bean类上加上@Data @Getter @Setter注解,可以自动给实体的属性设置get set toString方法。

    4、 @Slf4j 注解还能引入log实例,代替这种常规方式 private final Logger logger = LoggerFactory.getLogger(APIController.class);

    异常处理@ControllerAdvice

    1、 假如我在程序中抛出了FrontException(前端传过来的参数有问题),那么返回给调用方的信息就是500。
    但是我想程序在抛出异常时,返回给调用方是我自己定义的格式该怎么办?

    @PostMapping("/query")
    public ResultVO< List<QueryVO>> query(@RequestParam(value = "warningTitle",defaultValue = "") String warnTitle,
                          @RequestParam(value = "warningType") String warnType,
                          @RequestParam(value = "activated") boolean isActivated){
        log.info("【进入查询方法】warnName={}",warnTitle);
        if (StringUtils.isEmpty(warnType)) {
            log.error("【查询方法-预警类型不能为空】warnType={}",warnType);
            throw  new FrontException(ParamEnum.WARN_TYPE_IS_NULL);
        }else if(!WarnTypeEnum.isWarnType(warnType)){
            log.error("【查询方法-预警类型错误】 warnType={}",warnType);
            throw  new FrontException(ParamEnum.WARN_TYPE_ERROR);
        }
    
        List<WarnEntity> warnEntities = warnService.query(warnTitle, warnType, isActivated);
        log.info("【查询方法-查询结果集】共 "+warnEntities.size()+" 条");
    
        List<QueryVO> queryVOList = WarnEntity2QueryVOTransfer.transfer(warnEntities);
        return ResultVOUtil.success(queryVOList);
    }
    

    2、 新建一个@ControllerAdvice注解的类

    @ControllerAdvice能拦截到异常抛出的点,捕获它。

    package com.twx.handler;
    
    import com.twx.VO.ResultVO;
    import com.twx.exception.FrontException;
    import com.twx.utils.ResultVOUtil;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @ControllerAdvice
    public class FrontExceptionHandler {
    
        @ExceptionHandler(FrontException.class)
        @ResponseBody
        public ResultVO handlerFrontException(FrontException e) {
            return ResultVOUtil.error(e.getCode(), e.getMessage());
        }
    }
    
    

    Gson

    1. 有时候,我获取到一个json字符串,但是我只想获取其中一个属性值。可以这样:
    JsonObject obj = new JsonParser().parse(jsonParam).getAsJsonObject();
    //将jsonParam中的提取出来
    JsonElement jsonElement = obj.get("");
    int result = jsonElement.getAsInt();
    
    1. @SerializedName 用法

    假如json数据长这样

    {
        "AlterType`:"",
        "CustomsCode":"",
        "ExamAddrCode":"",
        "WarningThreshold":""
    

    由于这样子的json数据和java命名规范不一致(驼峰命名),所以我们要告诉gson,它原来是怎么样的。

    @Data
    public class JsonParamDto {
    
        @SerializedName("AlertType")
        private String alertType;
        @SerializedName("CustomsCode")
        private String customsCode;
        @SerializedName("ExamAddrCode")
        private String examAddrCode;
        @SerializedName("WarningThreshold")
        private String warningThreshold;
    }
    

    SpringBoot 打war包

    别以为只改改pom文件中的配置就OK了。虽然mvn会帮你打成war包的形式,但是当你放进tomcat运行时,是会报错的。

    要想能正确运行,需要做如下步骤:

    1、 修改pom.xml文件

    <groupId>com.twx</groupId>
    <artifactId>WarnSys</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>  //这里改成war 默认是jar
    
    <!--scope含义:-->
        <!--compile:默认就是compile.表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中.-->
        <!--test: 表示依赖项目仅仅参与测试相关的工作-->
        <!--runntime: 无需参与项目的编译,不过后期的测试和运行周期需要其参与-->
        <!--provided:  打包的时候可以不用包进去。其余功能等同 compile.-->
    <!-- tomcat scope改成 provided -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    

    2、 修改启动类

    让启动类继承 类SpringBootServletInitializer,然后重写configure(SpringApplicationBuilder builder)

    @SpringBootApplication
    @MapperScan("com.twx.db")
    public class SpringBootEtlApplication extends SpringBootServletInitializer {
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(SpringBootEtlApplication.class);
        }
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootEtlApplication.class, args);
        }
    }
    

    注意: 如果此时仍在开发阶段,直接运行SpringBootEtlApplication main() 会报如下错的。
    Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext

    正确的做法是: 在 terminal中以命令 mvn spring-boot:run 运行
    (我后续需要再验证。现在我是把项目添加到了本地tomcat中的。如果不添加,直接mvn spring-boot:run不知道行不行)

    相关文章

      网友评论

          本文标题:SpringBoot项目的配置

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