SpringBoot(二徙瓶、配置文件注入毛雇,異常,測試侦镇,打包)

配置文件自動注入

配置文件

如下灵疮,在application.yml中添加如下節(jié)點(也可以添加其他配置文件)

zq:
  name: zqqq
  age: 30

在controller中使用

@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;
    }
}

單元測試

基本測試

  1. 添加依賴
<dependency>
    <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
  1. 使用
@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);
    }
}
圖一.png

訪問測試: http://127.0.0.1:8080/zq_springboot/json/v2/bean

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纤控,隨后出現(xiàn)的幾起案子挂捻,更是在濱河造成了極大的恐慌,老刑警劉巖船万,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刻撒,死亡現(xiàn)場離奇詭異,居然都是意外死亡耿导,警方通過查閱死者的電腦和手機声怔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舱呻,“玉大人醋火,你說我怎么就攤上這事∠渎溃” “怎么了芥驳?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長茬高。 經(jīng)常有香客問我兆旬,道長,這世上最難降的妖魔是什么怎栽? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任丽猬,我火速辦了婚禮宿饱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宝鼓。我一直安慰自己刑棵,他們只是感情好巴刻,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布愚铡。 她就那樣靜靜地躺著,像睡著了一般胡陪。 火紅的嫁衣襯著肌膚如雪沥寥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天柠座,我揣著相機與錄音邑雅,去河邊找鬼。 笑死妈经,一個胖子當著我的面吹牛淮野,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吹泡,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼骤星,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了爆哑?” 一聲冷哼從身側(cè)響起洞难,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎揭朝,沒想到半個月后队贱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡潭袱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年柱嫌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屯换。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡编丘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出趟径,到底是詐尸還是另有隱情瘪吏,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布蜗巧,位于F島的核電站掌眠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏幕屹。R本人自食惡果不足惜蓝丙,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一级遭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧渺尘,春花似錦挫鸽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至医咨,卻和暖如春枫匾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拟淮。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工干茉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人很泊。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓角虫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親委造。 傳聞我的和親對象是個殘疾皇子戳鹅,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 三十天,找到一個男朋友争涌,聽起來就特別有意思粉楚,還真的有人去做了,而且做到了亮垫。做自己喜歡做的事模软,做最真實的自己,那個女...
    卓欣閱讀 141評論 0 0
  • 1饮潦、只需要簡簡單單的導入第三方庫:Masonry 2燃异、在工程中創(chuàng)建預編譯文件pch(創(chuàng)建過程可參考渣渣的“Xcod...
    毛茸茸的我總念成橡皮蝦閱讀 282評論 0 4
  • 曾經(jīng)感情無比美好,令無數(shù)人羨慕的一對继蜡,因為一點小事而分手回俐,成為朋友。人們的感情是無比的脆弱啊稀并,一年半的長相廝守經(jīng)不...
    992bd0e8393f閱讀 317評論 0 0
  • 這題就是anagram那道easy題仅颇。先要clarification, 是否區(qū)分大小寫。長度不同就不用判斷了肯定f...
    DrunkPian0閱讀 205評論 0 0
  • 親愛的父親: 不知相隔在陰陽的您碘举,能否看到女兒字字泣血的信忘瓦?一次次用手指在手機屏幕上寫,想為您寫點什么引颈,卻...
    鄭曉丹_27cf閱讀 404評論 2 0