配置SQLServer 1 2 3 4 5 6 7 8 //pom.xml <dependency > <groupId > com.microsoft.sqlserver</groupId > <artifactId > mssql-jdbc</artifactId > <version > 6.2.1.jre8</version > <scope > runtime</scope > </dependency >
1 2 3 4 5 6 7 //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
1 2 3 4 5 6 <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-devtools</artifactId > <optional > true</optional > </dependency >
lombok 1、 引入依赖
1 2 3 4 <dependency > <groupId > org.projectlombok</groupId > <artifactId > lombok</artifactId > </dependency >
2、 安装IDEA插件
3、 在实体bean类上加上@Data @Getter @Setter注解,可以自动给实体的属性设置get set toString方法。
4、 @Slf4j 注解还能引入log实例,代替这种常规方式 private final Logger logger = LoggerFactory.getLogger(APIController.class);
异常处理@ControllerAdvice 1、 假如我在程序中抛出了FrontException(前端传过来的参数有问题),那么返回给调用方的信息就是500。 但是我想程序在抛出异常时,返回给调用方是我自己定义的格式该怎么办?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @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能拦截到异常抛出的点,捕获它。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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字符串,但是我只想获取其中一个属性值。可以这样:
1 2 3 4 JsonObject obj = new JsonParser().parse(jsonParam).getAsJsonObject(); JsonElement jsonElement = obj.get("" ); int result = jsonElement.getAsInt();
@SerializedName 用法
假如json数据长这样
1 2 3 4 5 { "AlterType`:"", "CustomsCode":"", "ExamAddrCode":"", "WarningThreshold":""
由于这样子的json数据和java命名规范不一致(驼峰命名),所以我们要告诉gson,它原来是怎么样的。
1 2 3 4 5 6 7 8 9 10 11 12 @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文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <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)
1 2 3 4 5 6 7 8 9 10 11 12 13 @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不知道行不行)