Springboot 讀取自定義pro文件註入static靜態變量方式
Springboot 讀取pro文件註入static靜態變量
mailConfig.properties
#服務器 mail.host=smtp.qq.com #端口號 mail.port=587 #郵箱賬號 [email protected] #郵箱授權碼 mail.passWord=vxbkycyjkceocbdc #時間延遲 mail.timeout=25000 #發送人 [email protected] #發件人 mail.personal=華夏衣裳 #主題 mail.subject=同袍用戶激活 #內容模板 mail.html=您的郵箱驗證碼為:
MailConfig.java
/* * @(#)MailConfig.java Created on 2019年9月11日 * Copyright (c) 2019 ZDSoft Networks, Inc. All rights reserved. * $Id$ */ package com.hxyc.config.properties; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; /** * @author huangzy * @version $Revision: 1.0 $, $Date: 2019年9月11日 上午10:29:35 $ */ @Configuration @PropertySource(value = "classpath:config/mailConfig.properties", encoding = "UTF-8") @Component public class MailConfig { public static String host; public static Integer port; public static String userName; public static String passWord; public static String emailForm; public static String timeout; public static String personal; public static String html; public static String subject; /** * @return Returns the host. */ public static String getHost() { return host; } /** * @param host * The host to set. */ @Value("${mail.host}") public void setHost(String host) { MailConfig.host = host; } /** * @return Returns the port. */ public static Integer getPort() { return port; } /** * @param port * The port to set. */ @Value("${mail.port}") public void setPort(Integer port) { MailConfig.port = port; } /** * @return Returns the userName. */ public static String getUserName() { return userName; } /** * @param userName * The userName to set. */ @Value("${mail.userName}") public void setUserName(String userName) { MailConfig.userName = userName; } /** * @return Returns the passWord. */ public static String getPassWord() { return passWord; } /** * @param passWord * The passWord to set. */ @Value("${mail.passWord}") public void setPassWord(String passWord) { MailConfig.passWord = passWord; } /** * @return Returns the emailForm. */ public static String getEmailForm() { return emailForm; } /** * @param emailForm * The emailForm to set. */ @Value("${mail.emailForm}") public void setEmailForm(String emailForm) { MailConfig.emailForm = emailForm; } /** * @return Returns the timeout. */ public static String getTimeout() { return timeout; } /** * @param timeout * The timeout to set. */ @Value("${mail.timeout}") public void setTimeout(String timeout) { MailConfig.timeout = timeout; } /** * @return Returns the personal. */ public static String getPersonal() { return personal; } /** * @param personal * The personal to set. */ @Value("${mail.personal}") public void setPersonal(String personal) { MailConfig.personal = personal; } /** * @return Returns the html. */ public static String getHtml() { return html; } /** * @param html * The html to set. */ @Value("${mail.html}") public void setHtml(String html) { MailConfig.html = html; } /** * @return Returns the subject. */ public static String getSubject() { return subject; } /** * @param subject * The subject to set. */ @Value("${mail.subject}") public void setSubject(String subject) { MailConfig.subject = subject; } }
springboot靜態屬性註入的解決
第一種方式
通過springboot組件初始化生命周期進行屬性(對象)賦值
@Component public class DSHWechatApiUtil extends DSHBaseController { @Autowired private IThirdPartyAuthDao thirdPartyAuthDao; private static IThirdPartyAuthDao staticThirdPartyAuthDao; @PostConstruct public void init() { staticThirdPartyAuthDao = thirdPartyAuthDao; } public static JSONObject getAuthorizerToken(String componentAccessToken, String authorizerAppid, String authorizerRefreshToken) { JSONObject returnObject = new JSONObject(); try { if (DSHUtils.isEmpty(componentAccessToken)) { componentAccessToken = staticThirdPartyAuthDao.selectWechatValue(DSHConstants.WECHAT_PARAMS.COMPONENT_ACCESS_TOKEN); } } catch (Exception e) { e.printStackTrace(); } return returnObject; } }
可以看到,當DSHWechatApiUtil工具類組件進行初始化時,調用@PostConstruct註解標註的方法,對靜態變量進行瞭賦值。
第二種方式
通過@Value()註解
@Value()註解不會對靜態變量進行屬性註入,通過第一種方式的思維,那麼我們肯定得想個辦法,在這個組件初始化時也來賦值。
第一種方式肯定也是可以的,先寫一個屬性,然後通過@Value()註解對這個屬性進行賦值,最後通過@PostConstruct註解方式賦值給靜態屬性。
這裡我們要采用另一個方式,這裡的方式是通過set方法來賦值。屬性是static修飾的,get方法也是static修飾的,但是set方法不能是static修飾,使用@Value()註解來修飾set方法。
這樣就能成功註入。
第三種方式
第三種方式和第二種差不多,
@ConfigurationProperties(prefix = ProjectConfig.PROJECT_PREFIX) public class ProjectConfig { public static final String PROJECT_PREFIX = "project"; /** * 系統版本號 */ private String version; /** * 項目名稱 */ private String name; /** * 版權年份 */ private String copyrightYear; /** * 實例演示開關 */ private static boolean demoEnabled; /** * 獲取地址ip開關 */ private static boolean addressEnabled; public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCopyrightYear() { return copyrightYear; } public void setCopyrightYear(String copyrightYear) { this.copyrightYear = copyrightYear; } public boolean isDemoEnabled() { return demoEnabled; } public void setDemoEnabled(boolean demoEnabled) { ProjectConfig.demoEnabled = demoEnabled; } public static boolean isAddressEnabled() { return addressEnabled; } public void setAddressEnabled(boolean addressEnabled) { ProjectConfig.addressEnabled = addressEnabled; } }
如上述代碼,隻要把set方法設置為非靜態,那麼這個配置類的靜態屬性就能成功註入瞭。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Java將文件上傳到ftp服務器
- SpringBoot集成SFTP客戶端實現文件上傳下載實例
- Springboot實現發送郵件
- Java實現FTP文件上傳
- springboot整合redis實現發送郵箱並驗證