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
     * <p>
     * see: <a href=https://platform.openai.com/docs/api-reference/chat/create>https://platform.openai.com/docs/api-reference/chat/create</a>
     */
    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(取决于你的服务器在哪里)

猜你喜欢

转载自blog.csdn.net/weixin_47287832/article/details/129636504