springboot静态方法使用配置文件的参数

编程时经常需要写一些工具类,大部分的工具类都是static的方法,由于static方法中不能引用非静态的变量,若我们需要使用配置文件中的变量该如何弄呢?请看下面的例子

 springboot写法

/**
 * jsoup通过代理爬取数据
 */
@Component
public class JsoupUtils {
    private static Logger logger = LoggerFactory.getLogger(JsoupUtils.class);

    private static boolean proxyFlag;//是否启用代理
    private static String proxyHost;//代理地址
    private static int proxyPort;//代理端口
    private static String proxyUser;//代理登录用户名
    private static String proxyPassword;//密码


    @Value("${http.proxy.flag}")//这是对应的配置文件中的配置项
    public void setProxyFlag(boolean proxyFlag){
        JsoupUtils.proxyFlag = proxyFlag;
    }
    @Value("${http.proxy.host}")
    public void setProxyHost(String proxyHost){
        JsoupUtils.proxyHost = proxyHost;
    }
    @Value("${http.proxy.port}")
    public void setProxyProt(int proxyPort){
        JsoupUtils.proxyPort = proxyPort;
    }
    @Value("${http.proxy.user}")
    public void setProxyUser(String proxyUser){
        JsoupUtils.proxyUser = proxyUser;
    }
    @Value("${http.proxy.pass}")
    public void setProxyPassword(String proxyPassword){
        JsoupUtils.proxyPassword = proxyPassword;
    }

    /**
     * 通过代理访问信息
     *
     * @param url       请求地址  带参数
     * @return
     */
    public static Document getMessageWithProxy(String url) throws Exception{

       
            if(proxyFlag) {
           
                MyAuthenticator.setDefault(new MyAuthenticator(proxyUser, proxyPassword));
                Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));

                return Jsoup.connect(url).ignoreContentType(true).proxy(proxy).get();
            }
            return Jsoup.connect(url).ignoreContentType(true).get();
    }
}

/**
 * 重写代理认证
 */
class MyAuthenticator extends Authenticator {
    private String user = "";
    private String password = "";

    public MyAuthenticator(String user, String password) {
        this.user = user;
        this.password = password;
    }

    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(user, password.toCharArray());
    }

}

注意事项

     1.类需要添加@Component注解,这样spring才会扫描到该类,并将配置信息注入

     2.需要将变量命名为static的,然后通过sping注入时对静态变量赋值

 

传统spirngmvc写法

  /**
     * 通过代理访问信息
     *
     * @param url       请求地址  带参数
     * @return
     */
    public static Document getMessageWithProxy(String url) throws Exception{

            Configuration config = new PropertiesConfiguration("conf.properties");
            boolean proxyFlag = config.getBoolean("httpclient.proxy.flag");
            if(proxyFlag) {
                String proxyHost = config.getString("httpclient.proxy.host");
                int proxyPort = config.getInt("httpclient.proxy.port");
                String proxyUser = config.getString("httpclient.proxy.user");
                String proxyPassword = config.getString("httpclient.proxy.password");
                MyAuthenticator.setDefault(new MyAuthenticator(proxyUser, proxyPassword));
                Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));

                return Jsoup.connect(url).ignoreContentType(true).proxy(proxy).get();
            }
            return Jsoup.connect(url).ignoreContentType(true).get();
    }
}

这里需要手动加载配置文件,然后再读取里面的值。

你可能感兴趣的:(代码)