用Gradle和SpringBoot實(shí)現(xiàn)簡(jiǎn)單的RESTful框架應(yīng)用

完整GitHub代碼

Spring Boot的目的是為了簡(jiǎn)化開(kāi)發(fā)基于Spring框架的單體生產(chǎn)級(jí)系統(tǒng)赦肃,開(kāi)發(fā)直接運(yùn)行的Spring程序的框架溅蛉;也可以理解為是一種簡(jiǎn)單的微服務(wù)框架∷穑可以快速的開(kāi)發(fā)基于Spring的Web應(yīng)用船侧,而且避免了復(fù)雜繁瑣的XML配置。

文章中的例子厅各,使用IDEA進(jìn)行開(kāi)發(fā)镜撩,Gradle作為包管理和自動(dòng)化構(gòu)建工具。


注意:執(zhí)行過(guò)程中队塘,如果有依賴包無(wú)法加載的問(wèn)題袁梗,或者其他問(wèn)題,多執(zhí)行幾次gradle build確保build可以正確通過(guò)憔古。

第一步遮怜,在IDEA中創(chuàng)建一個(gè)Gradle項(xiàng)目

創(chuàng)建過(guò)程中,選擇User auto-import其他的默認(rèn)填寫(xiě)就可以鸿市,創(chuàng)建后以后默認(rèn)就有一些文件和目錄锯梁,以下是需要用到的。

  • build.gradle??gradle構(gòu)建的腳本焰情,包管理和稍后的構(gòu)建陌凳,都是在腳本中配置的。
  • src/main??程序的主程序和配置文件内舟。
  • src/main/java 主程序
  • src/main/resources 配置文件
  • src/test??測(cè)試的主程序代碼和配置文件合敦,結(jié)構(gòu)和主程序相通。

第二部谒获,配置Gradle腳本

內(nèi)容如下:

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.7.RELEASE")
    }
}

group 'com.liuwill.demo'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'spring-boot'

sourceCompatibility = 1.8

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    // tag::jetty[]
    compile("org.springframework.boot:spring-boot-starter-web") {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile("org.springframework.boot:spring-boot-starter-jetty")
    // end::jetty[]
    // tag::actuator[]
    compile("org.springframework.boot:spring-boot-starter-actuator")
    compile("org.springframework.boot:spring-boot-starter-aop")
    compile("org.springframework:spring-context-support")
    compile("org.springframework:spring-tx")
    compile "org.springframework:spring-jdbc"
    // end::actuator[]
    compile('org.freemarker:freemarker:2.3.23')
    compile 'mysql:mysql-connector-java:5.1.36'
    compile 'com.h2database:h2:1.4.189'
    compile 'org.apache.commons:commons-dbcp2:2.1'
    compile 'com.alibaba:fastjson:1.2.6'

    testCompile group: 'org.testng', name: 'testng', version: '6.9.8'
    testCompile 'com.jayway.jsonpath:json-path:2.0.0'
    testCompile("org.springframework.boot:spring-boot-starter-test")
    testCompile "org.springframework:spring-test"
}

test {
    useTestNG{
        suites 'src/test/resources/testng.xml'
        useDefaultListeners = true
    }
}

修改完之后點(diǎn)擊Gradle Tool Window中的刷新按鈕蛤肌,會(huì)自動(dòng)下載對(duì)應(yīng)的依賴包壁却。

第三步 創(chuàng)建Spring Boot的資源配置文件

src/resources/config目錄下創(chuàng)建文件application.properties,指定運(yùn)行web服務(wù)的端口裸准,還有一些之前放在xml中的配置項(xiàng)展东。

server.port=8080
local.server.port = 8080

#MySql Config
spring.datasource.url=jdbc:mysql://localhost/demodb
spring.datasource.username=demo
spring.datasource.password=0123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.initialize=false

第四步 創(chuàng)建Spring Boot的主類

主類中包含Main函數(shù),是程序的掛載點(diǎn)炒俱,可以通過(guò)Java執(zhí)行的方式盐肃,直接運(yùn)行該類,就可以通過(guò)SpringBoot來(lái)編寫(xiě)Spring框架的應(yīng)用权悟。

package com.liuwill.demo.boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import java.util.Arrays;

@SpringBootApplication
public class DemoBootApplication {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(DemoBootApplication.class, args);

        System.out.println("通過(guò)SpringBoot來(lái)注入依賴:");

        String[] beanNames = ctx.getBeanDefinitionNames();
        Arrays.sort(beanNames);
        for (String beanName : beanNames) {
            System.out.println(beanName);
        }
    }

}

第五步 通過(guò)注解和類的方式來(lái)進(jìn)行SpringMVC配置

SpringBoot通過(guò)注解的方式來(lái)實(shí)現(xiàn)SpringMVC配置砸王,代替復(fù)雜的XML文件,可以通過(guò)創(chuàng)建一系列不同的類峦阁,進(jìn)行各種相應(yīng)的配置谦铃,首先通過(guò)一個(gè)繼承WebMvcConfigurerAdapter進(jìn)行基礎(chǔ)的配置,這里使用freemarker作為模版引擎榔昔。通過(guò)ComponentScan注解驹闰,可以配置要掃描bean的路徑。

@Configuration
@EnableWebMvc
@EnableTransactionManagement
@EnableAutoConfiguration
@ComponentScan(basePackages = {
        "com.liuwill.demo.boot.controller","com.liuwill.demo.boot.dao"
})
public class MvcConfigurer extends WebMvcConfigurerAdapter {
    @Bean
    public ViewResolver viewResolver() {
        FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
        resolver.setCache(true);
        resolver.setPrefix("");
        resolver.setSuffix(".ftl");
        resolver.setContentType("text/html; charset=UTF-8");
        return resolver;
    }

    @Bean
    public FreeMarkerConfigurer freemarkerConfig() throws IOException, TemplateException {
        FreeMarkerConfigurationFactory factory = new FreeMarkerConfigurationFactory();
        factory.setTemplateLoaderPaths("classpath:templates", "src/main/resource/templates");
        factory.setDefaultEncoding("UTF-8");
        FreeMarkerConfigurer result = new FreeMarkerConfigurer();
        result.setConfiguration(factory.createConfiguration());
        return result;
    }
}

第六步 編寫(xiě)一個(gè)簡(jiǎn)單的控制器

到這里基本的Spring Boot代碼已經(jīng)編寫(xiě)好撒会,通過(guò)@RestController注解實(shí)現(xiàn)一個(gè)控制器類就可以看到運(yùn)行的效果嘹朗,代碼如下

@RestController
public class DemoController {
    @Autowired
    private DemoService demoService;

    @Autowired
    private DemoUserService demoCommonService;

    @RequestMapping("/demo")
    public Map index() {
        Map resultMap = new HashMap();
        resultMap.put("status","success");
        resultMap.put("content",demoService.getString());
        return resultMap;
    }

    @RequestMapping(value = "/mobile/{mobile:.+}", method = RequestMethod.GET)
    public Object getSingleLoanItem(@PathVariable("mobile") String mobile) {
        Map resultMap = new HashMap();
        resultMap.put("status","success");
        resultMap.put("content",demoCommonService.getUserByMobile(mobile));
        return resultMap;
    }
}

接下來(lái)運(yùn)行Gradle命令,gradle bootRun或者gradle run诵肛,就可以運(yùn)行SpringBoot屹培,并且加載Spring MVC框架了。直接執(zhí)行curl http://localhost:8080/demo或者在瀏覽器中打開(kāi)對(duì)應(yīng)鏈接怔檩,就可以看到效果褪秀。


此外,idea默認(rèn)會(huì)使用windows自帶的gbk編碼珠洗,會(huì)出現(xiàn)中文亂碼問(wèn)題溜歪,要在file encoding中設(shè)置所有的編碼都是utf8。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末许蓖,一起剝皮案震驚了整個(gè)濱河市蝴猪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膊爪,老刑警劉巖自阱,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異米酬,居然都是意外死亡沛豌,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)加派,“玉大人叫确,你說(shuō)我怎么就攤上這事∩纸酰” “怎么了竹勉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)娄琉。 經(jīng)常有香客問(wèn)我次乓,道長(zhǎng),這世上最難降的妖魔是什么孽水? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任票腰,我火速辦了婚禮,結(jié)果婚禮上女气,老公的妹妹穿的比我還像新娘杏慰。我一直安慰自己,他們只是感情好炼鞠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布逃默。 她就那樣靜靜地躺著,像睡著了一般簇搅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上软吐,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天瘩将,我揣著相機(jī)與錄音,去河邊找鬼凹耙。 笑死姿现,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肖抱。 我是一名探鬼主播备典,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼意述!你這毒婦竟也來(lái)了提佣?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤荤崇,失蹤者是張志新(化名)和其女友劉穎拌屏,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體术荤,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡倚喂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓣戚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片端圈。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡焦读,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舱权,到底是詐尸還是另有隱情矗晃,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布刑巧,位于F島的核電站喧兄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏啊楚。R本人自食惡果不足惜吠冤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恭理。 院中可真熱鬧拯辙,春花似錦、人聲如沸颜价。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)周伦。三九已至夕春,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間专挪,已是汗流浹背及志。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寨腔,地道東北人速侈。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像迫卢,于是被迫代替她去往敵國(guó)和親倚搬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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