如何在Java/SpringWebMVC中设置全局变量?

如何在Java/SpringWebMVC中设置全局变量?,java,spring,Java,Spring,我希望在基于Java/Spring的网站上有一组全局变量 我在想这样的事情: 电子邮件发件人(仅为1,因为它是办公室的普通电子邮件) 电子邮件服务器IP/主机(我们使用自己的smtp服务器) 还有其他我在短时间内想不到的事情 我做了一次搜索,但没有找到在哪里/如何进行搜索的有用信息 谢谢!:) 创建一个具有公共静态变量的类,并将其用作全局变量。 如果要为每个事务设置全局变量,请在java ThreadLocal上设置变量并使用它们。如果要使其可配置,请尝试将DeploymentDescripto

我希望在基于Java/Spring的网站上有一组全局变量

我在想这样的事情:

  • 电子邮件发件人(仅为1,因为它是办公室的普通电子邮件)

  • 电子邮件服务器IP/主机(我们使用自己的smtp服务器)

  • 还有其他我在短时间内想不到的事情

  • 我做了一次搜索,但没有找到在哪里/如何进行搜索的有用信息


    谢谢!:)

    创建一个具有公共静态变量的类,并将其用作全局变量。
    如果要为每个事务设置全局变量,请在java ThreadLocal上设置变量并使用它们。

    如果要使其可配置,请尝试将DeploymentDescriptor(web.xml)中的变量配置为上下文参数

    <context-param>
        <param-name>email</param-name>
        <param-value>xxx@yyyy.com</param-value>
      </context-param>
    

    对于简单而直接的解决方案,我建议您使用存储在WebContent目录下的(config)目录中的属性文件。下面是关于如何从文件中读取属性的基本代码。(可以根据需要随意修改。)创建包含静态属性键的接口或类

    对于更复杂的方法,您也可以考虑Apache CuMon配置库。

    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    public class ConfigurationReader {
    
    private static final String FILE_SEPARATOR_KEY = "file.separator";  
    private String configDirectory; // initialised with ServletContext absolute path
    private String configFileName;  // filename of the properties file
    private Properties properties;
    
    public void init() throws IOException {
        InputStream inputStream = new FileInputStream(getFileConfigPath(configDirectory, configFileName));
        try {
            properties = new Properties();
            properties.load(inputStream);
        }
        finally {
            try {
                inputStream.close();
            }
            catch(Exception e) {}
        }
    }
    
    public String getProperty(String key) {
        return properties.getProperty(key);
    }
    
    private String getFileConfigPath(String directory, String fileName) {
        StringBuilder sb = new StringBuilder();
        sb.append(directory);
        if(!sb.substring((sb.length() - 1)).equals(System.getProperty(FILE_SEPARATOR_KEY))) {
            sb.append(System.getProperty(FILE_SEPARATOR_KEY));
        }
        sb.append(fileName);        
        return sb.toString();
    }
    
    public String getConfigDirectory() {
        return configDirectory;
    }
    
    public void setConfigDirectory(String configDirectory) {
        this.configDirectory = configDirectory;
    }
    
    public String getConfigFileName() {
        return configFileName;
    }
    
    public void setConfigFileName(String configFileName) {
        this.configFileName = configFileName;
    }
    }
    

    您可以在属性文件中设置它们。查看如何在Spring中读取属性文件。
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    public class ConfigurationReader {
    
    private static final String FILE_SEPARATOR_KEY = "file.separator";  
    private String configDirectory; // initialised with ServletContext absolute path
    private String configFileName;  // filename of the properties file
    private Properties properties;
    
    public void init() throws IOException {
        InputStream inputStream = new FileInputStream(getFileConfigPath(configDirectory, configFileName));
        try {
            properties = new Properties();
            properties.load(inputStream);
        }
        finally {
            try {
                inputStream.close();
            }
            catch(Exception e) {}
        }
    }
    
    public String getProperty(String key) {
        return properties.getProperty(key);
    }
    
    private String getFileConfigPath(String directory, String fileName) {
        StringBuilder sb = new StringBuilder();
        sb.append(directory);
        if(!sb.substring((sb.length() - 1)).equals(System.getProperty(FILE_SEPARATOR_KEY))) {
            sb.append(System.getProperty(FILE_SEPARATOR_KEY));
        }
        sb.append(fileName);        
        return sb.toString();
    }
    
    public String getConfigDirectory() {
        return configDirectory;
    }
    
    public void setConfigDirectory(String configDirectory) {
        this.configDirectory = configDirectory;
    }
    
    public String getConfigFileName() {
        return configFileName;
    }
    
    public void setConfigFileName(String configFileName) {
        this.configFileName = configFileName;
    }
    }