配置文件自動注入
配置文件
如下灵疮,在application.yml中添加如下節(jié)點(也可以添加其他配置文件)
zq:
name: zqqq
age: 30
在controller中使用
- 添加注解@PropertySource(value = "classpath:application.yml")
- 在對應的屬性上添加@Value注解
@RequestMapping("json")
@RestController
@PropertySource(value = "classpath:application.yml")
public class JacksonController {
@Value("${zq.name}")
private String name;
@GetMapping("/v2/json")
public User getInfo() {
User user=new User();
user.setName(name);
user.setSex("hahah");
user.setTime(new Date());
return user;
}
}
配置文件注入bean中
- 添加@Component
- 添加注解@PropertySource(value = "classpath:application.yml")
- @ConfigurationProperties(prefix = "zq") # 代表前綴
對應實體類
@Component
@PropertySource("classpath:application.yml")
@ConfigurationProperties(prefix = "zq")
public class ServerConstant {
//實驗得出結(jié)論 此時@Value()不是必須的
@Value("${name}")
String name;
@Value("${age}")
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
因為前綴zq既可以唯一確定屬性值取配置文件中,但是如果不加(prefix = "zq")即省略前綴壳繁,則無法確定震捣,此時需要添加 @Value()荔棉;
如果配置文件中沒有前綴,只要屬性名和配置文件中屬性名一致蒿赢,也可以省略@Value()
控制器中使用
@RequestMapping("json")
@RestController
public class JacksonController {
@Autowired
private ServerConstant serverConstant;
@GetMapping("/v2/bean")
public ServerConstant getHaha() {
return serverConstant;
}
}
單元測試
基本測試
- 添加依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- 使用
@RunWith(SpringRunner.class) //底層juniSpringJUnit4ClassRunner
@SpringBootTest(classes={XdclassApplication.class})//啟動整個springboot工程
public class SpringBootTests { }
MockMvc講解
1润樱、增加類注解
@AutoConfigureMockMvc
@SpringBootTest(classes={XdclassApplication.class})
2、相關API
perform:執(zhí)行一個RequestBuilder請求
andExpect:添加ResultMatcher->MockMvcResultMatchers驗證規(guī)則
andReturn:最后返回相應的MvcResult->Response
個性化啟動banner設置和debug日志
1羡棵、啟動獲取更多信息 java -jar xxx.jar --debug
2壹若、修改啟動的banner信息
1)在類路徑下增加一個banner.txt,里面是啟動要輸出的信息
2)在applicatoin.properties增加banner文件的路徑地址 spring.banner.location=banner.txt
3)官網(wǎng)地址 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-banners
異常相關
配置全局異常
@ControllerAdvice
public class CustomExtHandle {
/**
* 全局異常
* @param e
* @param request
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
Object handleException(Exception e, HttpServletRequest request) {
Map<String,Object> map=new HashMap<>();
map.put("code",100);
map.put("msg",e.getMessage());
map.put("url",request.getRequestURL());
return map;
}
}
全局捕獲異常皂冰,但是此時針對的是json返回的異常店展,例如路徑找不到,返回的是頁面數(shù)據(jù)時候秃流,就不行了赂蕴,可以再定義一個全局的返回頁面的異常。利用ModelAndView
自定義異常
public class MyException extends RuntimeException {
private String code;
private String msg;
public MyException(String code, String msg) {
this.code = code;
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
@ControllerAdvice
public class CustomExtHandle {
/**
* 全局異常
* @param e
* @param request
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
Object handleException(Exception e, HttpServletRequest request) {
Map<String,Object> map=new HashMap<>();
map.put("code",100);
map.put("msg",e.getMessage());
map.put("url",request.getRequestURL());
return map;
}
/**
* 自定義異常: MyException集成的是RuntimeException
* @param e
* @param request
* @return
*/
@ExceptionHandler(value = MyException.class)
@ResponseBody
Object handleMyException(Exception e, HttpServletRequest request) {
//addObject添加的數(shù)據(jù)剔应,必須在模板引擎中獲取睡腿,當前設置一個hmtl,暫時沒有使用模板引擎
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error.html");
modelAndView.addObject("msg", e.getMessage());
return modelAndView;
//同理峻贮,也可以返回json數(shù)據(jù)席怪,同上一個方法
}
}
如果是返回json數(shù)據(jù) 則用RestControllerAdvice,就可以不加@ResponseBody
打War包
- 添加依賴
<build>
<!-- 構(gòu)建項目名稱,請求的基本路徑名稱 -->
<finalName>zqclass_springboot</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
此依賴不論jar(生成mainfast文件)還是war必須都有
- 修改啟動類
@SpringBootApplication
public class HelloApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(HelloApplication.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(HelloApplication.class, args);
}
}