springboot:歸納整合止喷,框架整體應用以及插件推薦

在前兩天,Damon也是將springboot大概的狀況給大家介紹了不少乾巧,今天Damon就跟大家說說springboot框架的一些整合沟于,以及一些實用的插件介紹旷太,希望大家喜歡供璧。(最近由于實訓比較累【現在才10已經很目澀了】冻记,所以每日推薦也是比較慢冗栗,希望大家原諒隅居。)

Spring Boot 集成druid

  • druid有很多個配置選項,使用Spring Boot 的配置文件可以方便的配置druid棉钧。

  • 在application.yml配置文件中寫上:

  •   spring:
          datasource:
              name: test
              url: jdbc:mysql://192.168.16.137:3306/test
              username: root
              password:
              # 使用druid數據源
              type: com.alibaba.druid.pool.DruidDataSource
              driver-class-name: com.mysql.jdbc.Driver
              filters: stat
              maxActive: 20
              initialSize: 1
              maxWait: 60000
              minIdle: 1
              timeBetweenEvictionRunsMillis: 60000
              minEvictableIdleTimeMillis: 300000
              validationQuery: select 'x'
              testWhileIdle: true
              testOnBorrow: false
              testOnReturn: false
              poolPreparedStatements: true
              maxOpenPreparedStatements: 20
    
  • 這里通過type: com.alibaba.druid.pool.DruidDataSource配置即可宪卿!

Spring Boot 集成MyBatis

  • Spring Boot 集成MyBatis有兩種方式愧捕,一種簡單的方式就是使用MyBatis官方提供的:
    mybatis-spring-boot-starter
  • 另外一種方式就是仍然用類似mybatis-spring的配置方式,這種方式需要自己寫一些代碼瘪阁,但是可以很方便的控制MyBatis的各項配置。

mybatis-spring-boot-starter方式

  • 在pom.xml中添加依賴:

    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.0.0</version>
    

    </dependency>

  • mybatis-spring-boot-starter依賴樹如下:

  • 其中mybatis使用的3.3.0版本义黎,可以通過:

  • <mybatis.version>3.3.0</mybatis.version>屬性修改默認版本廉涕。
  • mybatis-spring使用版本1.2.3狐蜕,可以通過:
  • <mybatis-spring.version>1.2.3</mybatis-spring.version>修改默認版本。
  • 在application.yml中增加配置:

  • mybatis:
    mapperLocations: classpath:mapper/*.xml
    typeAliasesPackage: tk.mapper.model

  • 除了上面常見的兩項配置婆瓜,還有:

  • mybatis.config:mybatis-config.xml配置文件的路徑
  • mybatis.typeHandlersPackage:掃描typeHandlers的包
  • mybatis.checkConfigLocation:檢查配置文件是否存在
  • mybatis.executorType:設置執(zhí)行模式(SIMPLE, REUSE, BATCH)廉白,默認為SIMPLE

mybatis-spring方式

  • 這種方式和平常的用法比較接近猴蹂。需要添加mybatis依賴和mybatis-spring依賴宵统。

  • 然后創(chuàng)建一個MyBatisConfig配置類:

      /**
       * MyBatis基礎配置
       *
       * @author liuzh
       * @since 2015-12-19 10:11
       */
      @Configuration
      @EnableTransactionManagement
      public class MyBatisConfig implements TransactionManagementConfigurer {
          @Autowired
          DataSource dataSource;
      
          @Bean(name = "sqlSessionFactory")
          public SqlSessionFactory sqlSessionFactoryBean() {
              SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
              bean.setDataSource(dataSource);
              bean.setTypeAliasesPackage("tk.mybatis.springboot.model");
      
              //分頁插件
              PageHelper pageHelper = new PageHelper();
              Properties properties = new Properties();
              properties.setProperty("reasonable", "true");
              properties.setProperty("supportMethodsArguments", "true");
              properties.setProperty("returnPageInfo", "check");
              properties.setProperty("params", "count=countSql");
              pageHelper.setProperties(properties);
    
          //添加插件
          bean.setPlugins(new Interceptor[]{pageHelper});
    
          //添加XML目錄
          ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
          try {
              bean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
              return bean.getObject();
          } catch (Exception e) {
              e.printStackTrace();
              throw new RuntimeException(e);
          }
      }
      @Bean
      public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
          return new SqlSessionTemplate(sqlSessionFactory);
      }
    
      @Bean
      @Override
      public PlatformTransactionManager annotationDrivenTransactionManager() {
          return new DataSourceTransactionManager(dataSource);
      }
    

    }

  • 上面代碼創(chuàng)建了一個SqlSessionFactory和一個SqlSessionTemplate瓢省,為了支持注解事務勤婚,增加了@EnableTransactionManagement注解馒胆,并且反回了一個PlatformTransactionManagerBean凝果。

  • 另外應該注意到這個配置中沒有MapperScannerConfigurer器净,如果我們想要掃描MyBatis的Mapper接口,我們就需要配置這個類沿量,這個配置我們需要單獨放到一個類中冤荆。

      /**
       * MyBatis掃描接口
       * 
       * @author liuzh
       * @since 2015-12-19 14:46
       */
      @Configuration
      //注意钓简,由于MapperScannerConfigurer執(zhí)行的比較早外邓,所以必須有下面的注解
      @AutoConfigureAfter(MyBatisConfig.class)
      public class MyBatisMapperScannerConfig {
          @Bean
          public MapperScannerConfigurer mapperScannerConfigurer() {
              MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
              mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
              mapperScannerConfigurer.setBasePackage("tk.mybatis.springboot.mapper");
              //配置通用mappers
      Properties properties = new Properties();
              properties.setProperty("mappers", "tk.mybatis.springboot.util.MyMapper");
              properties.setProperty("notEmpty", "false");
              properties.setProperty("IDENTITY", "MYSQL");
              //這里使用的通用Mapper的MapperScannerConfigurer坐榆,所有有下面這個方法
              mapperScannerConfigurer.setProperties(properties);
      
              return mapperScannerConfigurer;
          }
      }
    
  • 這個配置一定要注意@AutoConfigureAfter(MyBatisConfig.class)席镀,必須有這個配置,否則會有異常顶捷。原因就是這個類執(zhí)行的比較早服赎,由于sqlSessionFactory還不存在重虑,后續(xù)執(zhí)行出錯秦士。做好上面配置以后就可以使用MyBatis了隧土。

關于分頁插件和通用Mapper集成

  • 分頁插件作為插件的例子在上面代碼中有。
  • 通用Mapper配置實際就是配置MapperScannerConfigurer的時候使用- tk.mybatis.spring.mapper.MapperScannerConfigurer即可辐脖,配置屬性使用Properties嗜价。

Spring Boot集成MyBatis的基礎項目

  • 分頁插件和通用Mapper的相關信息可以通過上面地址找到。

Spring Boot 靜態(tài)資源處理

  • Spring Boot 默認的處理方式就已經足夠了,默認情況下Spring Boot 使用WebMvcAutoConfiguration中配置的各種屬性奴拦。

  • 建議使用Spring Boot 默認處理方式届吁,需要自己配置的地方可以通過配置文件修改疚沐。

  • 但是如果你想完全控制Spring MVC,你可以在@Configuration注解的配置類上增加@EnableWebMvc痴施,增加該注解以后WebMvcAutoConfiguration中配置就不會生效辣吃,你需要自己來配置需要的每一項神得。這種情況下的配置方法建議參考WebMvcAutoConfiguration類偷仿。
    -本文以下內容針對Spring Boot 默認的處理方式酝静,部分配置通過在application.yml配置文件中設置。
    -.spring boot默認加載文件的路徑是

      /META-INF/resources/ 
      /resources/ 
      /static/ 
      /public/
      private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {  
              "classpath:/META-INF/resources/", "classpath:/resources/",  
              "classpath:/static/", "classpath:/public/" };  
    
  • 所有本地的靜態(tài)資源都配置在了classpath下面了, 而非在webapp下了

配置資源映射

  • Spring Boot 默認配置的/映射到/static(或/public 全跨,/resources浓若,/META-INF/resources)挪钓,/webjars/會映射到
  • classpath:/META-INF/resources/webjars/耳舅。
  • 注意:上面的/static等目錄都是在classpath:下面。

  • 如果你想增加如/mystatic/**映射到classpath:/mystatic/馏予,你可以讓你的配置類繼承WebMvcConfigurerAdapter霞丧,然后重寫如下方法:

       @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
          registry.addResourceHandler("/mystatic/**")
                  .addResourceLocations("classpath:/mystatic/");
      }
    
  • 這種方式會在默認的基礎上增加/mystatic/**映射到classpath:/mystatic/蛹尝,不會影響默認的方式,可以同時使用挫酿。
  • 靜態(tài)資源映射還有一個配置選項早龟,為了簡單這里用.properties方式書寫:
    spring.mvc.static-path-pattern=/** # Path pattern used for static resources.
    這個配置會影響默認的/猫缭,例如修改為/static/后饵骨,只能映射如/static/js/sample.js這樣的請求(修改前是/js/sample.js)。這個配置只能寫一個值妖混,不像大多數可以配置多個用逗號隔開的制市。

使用注意

  • 例如有如下目錄結構:

      └─resources
          │  application.yml
          │
          ├─static
          │  ├─css
          │  │      index.css
          │  │
          │  └─js
          │          index.js
          │
          └─templates
                  index.ftl
    
  • 在index.ftl中該如何引用上面的靜態(tài)資源呢祥楣?

  • 如下寫法:

  • <link rel="stylesheet" type="text/css" href="/css/index.css">
    <script type="text/javascript" src="/js/index.js"></script>

  • 注意:默認配置的/**映射到/static(或/public 误褪,/resources碾褂,/META-INF/resources)

  • 當請求/css/index.css的時候正塌,Spring MVC 會在/static/目錄下面找到恤溶。

  • 如果配置為/static/css/index.css咒程,那么上面配置的幾個目錄下面都沒有/static目錄帐姻,因此會找不到資源文件窥淆!

  • 所以寫靜態(tài)資源位置的時候忧饭,不要帶上映射的目錄名(如/static/词裤,/public/吼砂,/resources/鼎文,/META-INF/resources/)拇惋!

使用WebJars

  • WebJars:http://www.webjars.org/

  • 例如使用jquery,添加依賴:

    <dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>1.11.3</version>
    </dependency>

  • 然后可以如下使用:

    <script type="text/javascript"
    src="/webjars/jquery/1.11.3/jquery.js"></script>

  • 你可能注意到href中的1.11.3版本號了蓉坎,如果僅僅這么使用蛉艾,那么當我們切換版本號的時候還要手動修改href勿侯,怪麻煩的缴罗,我們可以用如下方式解決瞒爬。

  • 先在pom.xml中添加依賴:

    <dependency>
    <groupId>org.webjars</groupId>
    <artifactId>webjars-locator</artifactId>
    </dependency>

  • 增加一個WebJarController:

      @Controller
      public class WebJarController {
          private final WebJarAssetLocator assetLocator = new WebJarAssetLocator();
      
          @ResponseBody
          @RequestMapping("/webjarslocator/{webjar}/**")
          public ResponseEntity locateWebjarAsset(@PathVariable String webjar, HttpServletRequest request) {
              try {
                  String mvcPrefix = "/webjarslocator/" + webjar + "/";
                  String mvcPath = 
      (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
                  String fullPath = 
      assetLocator.getFullPath(webjar, mvcPath.substring(mvcPrefix.length()));
                  return new ResponseEntity(new ClassPathResource(fullPath), HttpStatus.OK);
              } catch (Exception e) {
                  return new ResponseEntity<>(HttpStatus.NOT_FOUND);
              }
          }
      }
    
  • 然后使用的時候按照如下方式:

    <script
    type="text/javascript" src="/webjarslocator/jquery/jquery.js"></script>

  • 注意:這里不需要在寫版本號了沟堡,但是注意寫url的時候航罗,只是在原來url基礎上去掉了版本號粥血,其他的都不能少酿箭!

靜態(tài)資源版本管理

  • Spring MVC 提供了靜態(tài)資源版本映射的功能。

  • 用途:當我們資源內容發(fā)生變化時缔御,由于瀏覽器緩存耕突,用戶本地的靜態(tài)資源還是舊的資源评架,為了防止這種情況導致的問題,我們可能會手動在請求url的時候加個版本號或者其他方式上祈。

  • 版本號如:

    <script
    type="text/javascript" src="/js/sample.js?v=1.0.1"></script>

  • Spring MVC 提供的功能可以很容易的幫助我們解決類似問題雇逞。

  • Spring MVC 有兩種解決方式茁裙。

  • 注意:下面的配置方式針對freemarker模板方式,其他的配置方式可以參考掉蔬。

資源名-md5 方式

<link rel="stylesheet" type="text/css" href="/css/index-2b371326aa93ce4b611853a309b69b29.css">
  • Spring 會自動讀取資源md5女轿,然后添加到index.css的名字后面壕翩,因此當資源內容發(fā)生變化的時候,文件名發(fā)生變化北救,就會更新本地資源。
  • 配置方式:
  • 在application.properties中做如下配置:

  • spring.resources.chain.strategy.content.enabled=true
    spring.resources.chain.strategy.content.paths=/**

  • 這樣配置后托启,所有/**請求的靜態(tài)資源都會被處理為上面例子的樣子屯耸。

  • 到這兒還沒完蹭劈,我們在寫資源url的時候還要特殊處理铺韧。

  • 首先增加如下配置:

  • @ControllerAdvice
    public class ControllerConfig {
    @Autowired
    ResourceUrlProvider resourceUrlProvider;
    @ModelAttribute("urls")
    public ResourceUrlProvider urls() {
    return this.resourceUrlProvider;
    }
    }

  • 然后在頁面寫的時候用下面的寫法:

    <link rel="stylesheet" type="text/css" href="${urls.getForLookupPath('/css/index.css')}">

  • 使用urls.getForLookupPath('/css/index.css')來得到處理后的資源名祟蚀。

版本號 方式

  • 在application.properties中做如下配置:

  • spring.resources.chain.strategy.fixed.enabled=true
    spring.resources.chain.strategy.fixed.paths=/js/,/v1.0.0/
    spring.resources.chain.strategy.fixed.version=v1.0.0

  • 這里配置需要特別注意割卖,將version的值配置在paths中。

  • 在頁面寫的時候罢维,寫法如下:

    <script
    type="text/javascript" src="${urls.getForLookupPath('/js/index.js')}"></script>

  • 注意肺孵,這里仍然使用了urls.getForLookupPath平窘,urls配置方式見上一種方式凳怨。
    在請求的實際頁面中,會顯示為:

    <script
    type="text/javascript" src="/v1.0.0/js/index.js"></script>

  • 可以看到這里的地址是/v1.0.0/js/index.js紫新。

靜態(tài)資源版本管理 處理過程

  • 在Freemarker模板首先會調用urls.getForLookupPath方法芒率,返回一個/v1.0.0/js/index.js或/css/index-2b371326aa93ce4b611853a309b69b29.css篙顺。
  • 這時頁面上的內容就是處理后的資源地址。這之后瀏覽器發(fā)起請求腋寨。
  • 這里分開說。
第一種md5方式
  • 請求/css/index-2b371326aa93ce4b611853a309b69b29.css萄窜,我們md5配置的paths=/**查刻,所以Spring MVC 會嘗試url中是否包含-,如果包含會去掉后面這部分普气,然后去映射的目錄(如/static/)查找/css/index.css文件现诀,如果能找到就返回仔沿。
第二種版本方式
  • 請求/v1.0.0/js/index.js。
  • 如果我們paths中沒有配置/v1.0.0封锉,那么上面這個請求地址就不會按版本方式來處理成福,因此會找不到上面的資源奴艾。
  • 如果配置了/v1.0.0内斯,Spring 就會將/v1.0.0去掉再去找/js/index.js嘿期,最終會在/static/下面找到备徐。

總結:

作為一個新生程序猿,Damon希望能夠與大家一同進步秀菱。文章或者描述有所不足的地方衍菱,希望大家多多提出來脊串,一同進步。

Damon會繼續(xù)發(fā)掘一些有用的咨詢放闺,知識以及新工具怖侦,與大家一同分享,謝謝匾寝!

過去文章都上傳到github艳悔,有興趣的小伙伴可以Star下:https://github.com/xxxyyh/Front-end-knowledge.git

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末很钓,一起剝皮案震驚了整個濱河市董栽,隨后出現的幾起案子锭碳,更是在濱河造成了極大的恐慌勿璃,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歧沪,死亡現場離奇詭異莲组,居然都是意外死亡撵孤,警方通過查閱死者的電腦和手機迈着,發(fā)現死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邪码,“玉大人裕菠,你說我怎么就攤上這事”兆ǎ” “怎么了奴潘?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長影钉。 經常有香客問我萤彩,道長,這世上最難降的妖魔是什么斧拍? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任雀扶,我火速辦了婚禮,結果婚禮上浪册,老公的妹妹穿的比我還像新娘。我一直安慰自己厚者,他們只是感情好,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布溉浙。 她就那樣靜靜地躺著馆蠕,像睡著了一般吓妆。 火紅的嫁衣襯著肌膚如雪诞吱。 梳的紋絲不亂的頭發(fā)上沼瘫,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天膜蛔,我揣著相機與錄音,去河邊找鬼。 笑死蘑辑,一個胖子當著我的面吹牛槐秧,可吹牛的內容都是我干的颠通。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匙隔!你這毒婦竟也來了撼短?” 一聲冷哼從身側響起喂柒,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤吭露,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年覆劈,在試婚紗的時候發(fā)現自己被綠了目派。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徘键。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡螟凭,死狀恐怖,靈堂內的尸體忽然破棺而出下隧,到底是詐尸還是另有隱情土辩,我是刑警寧澤启涯,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一哄啄、第九天 我趴在偏房一處隱蔽的房頂上張望锌半。 院中可真熱鬧冗澈,春花似錦捌归、人聲如沸巾兆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兵怯。三九已至袜漩,卻和暖如春座掘,著一層夾襖步出監(jiān)牢的瞬間形真,已是汗流浹背裕便。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工宝当, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留订晌,地道東北人奕枢。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子只盹,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內容