最近有時間 回顧一下2年前用這個Springboot的點點滴滴 Springboot 讀取資原始檔
在實際的專案開發之中資原始檔一定不可或缺失,因為所有的提示文字資訊都要求在資原始檔之中進行定義,而且資原始檔是實現國際化技術的主要手段。如果要想在Springboot 裡面進行資原始檔的配置只需要做一些簡單的application.yml 配置即可 而且所有注入的資原始檔都可以像最初的Spring處理那樣直接使用MessageSource 進行讀取
1.0 為了統一管理資原始檔 在src/main/resources 目錄之中建立有一個il8n的儲存目錄
2.0 在 src/main/resources/il8n 目錄之中建立有兩個資原始檔
建立 Messages.properties
welcome.url=www.fabu0746.com
welcome.msg=zw
建立 Pages.properties
member.add.page=/pages/back/admin/member/member_add.jsp
member.add.action=/pages/back/admin/member/member_add.action
把預設配置檔案 .properties 改為.yml 格式的配置
- YAML 檔案
這是一種結構化的資料檔案,其在很多的地方上都使用過,列如 Apache Storm 開發元件上進行配置的時候使用的就是yml 配置檔案 該配置檔案的全稱 Yet Another Markup Languange 然是一種標記語言
修改 application.yml
spring: #表示該配置直接為Spring 容器負責處理 messages: #表示進行資源配置 basename: il8n/Messages,il8n/Pages #資原始檔的名稱 server: #修改訪問埠 port: 80
-
當執行完以上的配置之後會自動為使用者建立MessageSource 物件,那麼使用者在使用的時候直接注入此物件即可 。考慮真實開發的標準 建議建立一個父類的控制器的抽象類 而後在此抽象類之中進行資源讀取讀取類的配置 AbstractBaseController
package com.hema.demo2.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import java.util.Locale;
/**
* 描述:
* 抽象類 進行資源的讀取
*
* @author zw
* @create 2018-11-28 9:12 PM
*/
public abstract class AbstractBaseController {
@Autowired
private MessageSource messageSource;
public String getMessage(String key,String ... args){
System.out.println(Locale.getDefault());
return this.messageSource.getMessage(key,args, Locale.getDefault());
}
}
在控制器的子類之中讀取以上的配置資訊
package com.hema.demo2.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 描述:
* 子類 讀取抽象類配置資訊
*
* @author zw
* @create 2018-11-28 9:16 PM
*/
@RestController
public class MessageController extends AbstractBaseController {
/****
* 進行資源的讀取
* @return
*/
@RequestMapping(value = "/msg",method = RequestMethod.GET)
public String msg(String mid){
System.out.println("[****訪問地址*********]"+super.getMessage("member.add.action"));
return super.getMessage("welcome.msg",mid);
}
}
編寫一個junit 測試類 來測試以上的控制器程式是否正確
package com.hema.demo2;
import com.hema.demo2.controller.MessageController;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
/**
* 描述:
* 測試類
*
* @author zw
* @create 2018-11-29 9:16 PM
*/
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestMessageController {
@Autowired
private MessageController messageController;
@Test
public void testMsg(){
System.out.println(this.messageController.msg("zwjava"));
}
}
通過springboot 執行可以清楚的發現 在Springboot 裡面所有的物件資訊注入配置操作,都直接通過一行簡單的字串實現了,而且最終也能保持與之前同樣的執行效果。
喜歡的麻煩在 githua 上點個小星星
githua 程式碼如下 https://github.com/zhouwei520/Springboot/tree/master/demo2