SpringBoot项目的配置
配置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 plugin3、 在实体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
- 有时候,我获取到一个json字符串,但是我只想获取其中一个属性值。可以这样:
JsonObject obj = new JsonParser().parse(jsonParam).getAsJsonObject();
//将jsonParam中的提取出来
JsonElement jsonElement = obj.get("");
int result = jsonElement.getAsInt();
- @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不知道行不行)