首页 > 文章列表 > Springboot如何读取自定义pro文件注入static静态变量

Springboot如何读取自定义pro文件注入static静态变量

static springboot Pro
124 2023-05-17

Springboot如何读取自定义pro文件注入static静态变量

Springboot 读取pro文件注入static静态变量

mailConfig.properties

#服务器

mail.host=smtp.qq.com

#端口号

mail.port=587

#邮箱账号

mail.userName=hzy_daybreak_lc@foxmail.com

#邮箱授权码

mail.passWord=vxbkycyjkceocbdc

#时间延迟

mail.timeout=25000

#发送人

mail.emailForm=hzy_daybreak_lc@foxmail.com

#发件人

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方法设置为非静态,那么这个配置类的静态属性就能成功注入了。