標籤:一個 學習 pos http meta 一件事 targe 展示 ima
SpringBoot Session共用
修改pom.xml添加依賴
<!--spring session--> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
添加配置類RedisSessionConfig
@Configuration@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60)//預設是1800秒到期,這裡測試修改為60秒public class RedisSessionConfig {}
添加一個控制器類SessionController來進行測試
@RestControllerpublic class SessionController { @RequestMapping("/uid") String uid(HttpSession session) { UUID uid = (UUID) session.getAttribute("uid"); if (uid == null) { uid = UUID.randomUUID(); } session.setAttribute("uid", uid); return session.getId(); }}
先訪問http://localhost:8083/boot/uid
然後修改設定檔application.yml
spring: profiles: active: test
重新運行IDEA,test設定檔配置的連接埠是8085,所以瀏覽器輸入http://localhost:8085/boot/uid
我們看到兩個uid是一樣的。
在這裡我是使用spring boot redis來實現session共用,你還可以配合使用nginx進行負載平衡,同時共用session。
關於nginx可以參考我的另一篇文章:Nginx詳解-伺服器叢集
spring boot 國際化
在spring boot中實現國際化是很簡單的的一件事情。
(1)在resources目錄下面,我們建立幾個資源檔,messages.properties相當於是預設配置的,當其它配置中找不到記錄的時候,最後會再到這個設定檔中去尋找。
messages.propertiesmessages_en_US.propertiesmessages_zh_CN.properties
依次在這三個設定檔中添加如下配置值:
msg=我是中國人
msg=I‘m Chinese
msg=我是中國人
添加完之後,會自動將這幾個檔案包在一塊
需要注意的是這個命名是有講究的,messages.properties部分是固定的,不同語言的話,我們可以在它們中間用_區分。為什麼是固定的命名,因為源碼是寫入程式碼這樣命名的。
(2)建立一個設定檔LocaleConfig
@Configuration@EnableAutoConfiguration@ComponentScanpublic class LocaleConfig extends WebMvcConfigurerAdapter { @Bean public LocaleResolver localeResolver() { SessionLocaleResolver slr = new SessionLocaleResolver(); // 預設語言 slr.setDefaultLocale(Locale.CHINA); return slr; } @Bean public LocaleChangeInterceptor localeChangeInterceptor() { LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); // 參數名 lci.setParamName("lang"); return lci; } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(localeChangeInterceptor()); }}
(3)在控制器中,我們添加測試用的方法
// i18n @RequestMapping("/") public String i18n() { return "i18n"; } @RequestMapping("/changeSessionLanauage") public String changeSessionLanauage(HttpServletRequest request, HttpServletResponse response, String lang){ System.out.println(lang); LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); if("zh".equals(lang)){ localeResolver.setLocale(request, response, new Locale("zh", "CN")); }else if("en".equals(lang)){ localeResolver.setLocale(request, response, new Locale("en", "US")); } return "redirect:/"; }
(4)添加視圖來展示,在templates下建立檔案i18n.html,通過#可以直接擷取國際化設定檔中的配置項的值。
<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head> <meta charset="UTF-8"/> <title>$Title$</title></head><body><a href="/changeSessionLanauage?lang=en">English(US)</a><a href="/changeSessionLanauage?lang=zh">簡體中文</a><br /><h3 th:text="#{msg}"></h3><h4 th:text="${message}"></h4></body></html>
(5)運行查看效果
從.Net到Java學習第八篇——SpringBoot實現session共用和國際化