SpringBoot项目的配置

2018-07-06  本文已影响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不知道行不行)

上一篇下一篇

猜你喜欢

热点阅读