Springboot自定义配置类

最近用java写ChatGpt接口,在本地调试的时候会用到代理,但是上线之后不用代理。使用springboot做一个配置类,当配置文件中配置了代理的相关属性,那就将代理bean注入到容器,并设置到ChatGpt的OkClient的Proxy属性中

相关代码

package com.qaai.admin.chatgpt.infra.config;

import lombok.Data;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;

import java.net.InetSocketAddress;
import java.net.Proxy;

/**
 * @author maqingbo
 * @date 2023/3/18 12:02
 * @email [email protected]
 */
@Data
@Component
@ConfigurationProperties(prefix = "openai.proxy")
public class ProxyConfig {
    private String proxyHost;
    private Integer proxyPort;
    private Proxy.Type type;

    @Bean
    @ConditionalOnProperty(name = {"openai.enable-proxy","openai.enableProxy"} ,havingValue = "true")
    public Proxy proxy() {
        Assert.notNull(proxyHost,"配置文件中未找到opai.proxy.proxy-host相关配置,请配置opai.proxy.proxy-port,或者设置enable-proxy为false来取消使用代理");
        Assert.notNull(proxyPort,"配置文件中未找到opai.proxy.proxy-port相关配置,请配置opai.proxy.proxy-port,或者设置enable-proxy为false来取消使用代理");
        Assert.notNull(type,"配置文件中未找到opai.proxy.type相关配置,请配置opai.proxy.proxy-port,或者设置enable-proxy为false来取消使用代理");
        return new Proxy(type, new InetSocketAddress(proxyHost, proxyPort));
    }
}

ChatGpt

package com.qaai.admin.chatgpt.infra.config;

import com.qaai.admin.chatgpt.infra.ChatGPT;
import lombok.Data;
import okhttp3.OkHttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;

import java.net.Proxy;

/**
 * @author maqingbo
 * @date 2023/3/18 13:02
 * @email [email protected]
 */
@Data
@Component
@ConfigurationProperties(prefix = "openai")
public class ChatGptConfig {
    /**
     * your openai key
     */
    private String key;
    /**
     * Chat completion API URL
     * 

* see: https://platform.openai.com/docs/api-reference/chat/create */ private String url; private boolean enableProxy; @Bean public ChatGPT chatGPT(@Autowired(required = false) @Nullable Proxy proxy){ ChatGPT chatGPT = new ChatGPT(); chatGPT.setApiUrl(url); chatGPT.setApiKey(key); if (proxy!=null){ OkHttpClient okHttpClient = new OkHttpClient.Builder(). proxy(proxy) .build(); chatGPT.setClient(okHttpClient); } return chatGPT; } }

配置文件

openai:
  key: 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
  url: https://api.openai.com/v1/chat/completions
  enableProxy: false
  proxy:
    proxy-host: 127.0.0.1
    proxy-port: 7890
    type: http

解释一下

当配置文件配置了openai.enableProxy或者openai.enable-proxy,并且他们的值为true时 (对应ProxyConfig的 @ConditionalOnProperty(name = {"openai.enable-proxy","openai.enableProxy"} ,havingValue = "true"))那么就自动配置Proxy这个Bean并放入容器,

当配置文件配置了openai.enableProxy或者openai.enable-proxy,并且他们的值为false时,表示此时ChatGPT 这个Bean不需要代理便可以发送请求到OpenAI(取决于你的服务器在哪里)

你可能感兴趣的:(spring,boot,java,spring)